泰勒级数在 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。

现在您已经找出问题所在,您可以尝试在速度和可读性方面改进代码。

注意:向量和函数尽量不要重名,容易混淆。