【问题标题】:Taylor Series using a while loop in Matlab在 Matlab 中使用 while 循环的泰勒级数
【发布时间】:2018-09-09 23:53:28
【问题描述】:

我正在尝试使用 Maclaurin 级数来近似 cos(x)。 x 的值和误差范围需要是用户输入,并且用户需要查看估计值和达到该答案所需的迭代次数。我正在尝试使用 x=2 和 error

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 新手,所以如果我遗漏了一些明显的东西,我深表歉意。

【问题讨论】:

  • 拜托,不要再调用阶乘了。
  • 您的代码不完整。 CosApprox=cos_approx(k) 的行是什么? cos_approx()是在外面还是里面?你在这里使用递归吗?你介绍中的数学不清楚。 “示范”是什么意思?比如,你想证明你的假设有多强烈?您是否根据 x 绘制误差函数?在 SO 中,我们只处理编程问题。在提出问题之前,您必须确定您的数学并清楚地了解您需要实施的内容。然后,遵循典型的how to ask 准则。
  • 另外,当您提出问题时,请在代码的每个部分中用您打算实现的内容注释您的代码。

标签: matlab while-loop taylor-series


【解决方案1】:

您的代码没有返回 8 次迭代,它在我的计算机上返回了 513 次迭代并且它终止了,因为我们正在划分一个非常大的数字,分子中超过 2^(512) 和另一个非常大的数字 512!在分母中被评估为 Inf。

您使用了错误的数学公式。

2*(factorial(k-1))

在分母中应该是

factorial(2*(k-1))

只要改变它就会得到 -0.4159 的答案,而 cos(2) 近似于 -0.4161。

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

备注:尽量不要给向量和函数取同名,这样容易混淆。

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2021-08-12
    • 2021-08-13
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多