1

私はMatlabで関数のテイラー総和をコーディングしようとしています.McLaurin Making を実際に評価しx=0ます.

ここに画像の説明を入力

これは私がこれまでに試したコードです:

>> a = -100;
b = 100;
n = 20;
vectorx = linspace(a,b,50);
vectory = [];
sumterms = [];
syms x y a;
y = sin(a);
for i = 1:n
t = (diff(y,i-1) / factorial(i-1)) * (x-0)^(i-1);
sumterms = [sumterms;t];
end;
sumterms
for j = 1:length(vectorx)
x_i = vectorx(j);
aux = 0;
for k = 1:length(sumterms)
sumterm = sumterms(k);
aux = aux + subs(sumterm, [a,x], [0,x_i]);
end
vectory = [vectory;aux];
end
length(vectory)
length(vectorx)
plot (vectorx, vectory)

しかし、正しい結果が得られません。各文をステップオーバーしましたが、何が問題なのか実際にはわかりません。

これは、sin(x) のプロット結果です。

ここに画像の説明を入力

そして、これは exponential(x) のプロットです

ここに画像の説明を入力

それぞれのSumterms結果が画像キャプチャに表示され、問題ないように見えますが、評価にエラーがあると思います。

4

1 に答える 1

1

コードは正しく機能し、正しいテイラー多項式をプロットします。あなたの間違いは、区間 [-100,100] で正弦関数を近似する 20 次テイラー多項式を期待していることです。これは楽観的すぎる。[-5,5] の適切な近似値が得られ、それだけです。問題がすでに発生している a=-9、b=9 を使用したコードの出力を次に示します。

sine_approx

確かに、x^n/n! は約 (e*x/n)^n で、スターリングの式 の大まかなバージョンを使用します。したがって、|x| が必要です。< n/e は壊滅的に大きな誤差項を回避し、さらに短い間隔 ( |x| < n/3 など) を使用すると適切な近似が得られます。n=20 の場合、n/3 は 6.66...

于 2016-02-22T02:36:13.250 に答える