соответствие синуса в выражениях matlab против замкнутой формы (линейные наименьшие квадраты) - PullRequest
0 голосов
/ 16 мая 2019

С учетом массивов:

t = 0:0.25:2;
y = [3.0800    3.4900    3.1500    2.2300    1.2300    0.6900    0.8900    1.7300    2.7600];

Массив y был создан на основе выражения 2+sin(3*t)+cos(3*t), добавил немного шума и урезан до 2 десятичных знаков.

Мы хотим получить параметры модели

y = A0 + A1*cos(w0*t) + B1*sin(w0*t)

Это, конечно, анализ Фурье, но мы хотим изучить его в смысле наименьших квадратов.

Если у нас есть N наблюдений, равномерно распределенных с интервалами dt и общей длиной записи T=(N-1)*dt, коэффициенты могут быть определены как:

enter image description here

(Чапра, Прикладные численные методы с Matlab, 4-е издание)

Так что я код:

N = length(t)
A0 = sum(y)/N
A1 = 2*sum(y.*cos(3*t))/N
B1 = 2*sum(y.*sin(3*t))/N

И получите результаты

N =
     9
A0 =
   2.138888888888889
A1 =
   1.337796008190744
B1 =
   0.868485945765937

Однако мы можем использовать оператор MATLAB mldivide при условии, что, согласно mldvide help :

Если A - прямоугольная матрица m-на-n с m ~ = n, а B - матрица с m строками, то A \ B возвращает решение наименьших квадратов в система уравнений A x = B. *

Я могу кодировать, тогда:

X = [ones(length(t),1) (cos(w0*t)).' (sin(w0*t)).']
a = X\(y.')

Что дает мне результаты:

a =
   2.079400007449057
   0.999055551110904
   1.000625226465150

Эти результаты не совпадают с полученными ранее. Что мне здесь не хватает? Почему эти результаты не совпадают?

Я подозреваю, что не могу использовать выражения закрытой формы, но почему именно?

...