1

リーマン ゼータ関数の部分和を組み込みの Matlab 関数 zeta(s) と比較するプログラムを作成しようとしています。0.1 パーセントの精度を達成するために、関数が最小数の項を出力するようにします。while ループが最善の方法だと思っていましたが、プログラムの実行速度が遅すぎます。私はまだそれから結果を得ていません。

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)
4

1 に答える 1

1

主な問題は、合計の値を 1 に初期化し、最初のステップで 1 を追加するため、ゼータ関数の定義が間違っていることです。0 で初期化するか、 でループを開始する必要があります1/2^s。また、エラーの絶対値を取得する必要があります。

2 で開始するバージョンは次のとおりです。

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 になります。

于 2016-09-28T08:30:55.963 に答える