停止改變我想計算如下一系列Matlab的總和:如何計算系列的總和,直到總和在Matlab
我用這MATLAB功能:
>> syms i;
>> S = symsum((0.5^i*sin(i))/i^2, i, 0, Inf)
問題是,當停止更改時,我想停止添加條款。例如,當停止可能處於在步驟i+1
步驟i
步驟和總和之和之間的差條件是不超過某些用戶定義的公差10^-8
大。如何在上面的總和計算中包含這個條件?
停止改變我想計算如下一系列Matlab的總和:如何計算系列的總和,直到總和在Matlab
我用這MATLAB功能:
>> syms i;
>> S = symsum((0.5^i*sin(i))/i^2, i, 0, Inf)
問題是,當停止更改時,我想停止添加條款。例如,當停止可能處於在步驟i+1
步驟i
步驟和總和之和之間的差條件是不超過某些用戶定義的公差10^-8
大。如何在上面的總和計算中包含這個條件?
我個人不使用符號數學工具箱和喜歡使用一個簡單的循環來代替。具體來說,我會以數字方式做這些,並逐漸增加條款,直到您所說的條件得到滿足。順便說一句,你的總和開始於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個術語來「停止改變」。
雖然這回答了確切的OP問題,但它留下了一些重要的規則。首先,當然,你應該證明這個系列收斂:-)。接下來,僅僅因爲下一個詞語或下一個詞語的差異值低於某個閾值,並不意味着您在答案中達到了任何特定的準確度。慢慢收斂的系列是菜鳥程序員的禍根!有關如何估計(上/下限)總和的「尾部」的和的定理。 –
@CarlWitthoft我對OP的疑問給了這個系列收斂的好處,它分享了收斂系列具有的所有屬性。當我有空時,我會更新我的答案,但看到OP如何接受我的答案,這似乎使他們有足夠的前進。 – rayryeng
嗯,他們正在移動,但不一定前進,即朝着正確的答案:-) –
注意,此函數'F(X)= 0.5^X/X^2 *的sin(x)'不是單調的。例如'f(14)> f(13)'和'f(20)> f(19)'。一種解決方案是忽略正弦項並考慮用於檢查容差的'g(x)= 0.5^x/x^2'。 –