2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 11:42 
Здравствуйте.
Пару дней назад я решил задачу аппроксимации данных выражением вида:
$F(x)=a_0\sin(x)+a_1$
Искомые параметры: $a_0$ и $a_1$
http://dxdy.ru/topic55472.html
Теперь я хочу усложнить задачу и искать решение для общего случая:
$F(x)=A\sin(\omega x+\varphi )+C$
Искомые параметры:
A и С - Амплитуда и Постоянная составляющая, как и в предыдущей задаче
$\omega$ и $\varphi$ - частота колебаний и начальная фаза
Так же использую МНК составляю нормальные уравнения.
Первое из 4х уравнений по параметру A выглядит следующим образом:
$\frac{\partial }{\partial A}\sum_{i=0}^{N}\left [ A\sin(\omega i+\varphi )+C-F_i \right ]^2 =$
$=2\sum_{i=0}^{N}\left [ A\sin(\omega i+\varphi)+C-F_i \right ]\sin( \omega i+ \varphi )$
в итоге:
$A\sum_{i=0}^{N}\sin(\omega i+\varphi )^2 + C\sum_{i=0}^{N}\sin(\omega i+\varphi )=\sum_{i=0}^{N}F_i\sin(\omega i+\varphi )$
Правильно ли я продифференцировал?
Как дальше выделить все коэффициенты при неизвестных по отдельности чтобы составить первую строку матрици А и найти неизвестные по формуле $X=A^{-1}B$?
Подскажите пожалуйста как быть в данной ситуации.

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 12:26 
Аватара пользователя
Думается мне, что те коэффициенты, которые Вы ищите есть коэффициенты Фурье. Попробуйте для начала $F(x)=a_0+a_1\cos(\omega x)+b_1\sin(\omega x)$. Когда будут найдены коэффициенты $a_1$ и $b_1$ можно будет по стандартной процедуре перейти к виду $A\sin(\omega x+\varphi)$.

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 12:52 
Поясните пожалуйста подробнее ход мыслей.
Я не понял вот какой момент. Допустим я буду искать решение в виде котором предложили вы, я столкнусь с той же проблемой где в выражении $a_1\cos($\omega$x)$ - $a_1$ и $\omega$ неизвестные, я несмогу разнести их по отдельным ячейкам матрици А (чтобы потом их найти применив $X=A^{-1}B$)
Или я что то не так понял?

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 13:03 
Аватара пользователя
Э нет, если так, то всё получится нелинейно и сложно.

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 13:31 
Аватара пользователя
Ну я то имел ввиду, что $\omega$ выбрана из каких-либо других соображений, например, исходя из того, что вы имеете один период данных или оценена каким-либо иным методом. А так, чую, не получится у вас СЛАУ и матриц. Если очень надо, думаю, можно попробовать минимизировать сумму квадратов отклонений численно в том же маткаде.

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 13:40 
Уважаемые форумчане есть ли у вас какие либо соображения, как можно аппроксимировать данные функцией $F(x)=A\sin(\omega x+\varphi )+C$, где A,C,w и фи неизвестные, по возможности не применяя никаких оптимизаторов типа генетического алгоритма, поисков и тд?

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 13:52 
Нелинейную задачу (МНК с итерациями и уточнением искомых параметров), хотите попробовать-повозиться?

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 13:57 
Аватара пользователя
logout2d в сообщении #542204 писал(а):
по возможности не применяя никаких оптимизаторов типа генетического алгоритма, поисков и тд?

А к чему такое стремление так сильно усложнить себе жизнь?

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 14:55 
Я вообще не стремлюсь усложнять себе жизнь :-)
Просто цель состоит в создании программы, у меня конечно есть генетический алгоритм и другие методы, но хотелось бы как то попроще решить задачу, чтобы меньше ресурсов компьютера использовать и сократить время расчета.

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 15:38 
Аватара пользователя
Со временем выполнения нынче проблем почти не бывает.
Один из вариантов: При каждом фиксированном значении частоты искомые коэффициенты есть коэффициенты Фурье. Теперь вы начинаете перебирать с некоторым шагом значения частоты, задав некий диапазон возможных значений, исходя, например, из значения периода дискретизации (или предоставив это сделать пользователю ориентируясь на природу аппроксимируемых данных). При каждом значении частоты находите коэффициенты Фурье, определяете сумму квадратов отклонений и находите частоту соответствующую минимуму. Потом можно повторить процедуру на более мелкой сетке для частоты. Это я к тому, что можно попытататься прийти к численной минимизации с одним параметром.

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 15:59 
Это подходящий вариант, спасибо за идею.
А как быть с начальной фазой колебания $\varphi$?

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение24.02.2012, 20:49 
Аватара пользователя
$$A\sin(\omega t+\varphi)=A\sin(\varphi)\cos(\omega t)+A\cos(\varphi)\sin(\omega t)=a_1\cos(\omega t)+b_1\sin(\omega t)$$ где $a_1=A\sin(\varphi)$, $b_1=A\cos(\varphi)$
И обратно: если найдены $a_1$ и $b_1$, то $A=\sqrt{a_1^2+b_1^2}$, а $\varphi$ выражается более сложным образом в зависимости от конкретных значений $a_1$ и $b_1$. В частном случае, когда они отличны от нуля $\varphi=\frac {\pi} {2}(1-sign(b_1))+\arctg(\frac {a_1}{b_1})$. (Рекомендую это проверить)

