Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Аппроксимация функции sin(x) методом МНК


Автор: Lutfen 1.4.2010, 13:03
Есть таблично заданные данные:
Xi=[0,20, ..., 360]
Yi=[1261,1204,993,654,321,-236,-580,-1050,-1302,-1406,-1350,-1139,-800,-373,105,534,804,1157,1261]

Если построить график, то получается синусоида. 
Как мне ее правильно аппроксимировать, методом МНК, используя функцию sinX ? 

Автор: GoldFinch 1.4.2010, 13:16
для МНК функцию надо представить как 
  y = a*f(x)+b, 
где a, b - коэффициенты которые определит МНК,
f - известная функция

соответственно тут 
y = a sin(x) + b
значит надо найти {Ti} = {sin(Xi)}
затем применить линейный регрессионный анализ к точкам {Ti}  и {Yi}

В Excel'е это функция ЛИНЕЙН(), 
если надо - в справке к ней написаны формулы которые она использует.

Автор: VictorTsaregorodtsev 1.4.2010, 15:31
GoldFinch правильно подсказал, что если линеаризировать, то будет проще всего (и екселем можно будет проверить).
Lutfen, если нужны другие варианты (перед преподом, например, извилины растопырить) - то вот:
1) можно записать МНКшный критерий типа Сумма[(y-y')^2], т.е. сумма (по всем эталонным парам "аргумент-значение") квадратов ошибок аппроксимации, продифференцировать этот критерий по параметрам идентифицируемой функции, приравнять производные к нулю и решить систему уравнений.
2) с некоторым малым шагом топать вдоль вектора антиградиента (градиент - вектор частных производных, в данном случае, МНКшного критерия, антиградиент - градиент со знаком "минус") до тех пор, пока не придем в минимум критерия (где первые производные равны нулю). Будет ли минимум глобальным или локальным - будет зависеть от вида оптимизируемой функции (при y=a*sin(x)+b все минимумы вроде должны быть глобальными, а вот если вводим еще и частоту-фазу, т.е. y=a*sin(zx+w)+b, то могут появиться и локальные минимумы).


Автор: GoldFinch 1.4.2010, 16:17
del.

Автор: Lutfen 1.4.2010, 16:20
То есть, я так понимаю, нахожу коэффициенты а и b как для линейной регрессии

b=[n*Sum(Y*X)-Sum(X)*Sum(Y)]/[n*Sum(X^2)-Sum(X)^2];

a=[Sum(Y)-b*Sum(X)];

Затем подставляю в функцию Y(x)=a*sin(x)+b и у меня должно получится моя синусоида?

Добавлено через 6 минут и 16 секунд
VictorTsaregorodtsev, а можно про второй вариант более подробно(по проще в понимании), так как в первым вариантом у меня не получается моя синусоида, выходит прямая((( 

Автор: Akina 1.4.2010, 16:44
Можно тупо Экселем... см. аттач. Главное - правильно подобрать начальные значения.

Автор: GoldFinch 1.4.2010, 17:19
Цитата(Lutfen @  1.4.2010,  16:20 Найти цитируемый пост)
То есть, я так понимаю, нахожу коэффициенты а и b как для линейной регрессии

b=[n*Sum(Y*X)-Sum(X)*Sum(Y)]/[n*Sum(X^2)-Sum(X)^2];

a=[Sum(Y)-b*Sum(X)];

вместо X - sin(X)

Автор: Lutfen 2.4.2010, 07:46
Цитата(GoldFinch @ 1.4.2010,  17:19)
Цитата(Lutfen @  1.4.2010,  16:20 Найти цитируемый пост)
То есть, я так понимаю, нахожу коэффициенты а и b как для линейной регрессии

b=[n*Sum(Y*X)-Sum(X)*Sum(Y)]/[n*Sum(X^2)-Sum(X)^2];

a=[Sum(Y)-b*Sum(X)];

вместо X - sin(X)


Сделал так, получилось не то...smile 


Автор: Pavia 2.4.2010, 10:21
Lutfen, У тебя не sin(x), а cos(x).

Автор: Lutfen 12.4.2010, 08:22
Подскажите где можно найти информацию об этом!!! ну очень нужно....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)