しろねこらぼ(旧)

しろねこの気まぐれ技術日記

ゼータ関数の特殊値をMATLABを用いて計算する

ゼータ関数
\begin{align}
\zeta(s) = \sum_{n=1}^{\infty} \dfrac{1}{n^s} =\dfrac{1}{1^s}+\dfrac{1}{2^s}+\dfrac{1}{3^s}+\dfrac{1}{4^s} + \cdots
\end{align}
sに整数を代入して得られる値をゼータ関数の特殊値あるいはゼータ定数と呼ぶらしい。
今回は以下のs=1,2,3ゼータ関数の特殊値を計算する。
これらの値はすでに求められており

\begin{align}
\zeta(1) = \sum_{n=1}^{\infty} \dfrac{1}{n} = 1+\dfrac{1}{2}+\dfrac{1}{3}+\dfrac{1}{4} + \cdots= \infty
\end{align}

\begin{align}
\zeta(2) = \sum_{n=1}^{\infty} \dfrac{1}{n^2} =\dfrac{1}{1^2}+\dfrac{1}{2^2}+\dfrac{1}{3^2}+\dfrac{1}{4^2} + \cdots= \dfrac{\pi^2}{6}
\end{align}

\begin{align}
\zeta(3) = \sum_{n=1}^{\infty} \dfrac{1}{n^3} =\dfrac{1}{1^3}+\dfrac{1}{2^3}+\dfrac{1}{3^3}+\dfrac{1}{4^3} + \cdots= 1.20205 \cdots
\end{align}

ゼータ関数の特殊値はn=Nまでの部分和を順に求める。
例えば調和級数において部分和を求めれば

  • N=1までの部分和

\begin{align}
\zeta(1) = 1
\end{align}

  • N=2までの部分和

\begin{align}
\zeta(1) = 1 + \dfrac{1}{2}
\end{align}

  • N=3までの部分和

\begin{align}
\zeta(1) = 1 + \dfrac{1}{2} + \dfrac{1}{3}
\end{align}

これをMATLABで行うためのコードは

n=50;

y1=func(n,1);
y2=func(n,2);
y3=func(n,3);

fig = figure('name', 'ゼータ関数の特殊値');

tunefig('ppt', fig);         % 一枚だけ編集

plot([1:1:n],y1,'k-');
hold on
plot([1:1:n],y2,'k--');
hold on
plot([1:1:n],y3,'k-.');
grid on
legend('s=1(調和級数)','s=2(バーゼル問題)','s=3(アぺリーの定数)');
xlabel('$n$','Interpreter', 'latex');
ylabel('$\zeta(s)$','Interpreter', 'latex');
ylim([0 7])
function y=func(M,s)
    temp=0;
    temp2=zeros(1,M);
    
    for i=1:1:M
        temp= temp + 1 ./ i^s;
        temp2(1,i)=temp;
    end
    y=temp2;
end

※グラフのデザインは記事の最後に挙げるqiita記事を参考にした。

結果は

f:id:sironekoblog:20201005112951j:plain
ゼータ関数の特殊値

数値計算であるため多少誤差があるが、きちんと理論値に収束してそうだ。


参考文献
https://qiita.com/larking95/items/7ed862f743a3e661e6da