8 / 8 / 2
Регистрация: 19.05.2014
Сообщений: 134
1

Аппроксимация синусоиды

16.10.2015, 15:02. Показов 18681. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Помогите с аппроксимацией.

С шагом в 1 на отрезке от 0 до 360 для каждого X сопоставляется другое значение Y.
Y = sin(x) +delta delta={-0.01..0.01}
Если это все отобразить графически то получится корявая синусоида
Аппроксимация синусоиды


Нужно аппроксимировать это синусоиду в нормальную. Какие методы применять в конкретном случае, может есть готовые алгоритмы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2015, 15:02
Ответы с готовыми решениями:

Аппроксимация
Здравствуйте, форумчане! Подскажите, пожалуйста, что можно придумать... Есть зависимость I(V) ( ток...

Аппроксимация полиномом Чебышева
Всем привет. Прежде чем написать сюда, потратил почти сутки на поиск информации. Нашел много чего...

Аппроксимация многомерной функции
Нужно представить функцию нескольких переменных (3 и более) как суперпозицию функций меньшего числа...

Аппроксимация полиномами Ньютона или Лагранжа
Не могли бы вы помочь разобраться мне с апроксимацией.Как я понимаю, дана формула по которой...

6
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,162
Записей в блоге: 24
17.10.2015, 16:44 2
Если я правильно понял суть задачи, что дан набор точек, которые лежат почти на синусоиде, и необходимо определить параметры этой самой синусоиды, то достаточно метода наименших квадратов.

Суть в минимизации функции
https://www.cyberforum.ru/cgi-bin/latex.cgi?S(a,k) = \sum_n (y_n - a\sin(kx_n))^2
которая соотв. уравнениям
https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_n \sin(kx_n)(y_n - a\sin(kx_n)) = 0, \\<br />
\sum_n \cos(kx_n)(y_n-a\sin(kx_n))=0
Эти уравнения решаются относительно (a,k) любыми численными методами. Например, методом градиентного спуска или методом Ньютона.

Если честность не очень важна, то можно найти любые две точки, которые будут достаточно далеко друг от друга по X, но Y~0 у обеих.
Далее считаем сумму всех Y точек, которые по X располагаются между ними, ищем среди них попутно наибольший Y. Делим сумму на наибольший Y, делим на число точек, умножаем на разницу X крайних точек, получаем оценку (с точностью до константы) на период синусоиды. Ну и так далее.
2
8 / 8 / 2
Регистрация: 19.05.2014
Сообщений: 134
20.10.2015, 16:19  [ТС] 3
С учетом вашего сообщения переделал задачу, для моего случая она будет выглядеть вот-так. С методами решения систем уравнений не разобрался, слишком математическим языком описывается алгоритм. Нуждаюсь в вашей помощи.
Аппроксимация синусоиды

Не по теме:

Не знаю как вбивать здесь формулы поэтому пришлось воспользоваться Google Docs и привести скриншот задачи

0
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,162
Записей в блоге: 24
20.10.2015, 17:55 4
Возьмём к примеру итеративный метод Ньютона решения системы уравнений F(a,b,c)=0, который заключается в переходе на каждом шаге от точки A к точке https://www.cyberforum.ru/cgi-bin/latex.cgi?A' = A - J(A)^{-1} F(A), где J — матрица из производных компонент вектора F по компонентам A=(a,b,c).

F имеет вид:
Код
F[a,b,c] = Sum[{
   y[[n]] - a - b Sin[x[[n]] + c],
   Sin[x[[n]] + c] (y[[n]] - a - b Sin[x[[n]] + c]),
   Cos[x[[n]] + c] (y[[n]] - a - b Sin[x[[n]] + c])
   }, {n, 1, len}];
J можно считать конечными разницами или выписать аналитическую формулу. Я переложил эту задачу на Wolfram Mathematica.

В качестве начальной точки я использовал a=b=c=0, 10 шагов.

Итак, вот решение:
Аппроксимация синусоиды
1
8 / 8 / 2
Регистрация: 19.05.2014
Сообщений: 134
05.11.2015, 13:23  [ТС] 5
По вашей схеме не получилось сделать, не разобрался в ней все равно. Мне всю эту аппроксимацию надо реализовать на Delphi.

Попробовал "аппроксимировать" по трем точкам по схеме z[n] = (y[n-1] + y[n] + y[n+1] )/3. где Y[n] - изначально данный массив значений по Х.
По этой схеме параметры a, b находятся достаточно точно, ошибки во втором знаке после запятой. У фазы получается разброс +- 10 градусов. Далее считая что параметры a,b правильные пытался решить уравнение одной неизвестной - по фазе. Ответ получается почему-то всегда равен - 180 градусам. Буду благодарен если опишите ваш алгоритм более подробно на Delphi (или похожем ЯП)
0
8 / 8 / 2
Регистрация: 19.05.2014
Сообщений: 134
09.11.2015, 11:34  [ТС] 6
В общем расписываю одно из верных решений для моего случая с сайта

Если X идёт с равномерным шагом, то МНК не нужен.
Сначала сводите задачу к Y=a+d*sin(X)+f*cos(X).
Довольно очевидно, что a=sum(Y)/n (поскольку sum(sin(X))=sum(cos(X))=0).
Далее, умножаете обе части исходной формулы на sin(X):
sum(Y*sin(x))=a*sum(sin(X))+d*sum(sin(X)^2)+f*sum(sin(X)*cos(X))
Выполняются условия sum(sin(X))=sum(sin(X)*cos(X))=0, sum(sin(X)^2)=n/2 (если n > 2). Отсюда d=sum(Y*sin(X))*2/n. Аналогично, f=sum(Y*cos(X))*2/n.

b и c вычисляется из системы уравнений
b*cos(c) = d
b*sin(c) = f
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.11.2015, 20:05 7
А зачем перемалывать кучу тригонометрии? А не проще визуально на графике таская всего 2 точки задать одной амплитуду а второй частоту? И взять формулу синусоиды где будут всего 2 параметра A0 частота, A1 амплитуда.
0
12.11.2015, 20:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2015, 20:05
Помогаю со студенческими работами здесь

Аппроксимация ломанной кривой используя дуги окружностей
Доброго времени суток. Перехожу сразу к описанию поставленной задачи. Существует множество...

Аппроксимация функций нескольких переменных полиномом методом наименьших квадратов
Нашел толковую статтю по этой теме... http://alexeypetrov.narod.ru/C/sqr_less_about.html Но там...

Аппроксимация синусоиды методом найменьших квадратов
Здравствуйте ,есть код работающий и выводящий график, но нужна динамичность .Не могу засунуть...

график синусоиды
требуется написать график синосоиды, чтоб при запуске был график синосоиды с осями и чтоб на осе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru