2015-12-22 75 views
3

停止改變我想計算如下一系列Matlab的總​​和:如何計算系列的總和,直到總和在Matlab

enter image description here

我用這MATLAB功能:

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

問題是,當停止更改時,我想停止添加條款。例如,當停止可能處於在步驟i+1步驟i步驟和總和之和之間的差條件是不超過某些用戶定義的公差10^-8大。如何在上面的總和計算中包含這個條件?

+1

注意,此函數'F(X)= 0.5^X/X^2 *的sin(x)'不是單調的。例如'f(14)> f(13)'和'f(20)> f(19)'。一種解決方案是忽略正弦項並考慮用於檢查容差的'g(x)= 0.5^x/x^2'。 –

回答

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,而不是作爲ii預留了複雜的變量,而不是。

接下來,我們使用一個while循環,我們將繼續只要連續迭代之間的差值大於公差循環。我們保存前一次迭代的總和,然後計算序列中的下一項,並將其累加在總和中。我們也確保增加計數器變量。當連續迭代之間的差異小於一定數量時,這將退出。

我得到這個的迭代的總數和金額,一旦我運行此代碼:

>> format long g; 
>> s 

s = 

     0.475415855580831 

>> ii 

ii = 

    18 

在開始做format long g;將使我們能夠表現出更多的精確數字。默認情況下,MATLAB只顯示最多4位小數位。結果告訴我們,這需要總和中的18個術語來「停止改變」。

+0

雖然這回答了確切的OP問題,但它留下了一些重要的規則。首先,當然,你應該證明這個系列收斂:-)。接下來,僅僅因爲下一個詞語或下一個詞語的差異值低於某個閾值,並不意味着您在答案中達到了任何特定的準確度。慢慢收斂的系列是菜鳥程序員的禍根!有關如何估計(上/下限)總和的「尾部」的和的定理。 –

+1

@CarlWitthoft我對OP的疑問給了這個系列收斂的好處,它分享了收斂系列具有的所有屬性。當我有空時,我會更新我的答案,但看到OP如何接受我的答案,這似乎使他們有足夠的前進。 – rayryeng

+0

嗯,他們正在移動,但不一定前進,即朝着正確的答案:-) –