使用 MATLAB 求解最小二乘法

Solving Least square using MATLAB

假设我们要确定一个多项式方程的系数,它逼近0到1之间的正切函数,如下:

-A是m×n范德蒙矩阵。使用 0 到 11 之间的 m 值填充条目(作为输入给出)。

-对应的向量b是用正切函数计算出来的

-x 是通过在 MATLAB 中键入 x= A\b 来计算的。

现在,使用 MATLAB,将计算出的 x 代入 Ax。结果被绘制出来,它非常接近正切函数。但是,如果我使用 n−1 度的多元函数(在 MATLAB 中)计算 b,则生成的图与原始 b 有很大不同。我无法理解为什么这两种方法的结果会有如此显着的差异。

代码如下:

clear all;
format long;
m = 60;
n = 11;
t = linspace(0,1,m);
A= fliplr(vander(t));
A=A(:,1:n);
b=tan(t');
x= A\b;
y=polyval(x, t);
plot(t,y,'r')
y2= A*x
hold on;
plot(t,y2,'g.');
hold on;
plot(t,tan(t),'--b');

如有任何见解,我们将不胜感激。谢谢。

A= fliplr(vander(t)) 之后 A 矩阵等于

1 t(1) t(1)^2 ...
1 t(2) t(2)^2 ...
...
1 t(m) t(m)^2 ...

这是不正确的,因为 polyval 接受降幂系数。您不需要翻转 A:

的列
A= vander(t);
A= A(:,end-n+1:end);