Matlab,寻求一种简单的方法来控制函数的输出

时间:2014-02-20 19:25:33

标签: matlab

我已经在这里问了一个类似的问题,我会尝试这个更精细的考虑,最让我困惑的是Matlab仍然是如何处理/控制输出,如绘图/列表。

我有以下功能

function e = calcEulerSum2(n)


for i=1:n                               % step size still one, although left blank
   e = 1;
   e = e + sum(1./factorial(1:n));      % computes a vector of length n and takes 
end                                     % the factorial of its entries, then piecewise division
end     

使用泰勒求和方法近似e。我现在被要求使用

计算绝对误差
abserror(n):=abs(calcEulerSum2(n)-exp(1))

表示n= 10^0,10^1,...,10^16的值。

我的想法是让上面的函数对矢量输入敏感(如果你这样称呼它,我也在这里读过矢量化)。我认为这是我能做的最好的事情,因为我显然想要为n的几个值评估上述函数,然后可以将结果绘制在图表中以查看结果。

但是,我认为我对MATLAB的理解目前还不太成熟,无法找到解决该问题的简单方法。

附加:在本网站的帮助下,我已经设法解决了类似的问题,使用e的递归定义来获取每次成功迭代的矢量输出:

function e = calcEulerSum3(n)

for i = n                       % here the idea is to let n be a continuous vector

    e(1)=1;                     % base case
    e(i+1)=e(i)+1/factorial(i); % recursive definition to approx e

end

此函数现在理解向量输入,但仅当向量是我在整数行上称为连续的向量时,例如n'=[ 1 2 3 4 5 ]等等,以通过向量工作进行递归迭代。但是这一次,我上面的矢量n会破坏这个概念。

问题(S)

  • 有没有简单的方法来处理上面的输出abserror(n) ?,因为我觉得我通过尝试向量化我的功能而感到非常高兴

更新:正如@vish所建议的那样,以下功能为我的目的做得更好:

function e = calcEulerSum2(n) %Updated 


for i=1:n                            % step size still one, although left blank
   e = 1;
   e = e + cumsum(1./factorial(1:n));      % computes a vector of length n and takes 
end                                     % the factorial of its entries, then piecewise division
end     

n=3此程序的输出将是

  
    

calcEulerSum2(3)

  

ans =

2.0000    2.5000    2.6667

这很棒,而且确实是我要找的,但是让我说我​​想现在为n的几个值绘制绝对误差,为了参数我会选择较小的值(因为我明白10 ^ 16 !输入真的很直率),但仍然很多。因此,如果我决定打印出以下n

值的绝对误差abserror(n)
n = [1 4 9 11 17 18 19 22 27 29 31 33 ]

我该怎么做?

1 个答案:

答案 0 :(得分:2)

不确定您是在计算您认为自己在计算的内容。

完全不需要for循环,因为你在每次迭代时都会覆盖e,而你只返回最后一次。

factorial(1:3) == [1,2,6]
然后你总结倒数。

循环析因(1:1)的第一次迭代无处可去。

尝试

cumsum(1./factorial(1:7))

我认为这就是你想要的

编辑:,阶乘(10 ^ 5)太大而无意义,我认为从1到n = 16会给你足够好的结果。 (不是10 ^ 16)


第二次编辑

运行此

N=0:16;
res = exp(1) - cumsum(1./factorial(N))

看看会发生什么

您也可以在对数刻度上绘制它。

semilogy(res)