Одношаговый предиктор
Автор: greg4 • Май 4, 2020 • Лабораторная работа • 436 Слов (2 Страниц) • 322 Просмотры
ОДНОШАГОВЫЙ ПРЕДИКТОР
Задача:
Написать программу на вход которой подается неизвестная функция. По ходу выполнения программа должна выдать последующие (предсказанные) значения функции, пользуясь предыдущими известными значениями.
Алгоритм:
1.Случайно выбираем веса w.
2.Берем первые K- значений и делаем оценку X(k+1).
3.Подкручиваем все веса.
4.Выполняем шаги 2- 3 пока ошибка не достигнет приемлемого уровня.
Результат:
График sin(x)
[pic 1]
Код Программы на Си:
#include
#include
#include
#include
const int Z=10;
const float Q=0.01;//скорость обучения
void main(){
int i=0,h=0,end=0,e=0;
float k=0,j=0,next=0,s=0;
float v[Z],l[Z]={0,0,0,0,0,0,0,0,0,0};
for(i=0;i
v[i]=(rand()%200-100)*0.01;
printf("%0.2f \n",v[i]);
}
printf("\n\n\n");
for(i=0;1;i++){
j+=0.2; //реальный синус
k=sin (1/(j));
printf("%0.2f ",k);
next=0;
for(h=0;h
next+=v[h]*l[h];
}
printf("%0.2f ",next);
if(end==0)for (h=0;h
v[h]+=(k-next)*l[h]*Q; //подкрутка всех весов
}
for (h=0;h
l[h]=k;
printf("%0.5f\n",abs(k-next)); //вывод разницы
if(abs(k-next)<=0.0001 && end==0){
end=1;
printf("\n\nend of training\n\n\n"); //закончить обучение
}
if(end==1)e++;
...