如何计算系列的总和,直到总和在 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".
我想在 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".