嗨,我对以下函数的结果有一个问题,输入是x的行向量,我们使用∑_(n=0)^(n=50)▒(x^n)/n!输出计算出来的exp值(即从n=0到n=50的总和使用x^n)/n!),循环将在n达到50或(x^n)/n! <0.0 1时终止。
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;
}第二个版本是在检查abs(a) >=0.01之前执行结果=结果+ a;
发布于 2015-04-13 01:55:26
这个问题似乎很简单。级数在增加(即每增加一次就得到更大的总和),并且从下面接近极限值。这意味着,每增加一个新的项之和,都越来越接近最后的值=极限。这使得每一个加法都能更好地逼近结果。同样明显的是,第一种方法,而不是添加术语,其结果会比第二种方法稍微差一些,后者确实增加了这个术语。
显然,通过增加更多的项,结果的准确性得到了提高。唯一的成本是额外的计算时间。您的终止条件( x ^n/阶乘(N)< 0.01)是否为x的所有值提供了足够好的值?我原以为你会使用一个公式,更像( x ^n/阶乘(N)< g(x)),其中g(x)是一个涉及x的公式。我建议您回到级数的文本中,确定是否需要更好的g(x)来满足精度要求。
https://stackoverflow.com/questions/29596557
复制相似问题