使用 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);
假设我们要确定一个多项式方程的系数,它逼近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);