我想在Matlab中计算以下系列的总和:
我正在使用这个MATLAB函数:
MessageObj
问题是我希望在总和停止变化时停止添加术语。例如,何时停止的条件可能是步骤>> syms i;
>> S = symsum((0.5^i*sin(i))/i^2, i, 0, Inf)
步骤的总和与步骤i
之和之间的差异不大于某些用户定义的容差i+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;停止改变"。