如何计算系列的总和,直到总和在Matlab中停止变化

时间:2015-12-22 04:46:06

标签: matlab sum series

我想在Matlab中计算以下系列的总和:

enter image description here

我正在使用这个MATLAB函数:

MessageObj

问题是我希望在总和停止变化时停止添加术语。例如,何时停止的条件可能是步骤>> syms i; >> S = symsum((0.5^i*sin(i))/i^2, i, 0, Inf) 步骤的总和与步骤i之和之间的差异不大于某些用户定义的容差i+1。如何在上面的和计算中包含这个条件?

1 个答案:

答案 0 :(得分:4)

我个人不会使用符号数学工具箱,而是更喜欢使用简单的循环。具体来说,我会以数字方式执行此操作,并逐步向系列添加术语,直到您所说的条件满足为止。顺便说一句,您的总和从i=0开始,但是当i=0时,总和未定义(您有一个0/0未定义的除法结果)。我假设您打算从i=1开始。

想到这样的事情:

s = 0;
s_before = realmax;
tol = 1e-8;
ii = 0;

while (abs(s_before - s) >= tol)
    ii = ii + 1;
    s_before = s;
    s = s + ((0.5^ii)*sin(ii))/(ii^2);        
end 

前四行代码用于设置。 s包含最终总和,s_before包含上一次迭代的总和。 tol定义了一个容差(您的示例为1e-8),用于衡量连续迭代之间的差异。 ii是一个计数器变量,它是总和公式中的i变量。请注意,我将其初始化为0,但在第一次迭代时,这将设置为1.我还选择使用ii而不是i,因为i是为复杂变量保留的代替。

接下来,我们使用while循环,只要连续迭代之间的差异大于容差,我们就会保持循环。我们保存前一次迭代的总和,然后计算系列中的下一个项并将其累计在总和中。我们还确保增加计数器变量。当连续迭代之间的差异小于一定量时,这将退出。

一旦我运行此代码,我得到了迭代总数和总和:

>> format long g;
>> s

s =

         0.475415855580831

>> ii

ii =

    18

在开头做format long g;将允许我们显示更多的精度数字。默认情况下,MATLAB最多只显示4个小数位。结果告诉我们,在总结中需要18个术语才能“#34;停止改变"。