2016-09-28 72 views
1

我想構建一個程序來比較黎曼Zeta函數的部分和與內置的Matlab函數zeta(s)的總和。我希望函數能夠輸出最少數量的術語以達到0.1%的準確度。我認爲一個while循環將是最好的方法,但我的程序運行速度很慢;我還沒有從中得到結果。自定義zeta函數永不終止

function[n] = riemannzeta(s) 
error = 1; n = 1; an = 1; S = an; 
while error >= 0.1 
    an = 1/n^s; 
    S = S + an; 
    n = n + 1; 
    z = zeta(s); 
    error = ((S - z)/z)*100; 
end 
end 

我把它用:

riemannzeta(3) 

回答

1

的主要問題是,你的zeta函數的定義是錯誤的,因爲你初始化和的值設置爲1,然後在第一個步驟中添加1 。您需要初始化爲0或在1/2^s處啓動循環。您還需要獲取錯誤的絕對值。

這裏是啓動在二版:

function n = riemannzeta(s) 
error = 1; n = 1; an = 1; S = 1; 
z = zeta(s); 
while error >= 0.001 
    n = n + 1; 
    an = 1/n^s; 
    S = S + an; 
    error = abs(S - z)/z; 
end 
end 

如果我跑riemannzeta(3)我得到的20

+0

謝謝你的值!這解決了問題! – Olivia