我正在尝试在Matlab中为一个函数编码Taylor求和,我实际上评估了McLaurin制作x=0
,在此代码后用此代码命名为a:
这是我到目前为止尝试过的代码:
>> 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)的情节结果:
这是指数(x)
的图
每个Sumterms结果出现在图像捕获中,它们似乎没问题,但我认为错误在评估中。
答案 0 :(得分:1)
您的代码正常工作并绘制正确的泰勒多项式。你的错误是你期望20度泰勒多项式逼近区间[-100,100]的正弦函数。这太乐观了。它在[-5,5]上给出了一个不错的近似值。以下是代码的输出,其中a = -9,b = 9,其中已出现问题:
确实,x ^ n / n!约为(e * x / n)^ n,使用Stirling's formula的粗略版本。所以你需要| x | < n / e以避免灾难性大的误差项,并且甚至更小的间隔(如| x |< n / 3)具有良好的近似值。 n = 20时,n / 3为6.66 ......