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

How to compute sum of series until the sum stops changing in Matlab

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

我正在使用这个 MATLAB 函数:

>> syms i;
>> S = symsum((0.5^i*sin(i))/i^2, i, 0, Inf)

问题是我想在总和停止变化时停止添加项。例如,何时停止的条件可能是步骤 i 的总和与步骤 i+1 的总和之间的差异不大于某个用户定义的公差 10^-8。如何将此条件包含在上述总和计算中?

我个人不会使用 Symbolic Math Toolbox,而是更喜欢使用简单的循环。具体来说,我会以数字方式进行此操作,并逐渐向系列中添加术语,直到满足您所说的条件为止。顺便说一句,你的总和从 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 项求和才能达到 "stop changing".