| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Аппроксимация функции 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 |
| Можно тупо Экселем... см. аттач. Главное - правильно подобрать начальные значения. |
| Автор: Lutfen 2.4.2010, 07:46 | ||||
Сделал так, получилось не то... |
| Автор: Pavia 2.4.2010, 10:21 |
| Lutfen, У тебя не sin(x), а cos(x). |
| Автор: Lutfen 12.4.2010, 08:22 |
| Подскажите где можно найти информацию об этом!!! ну очень нужно.... |