Дискуссионный математический форумМатематический форум
Математический форум Math Help Planet

Обсуждение и решение задач по математике, физике, химии, экономике

Теоретический раздел
Часовой пояс: UTC + 3 часа [ Летнее время ]
новый онлайн-сервис
число, сумма и дата прописью

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Найти формулу синусоиды или косинусоиды по известным точкам
СообщениеДобавлено: 02 июн 2023, 16:10 
Не в сети
Начинающий
Зарегистрирован:
02 июн 2023, 14:56
Сообщений: 2
Cпасибо сказано: 2
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Первым делом курсую вас, грамотные люди, что я совершенно не математик выше школьного курса и в школьный курс углублён не шибко.
По такому делу описание проблемы, терзающей меня, и название самой темы построены своими словами, но думаю, суть смогу изложить.
------------------------------------------------------------------------------------
У меня имеются данные, которые можно изобразить на координатной плоскости(двумерной) в виде точек.
Если таких точек немного, допустим штуки три-четыре, то я могу взять тетрадный лист и от руки нарисовать
волны синусоиды так, чтобы изначально помеченные точки были включены в неё. И в принципе для всех этих точек можно найти функцию f(x), и не одну.
Данные я получаю динамически , и обычно таких точек примерно 10 - 15 штук.
Вот я и хочу автоматизировать этот процесс для своих вычислений(на javascript) но совершенно не понимаю, как вычислить формулу, функцию для поступившей мне порции точек так чтобы все эти точки стали составными точками одной синусоиды.
-----------------------------------------------------------------------------------
Друзья! Я не претендую на то чтобы мне разжевали и помогли проглотить, но мне очень нужно хотябы направление, в каком математическом познании мне углубиться, в поисках решения, потому что понятия не имею, вот и всё.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Найти формулу синусоиды или косинусоиды по известным точкам
СообщениеДобавлено: 02 июн 2023, 17:46 
Не в сети
Последняя инстанция
Зарегистрирован:
08 апр 2015, 12:21
Сообщений: 7567
Cпасибо сказано: 229
Спасибо получено:
2751 раз в 2539 сообщениях
Очков репутации: 473

Добавить очки репутацииУменьшить очки репутации
thevanka писал(а):
мне очень нужно хотябы направление, в каком математическом познании мне углубиться, в поисках решения

Сначала задаём функцию (формулу) аппроксимации в общем виде: [math]f(x)=a\cdot \sin(b\cdot x+c)[/math] с трёмя параметрами.
Дальше можно использовать метод наименьших квадратов для определения этих параметров аппроксимации по заданным точкам.
Замечу, что метод МНК, реализующий поиск параметров в данном случае, несколько отличается о стандартного варианта МНК, который сводится к решению простых систем линейных алгебраических уравнений, так как возникают уже нелинейные уравнения. Поэтому Вам придётся поискать какие-то готовые функции под javascript для решения систем нелинейных уравнений. Вообще предварительно это лучше проверить в Excel или других математических пакетах.

Вернуться к началу
 Профиль  
Cпасибо сказано 
За это сообщение пользователю michel "Спасибо" сказали:
thevanka
 Заголовок сообщения: Re: Найти формулу синусоиды или косинусоиды по известным точкам
СообщениеДобавлено: 02 июн 2023, 18:56 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
21 дек 2021, 01:39
Сообщений: 1753
Cпасибо сказано: 81
Спасибо получено:
329 раз в 315 сообщениях
Очков репутации: 70

Добавить очки репутацииУменьшить очки репутации
В общем случае задача имеет много различных решений. Но если точки расположены достаточно часто, можно сделать так:
общая формула синусоиды [math]y=A\sin{\left( \omega t+ \varphi \right) }+b,[/math] т.е. зависит от четырех параметров.

Амплитуду А можно в первом приближении оценить так: [math]A=\frac{\max{(y)}-\min{(y)}}{2}[/math];

параметр b в первом приближении [math]b=\frac{\max{(y)}+\min{(y)}}{2}[/math];

