Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/103: Рейтинг темы: голосов - 103, средняя оценка - 4.92
8 / 8 / 2
Регистрация: 19.05.2014
Сообщений: 134

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

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

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

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


Нужно аппроксимировать это синусоиду в нормальную. Какие методы применять в конкретном случае, может есть готовые алгоритмы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2015, 15:02
Ответы с готовыми решениями:

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

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

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

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

Суть в минимизации функции
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  [ТС]
С учетом вашего сообщения переделал задачу, для моего случая она будет выглядеть вот-так. С методами решения систем уравнений не разобрался, слишком математическим языком описывается алгоритм. Нуждаюсь в вашей помощи.

Не по теме:

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

0
Эксперт функциональных языков программированияЭксперт по математике/физике
4310 / 2102 / 431
Регистрация: 19.07.2009
Сообщений: 3,184
Записей в блоге: 24
20.10.2015, 17:55
Возьмём к примеру итеративный метод Ньютона решения системы уравнений 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 имеет вид:
Code
1
2
3
4
5
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  [ТС]
По вашей схеме не получилось сделать, не разобрался в ней все равно. Мне всю эту аппроксимацию надо реализовать на 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  [ТС]
В общем расписываю одно из верных решений для моего случая с сайта

Если 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
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.11.2015, 20:05
А зачем перемалывать кучу тригонометрии? А не проще визуально на графике таская всего 2 точки задать одной амплитуду а второй частоту? И взять формулу синусоиды где будут всего 2 параметра A0 частота, A1 амплитуда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2015, 20:05
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru