0

次のように、正接関数を 0 から 1 の間で近似する多項式の係数を決定するとします。

-A は m×n のヴァンデルモンド行列です。エントリは、0 ~ 11 の m 値 (入力として指定) を使用して設定されます。

-対応するベクトル b は、正接関数を使用して計算されます。

-x は、MATLAB で x= A\b と入力して計算されます。

ここで、MATLAB を使用して、計算された x が Ax に代入されます。結果がプロットされ、正接関数に非常に近くなっています。しかし、(MATLAB で) n-1 次の polyval 関数を使用して b を計算すると、結果のプロットは元の b とは大きく異なります。これら 2 つの方法の結果にこれほど大きな違いがある理由がわかりません。

コードは次のとおりです。

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

任意の洞察をいただければ幸いです。ありがとうございました。

4

1 に答える 1

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);
于 2016-09-24T04:58:13.667 に答える