остальные параметры варьириются до минимизации невязки, после чего варьируются все 4 параметра.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Найти формулу синусоиды или косинусоиды по известным точкам
СообщениеДобавлено: 02 июн 2023, 19:12 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
21 дек 2021, 01:39
Сообщений: 1753
Cпасибо сказано: 81
Спасибо получено:
329 раз в 315 сообщениях
Очков репутации: 70

Добавить очки репутацииУменьшить очки репутации
Пока писал, michel меня опередил.
Вот моя программа для оптимизации параметров:
Public Sub Solution()
Dim Dis As Double, Bereiche As Long, Zellen As Long, i As Integer, j As Integer, Davor() As Double, Zelle As Range
Dim Z As Integer, S As Integer, Danach() As Double, W As Single, dW As Single, AltDis As Double, Wert() As Double
Dim k As Integer
Bereiche = Selection.Areas.Count
j = 0
For i = 1 To Bereiche - 1
For Each Zelle In Selection.Areas(i)
j = j + 1
ReDim Preserve Davor(j)
ReDim Preserve Danach(j)
ReDim Wert(j)
S = Zelle.Column
Z = Zelle.Row
Davor(j) = Cells(Z, S).Value 'Запомнить значения параметров до оптимизации
Call Optimizer(Z, S)
Danach(j) = Cells(Z, S).Value ' Параметры после первой оптимизации
Next Zelle
Next i

W = 0
For i = 1 To j: W = W + (Davor(i) - Danach(i)) ^ 2: Next i
W = Sqr(W): dW = W

Dis = ActiveCell.Value
Do
Do
AltDis = Dis
k = 0
For i = 1 To Bereiche - 1
For Each Zelle In Selection.Areas(i)
k = k + 1
S = Zelle.Column
Z = Zelle.Row
Wert(k) = Cells(Z, S).Value + dW * (Danach(k) - Davor(k)) / W
Cells(Z, S).Value = Wert(k)
Next Zelle
Next i
Dis = ActiveCell.Value
Loop While Dis < AltDis
dW = -dW / 3
Loop While Abs(dW) > 0.00001

End Sub
'___________________________________________________________________________________
Public Sub Optimizer(Z, S)
Dim Dis As Double, Wert As Double, dW As Double, AltDis As Double
Dis = ActiveCell.Value
Wert = Cells(Z, S).Value
dW = Wert / 10
Do
Do
AltDis = Dis
Wert = Wert + dW
Cells(Z, S).Value = Wert
Dis = ActiveCell.Value
Loop While Dis < AltDis
dW = -dW / 3
Loop While Abs(dW) > 0.000001
End Sub

Тут нужно добавить, что при вариировании параметров леко свалиться в локальный минимум невязки, не достигнув приемлемой аппроксимации.
Поэтому порядок действий, как в моем предыдущем посте.

Вернуться к началу
 Профиль  
Cпасибо сказано 
За это сообщение пользователю Exzellenz "Спасибо" сказали:
thevanka
 Заголовок сообщения: Re: Найти формулу синусоиды или косинусоиды по известным точкам
СообщениеДобавлено: 03 июн 2023, 15:17 
Не в сети
Начинающий
Зарегистрирован:
02 июн 2023, 14:56
Сообщений: 2
Cпасибо сказано: 2
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Exzellenz писал(а):
Пока писал, michel меня опередил...

Благодарен за доброе дело. Буду вникать и разбираться, с exelем и бэйсиком правда много лет уже не связывался всё позабывал. Но это нюансы.

