假设我们想要确定多项式方程的系数,该方程近似于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');
任何见解都将受到赞赏。谢谢。
答案 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);