泰勒级数在 Matlab 中使用 while 循环
Taylor Series using a while loop in Matlab
我正在尝试使用麦克劳林级数来近似 cos(x)。 x 的值和误差边界需要由用户输入,用户需要查看估计值和达到该答案所需的迭代次数。我正在尝试使用 x=2 和 error<=.001 来演示它。使用这些参数,我的代码总是 returns 8 次迭代,结果为 -.0476。我做错了什么?
function [CosApprox, Numberofterms] = cos_approx(x, E)
k(1)=1;
T=1;
cos_approx(1)=1
while T>=E
k=k+1;
cos_approx(k)= cos_approx(k-1) + ((-1)^(k-1))*(x^(2*(k-1)))/(2*(factorial(k-1)));
T=abs(cos_approx(k) - cos(x));
end
CosApprox=cos_approx(k)
Numberofterms=k
我是 matlab 的新手,所以如果我遗漏了一些明显的东西,我深表歉意。
您的代码没有 return 8 次迭代,它在我的计算机上 returns 513 次迭代并且它终止,因为我们正在划分一个非常大的数字,超过 2^(512)分子和另一个非常大的数字 512!在分母中计算为 Inf。
您使用了错误的数学公式。
2*(factorial(k-1))
分母应该是
factorial(2*(k-1))
只要改变它就会得到 -0.4159 的答案,而 cos(2) 近似为 -0.4161。
现在您已经找出问题所在,您可以尝试在速度和可读性方面改进代码。
注意:向量和函数尽量不要重名,容易混淆。
我正在尝试使用麦克劳林级数来近似 cos(x)。 x 的值和误差边界需要由用户输入,用户需要查看估计值和达到该答案所需的迭代次数。我正在尝试使用 x=2 和 error<=.001 来演示它。使用这些参数,我的代码总是 returns 8 次迭代,结果为 -.0476。我做错了什么?
function [CosApprox, Numberofterms] = cos_approx(x, E)
k(1)=1;
T=1;
cos_approx(1)=1
while T>=E
k=k+1;
cos_approx(k)= cos_approx(k-1) + ((-1)^(k-1))*(x^(2*(k-1)))/(2*(factorial(k-1)));
T=abs(cos_approx(k) - cos(x));
end
CosApprox=cos_approx(k)
Numberofterms=k
我是 matlab 的新手,所以如果我遗漏了一些明显的东西,我深表歉意。
您的代码没有 return 8 次迭代,它在我的计算机上 returns 513 次迭代并且它终止,因为我们正在划分一个非常大的数字,超过 2^(512)分子和另一个非常大的数字 512!在分母中计算为 Inf。
您使用了错误的数学公式。
2*(factorial(k-1))
分母应该是
factorial(2*(k-1))
只要改变它就会得到 -0.4159 的答案,而 cos(2) 近似为 -0.4161。
现在您已经找出问题所在,您可以尝试在速度和可读性方面改进代码。
注意:向量和函数尽量不要重名,容易混淆。