0

假設我們要確定是近似0之間的正切函數爲1的多項式方程的係數,如下:求解最小二乘使用MATLAB

-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

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