Аппроксимирующую функцию при заданной частоте $\omega$ представляем в виде: $$F_a(x)=a_0+a_1\cos(\omega x)+b_1\sin(\omega x).$$ Вводим меру качества аппроксимации $$\varepsilon=\sum\limits_{i=0}^{N-1}(a_0+a_1\cos(\omega x_i)+b_1\sin(\omega x_i)-F_i)^2.$$ Ищем коэффициенты из условий $$\frac {\partial\varepsilon}{\partial a_0}=0$$ $$\frac {\partial\varepsilon}{\partial a_1}=0$$ $$\frac {\partial\varepsilon}{\partial b_1}=0$$ Получится СЛАУ.

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение25.02.2012, 13:15 
На днях попробую, спасибо за ясное объяснение.

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение26.02.2012, 17:36 
profrotter, спасибо алгоритм работает, но у меня еще один вопрос.
Если говорить о комплексных числах, я впервые вижу такую формулу нахождения аргумента:
$\varphi=\frac {\pi} {2}(1-sign(b_1))+\arctg(\frac {a_1}{b_1})$
Во всех источниках я встречал просто арктангенс:
$\varphi=\arctg(\frac {a_1}{b_1})$
откуда взялось $\frac {\pi} {2}(1-sign(b_1))$ ? Где я могу про это почитать?

 
 
 
 Re: Помогите пожалуйста составить уравнения для аппроксимации
Сообщение26.02.2012, 22:42 
Аватара пользователя
Изображение

Согласен. В некоторых учебниках неаккуратно пишут, что аргумент комплексного числа это арктангенс отношения мнимой части к действительной. В более аккуратных учебниках говорят, что аргумент - это угол наклона вектора, изображающего комплексное число, к действительной оси и определяется аргумент $\varphi$ комплексного числа $z=a+ib$ системой уравнений $$\cos(\varphi)=\frac a {|z|}$$ $$\sin(\varphi)=\frac b {|z|}$$
Решение этой системы не всегда этот самый злополучный арктангенс. Тут надо рассмотреть несколько случаев.
1) $a>0,b>0$, то есть $a=|a|,b=|b|$. Тогда, как видно из рисунка, аргумент $$\varphi_1=\arctg\left(\frac b a\right)=\arctg\left(\frac {|b|} {|a|}\right).$$
2) $a<0,b<0$, то есть $a=-|a|,b=-|b|$. Попробуем при этом аргумент посчитать как просто арктангенс: $$\varphi_2=\arctg\left(\frac b a\right)=\arctg\left(\frac {|b|} {|a|}\right)=\varphi_1.$$ Уже из рисунка видно, что полученный результат неверный. Да и без рисунка неверный, ибо мы получили, что два противоположных комплексных числа равны друг другу. В то же время из рисунка видно, что $$\varphi_2=\pi+\varphi_1=\pi+\arctg\left(\frac b a\right).$$ Непосредственной подстановкой можем убедиться, что аргументы $\varphi_1$ и $\varphi_2$ соответствуют двум противоположным числам.
3) $a>0,b<0$, то есть $a=|a|,b=-|b|$. Аргумент $$\varphi_3=-\varphi_1=-\arctg\left(\frac {|b|}{|a|}\right)=\arctg\left(-\frac {|b|}{|a|}\right)=\arctg\left(\frac b a\right).$$
4) $a<0,b>0$, то есть $a=-|a|,b=|b|$. Аргумент $$\varphi_4=\pi+\varphi_3=\pi-\varphi_1=\pi-\arctg\left(\frac {|b|}{|a|}\right)=\pi+\arctg\left(-\frac {|b|}{|a|}\right)=\pi+\arctg\left(\frac b a\right).$$
Таким образом $$
\arg(z)=\left\{ \begin{array}{l}
\arctg\left(\frac b a\right), a>0\\
\pi +\arctg\left(\frac b a\right), a<0
\end{array} \right=\frac {\pi}{2}(1-sign(a))+\arctg\left(\frac b a\right)
$$ Отдельно надо посмотреть случаи когда $a$ или $b$ равны нулю.

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

Думаю участникам темы (в том числе и мне) будет интересно посмотреть на результаты аппроксимации, которые у вас получились. Показали бы картинки.

 
 
 [ Сообщений: 18 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group