给出数组:
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
,则系数可以确定为:
(Chapra,《 Matlab的应用数值方法》,第四版)
所以我编码:
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
但是,根据mldvide help,我们可以使用MATLAB mldivide
运算符,
如果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
这些结果与之前获得的结果不同。我在这里想念什么?为什么这些结果不一样?
我怀疑我不能使用封闭形式的表达式,但是为什么呢?