使用MATLAB求解最小二乘法

时间:2016-09-24 00:50:13

标签: matlab plot data-fitting approximation polynomial-approximations

假设我们想要确定多项式方程的系数,该方程近似于0到1之间的正切函数,如下所示:

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

- 使用切线函数计算相应的矢量b。

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

现在,使用MATLAB,计算出的x在Ax中被包含。绘制结果,它非常接近切线函数。但是如果我使用n-1度的polyval函数(在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');

任何见解都将受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

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);