Честно говоря, когда предо мною возникла данная задача, я как сторонник чистого кода без библиотек и примочек и к томуже, не знающий математики, видел только одно решение. Сделать всё с помощью тройного цикла, то есть прогонять синусоиду ,растягивая и сжимая по иксу да по игреку, плюс смещая,
это получается тысячи и сотни тысяч, или даже миллионы функций, формул, для каждой формулы при этом вычисляя, сколько точек оная "схватит". И так вылавливать из цикла формулы с наибольшим включением точек. Но при таком подходе, понимая, как затратно это будет по ресурсам, по времени, и вообще это не здравый подход. Я несколько месяцев не мог себя заставить заниматься этой хернёй.
Сейчас,оглядываясь в прошлое, досадно, что я пренебрегал изучением математики...

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Найти формулу синусоиды или косинусоиды по известным точкам
СообщениеДобавлено: 03 июн 2023, 16:52 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
21 дек 2021, 01:39
Сообщений: 1753
Cпасибо сказано: 81
Спасибо получено:
329 раз в 315 сообщениях
Очков репутации: 70

Добавить очки репутацииУменьшить очки репутации
thevanka писал(а):
Буду вникать и разбираться, с exelем и бэйсиком
Тогда вот вам в помощь принцип работы моей программы.

1) Создаете в Excel таблицу: пербый столбец - значения аргумента,
второй - "экспериментальные" значения функции,
третий - "теоретические" значения функции (вычисленные по формуле),
четвертый - квадраты разностей между "теорией" и "экспериментом",
Далее: в какой-либо ячейке вне таблицы- невязка (корень из среднего квадрата разности, т.е. среднеквадратичное отклонение теоретической кривой от экспериментальных точек);
Наконец, в каких-либо четырех ячейках вне таблицы значения четырех параметров синусоиды.

2) Выделяете ячейки со значениями параметров и с невязкой (невязку выделяете последней) и запускаете программу.

3) Программа работает так:

а) варьирует первый параметр при фуксированных значениях остальных параметров до тех пор, пока невязка не достигнет минимума; потом делает то же со вторым параметром, потом с третьим и т.д.

b) Новые значения параметров сравниваются со старыми и вычисляется направляющий вектот, после чего варьируются одновременно все параметры вдоль этого вектора до минимизации невязки.
На этом программа заканчивает работу.

Но это еще не настоящий минимум невязки. Для уточнения результата программу нужно запустить повторно несколько раз, контролируя при этом график и значение невязки. Вызов программы повторяется до тех пор, пока невязка практически не престанет снижаться, или пока вы не сочтете, что кривая достаточно хорошо легла на точки.

Вернуться к началу
 Профиль  
Cпасибо сказано 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему      Страница 1 из 1 [ Сообщений: 6 ]

 Похожие темы   Автор   Ответы   Просмотры   Последнее сообщение 
Написать формулу соответствующую графику синусоиды

в форуме Тригонометрия

Reddington

14

481

22 июл 2021, 14:23

Найти координаты вершины треугольника, по известным сторонам

в форуме Аналитическая геометрия и Векторная алгебра

Peter2x

11

3696

06 апр 2018, 16:33

Как изменяется фаза косинусоиды?

в форуме Начала анализа и Другие разделы школьной математики

Valery12

0

412

07 ноя 2018, 23:01

Найти формулу суммы ряда, формулу вычисления члена

в форуме Объявления участников Форума

mf_

0

206

10 июл 2020, 17:19

Найти функцию по точкам

в форуме Численные методы

extrasens

4

520

19 фев 2018, 17:37

Найти функцию по точкам

в форуме Математическая статистика и Эконометрика

malkris0427

8

932

17 авг 2015, 09:57

Восстановить функцию по известным значениям в диапазонах

в форуме Начала анализа и Другие разделы школьной математики

Vorrting

11

618

20 апр 2018, 21:34

На плоскости с точкам найти все окружности

в форуме Аналитическая геометрия и Векторная алгебра

rus_poison

7

410

14 фев 2022, 23:40

Поиск начальных моментов по известным центральным моментам

в форуме Теория вероятностей

synapce

3

209

26 май 2017, 15:20

МНК для синусоиды

в форуме Численные методы

Integer

5

1051

23 июн 2014, 11:02


Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Яндекс.Метрика

Copyright © 2010-2023 MathHelpPlanet.com. All rights reserved