寻找exp

时间:2015-04-13 01:15:53

标签: algorithm matlab

您好我对以下功能的结果有疑问 输入是x的行向量,我们使用∑_(n=0)^(n=50)▒(x^n)/n!输出计算的exp值(即使用x^n)/n!从n = 0到n = 50求和) 当n达到50或(x^n)/n!时,循环将终止。 0.01

function [summ] = ExpFunction(x)

//有一个循环来迭代。

有两个版本 1)我们写一个if来查看值(x^n)/n!是否> = 0.01。如果是,则将其添加到汇总。 2)首先将其添加到汇总中,然后检查(x^n)/n!是否> = 0.01。如果没有,则终止程序。

我的问题是,为什么这两个版本产生不同的结果,第二个版本似乎产生更好的结果(即更接近exp(x))

谢谢

版本1:

function [result] = Exp(x)
result = 0;
a = 0;
n = 0;
while(n <= 50)
{
    a = (x.^n)/factorial(n)  %% The factorial function is self written have have been checked.
    if(abs(a) >= 0.01)
        result = result + a;
    else
        break;
    n = n + 1;
}

第二个版本是做结果=结果+ a;在检查abs(a)&gt; = 0.01

之前

1 个答案:

答案 0 :(得分:0)

问题似乎很简单。该系列正在增加(即每次加法产生更大的总和),并且从下面接近极限值。这意味着添加到总和中的每个新术语都越来越接近最终值=限制。这导致每次添加都是对结果的更好近似。 同样清楚的是,第一种方法,不添加该术语,将导致比第二种方法稍微不准确的结果,后者确实增加了该术语。

很明显,通过添加更多术语可以提高结果的准确性。唯一的成本是额外的计算时间。您的终止标准(x ^ n / factorial(n)<0.01)是否为x的所有值提供了足够好的值?我希望你使用更像(x ^ n / factorial(n)&lt; g(x))的公式,其中g(x)是涉及x的公式。我建议你回到系列文本,确定你的准确度要求是否需要更好的g(x)。