Juliaで級数を計算し、グラフを描く方法

どうも、木村(@kimu3_slime)です。

今回は、Juliaで級数を計算し、グラフを描く方法を紹介します。

この記事で登場するコード、実行結果(GitHub)

 



Plotsのインストール

グラフ描写用のパッケージ、Plotsをインストールしておきましょう。既にインストールしてある場合、飛ばしてください。

 

有限和・無限級数

準備として、Plotsを使えるようにしておきましょう。

 

自然数の4乗の和を20項まで計算してみます。

\[ \begin{aligned}\sum_{n=1}^{20} n^4\end{aligned} \]

関数として級数を定義しました。初期値をs=0として、「s+= n^4」によってsに\(n^4\)を1から指定したNのときまで足していき、その内容を返す関数です。n^4の部分を変えれば、他の数列の和が求められます。

後半では級数の値を数列、配列として見て、棒グラフに描きました

級数の計算は、sumを使って

と簡単に描くこともできます。

 

逆数の2乗和、無限級数

\[ \begin{aligned}\sum_{n=1}^{\infty} \frac{1}{n^2}\end{aligned} \]

を近似的に求めてみましょう。

この級数の値は、\(\frac{\pi ^2}{6}\)であることが知られています。誤差を計算してみると

となりました。

参考:負のべき乗の無限級数Σ1/n^pの収束・発散の判定方法

 

テイラー展開

関数のテイラー展開とそのグラフを描いてみましょう。

指数関数は

\[ \begin{aligned}e^{x}= \sum_{n=0}^\infty \frac{1}{n!}x^n\end{aligned} \]

です。\(x=1\)のときの値\(e\)は、さきほどの方法で求められます(試してみてください)。

テイラー展開のような関数項級数、\(x,N\)を変数とする関数を、2変数関数として定義しましょう。

「factorial(big(n))」で階乗\(n!\)を表しています。bigをつけているのは、オーバーフロー対策です。

「plot(x->f_3(x,3))」によって、3次までのテイラー展開のグラフを描いています。f_3には2つの変数がありますが、「x->f(x,N)」と書くことで、xを変数とする関数のグラフとして認識されます。

\(e^x\)と最初の5次までの項のグラフを、重ねて描いてみましょう。

最初に、pとして何も書かれていないプロットの土台を作ります。ついで、そのpに他のプロットを「plot!」によって足していきました。plot!は破壊的な操作、pに新たなグラフを追加する操作です。for文を使うことで、0から5次までのグラフを順に追加しています。

 

三角関数、サインのテイラー展開

\[ \begin{aligned}\sin x=x- \frac{x^3}{3!}+ \frac{x^5}{5!}- \cdots\\ = \sum_{n=0}^\infty \frac{(-1)^{n}}{(2n+1)!}x^{2n+1}\end{aligned} \]

も同様にして描いてみましょう。

if文を使うことで、番号によって値の加え方を変えています。4で割ったあまりが1ならば\(\frac{1}{n!}x^n\)、4で割ったあまりが3ならば\(-\frac{1}{n!}x^n\)、それ以外ならば何もしません。

 

 

フーリエ級数展開

テイラー展開と同様にして、フーリエ級数展開を計算し、グラフを描くことができます。

 

矩形波のフーリエ級数展開

\[ \begin{aligned}f(x)=\sum_{k=1}^\infty \frac{4}{(2k-1)\pi} \sin (2k-1)x\\ = \frac{4}{\pi}\sin x+ \frac{4}{3\pi} \sin 3x + \frac{4}{5\pi} \sin 5x +\cdots\end{aligned} \]

を描いてみましょう。

のこぎり波三角波絶対サイン波のグラフも同様にして描くことができます。ぜひ考えてみてください。

 

以上、Juliaで級数を計算し、グラフを描く方法を紹介してきました。

テイラー展開やフーリエ級数展開は、手計算で高次の項まで計算するのは大変です。コンピュータの力を使ってグラフを描くと、その威力をわかりやすく感じられるでしょう。

(SymPyを使うと、テイラー展開を代数的に求めることができるようです。別記事で紹介するかも。)

木村すらいむ(@kimu3_slime)でした。ではでは。

 

1から始める Juliaプログラミング
進藤 裕之(著), 佐藤 建太(著)
コロナ社 (2020-03-26T00:00:01Z)
5つ星のうち4.5
¥7,353 (コレクター商品)

 

こちらもおすすめ

Juliaで数列の計算、棒グラフを描く方法

なぜテイラー展開を学ぶ? 単振り子を例にわかりやすく解説

矩形波とは:フーリエ級数展開の求め方、ギブス現象、ライプニッツの級数