どうも、木村(@kimu3_slime)です。
今回は、Julia(SymPy)で数列の和、無限級数、べき級数を求める方法を紹介します。
準備
SymPyを使うので、持っていなければインストールしておきましょう。
1 2 | using Pkg Pkg.add("SymPy") |
準備として、以下のコードを実行しておきます。
1 | using SymPy |
数列の和を求める方法
変数記号として、複数の記号を用意しておきます。
1 | n,k,a1,d,r,x = symbols("n k a1 d r x") |
「summation(数列,(変数,範囲1,範囲2))」で、数列の和を求めることができます。
\[ \begin{aligned}\sum_{k=1}^{100} k\end{aligned} \]
1 | summation(k,(k,1,100)) |
\[ \begin{aligned}5050\end{aligned} \]
和の公式
足す範囲として、数字だけでなく変数\(n\)を使えます。これによって、数列の和の公式が導けます。
\[ \begin{aligned}\sum_{k=1}^{n} k\end{aligned} \]
\[ \begin{aligned}\sum_{k=1}^{n} k^2\end{aligned} \]
\[ \begin{aligned}\sum_{k=1}^{n} k^3\end{aligned} \]
1 2 3 | factor(summation(k,(k,1,n))) factor(summation(k^2,(k,1,n))) factor(summation(k^3,(k,1,n))) |
\[ \begin{aligned}\frac{n \left(n + 1\right)}{2}\end{aligned} \]
\[ \begin{aligned}\frac{n \left(n + 1\right) \left(2 n + 1\right)}{6}\end{aligned} \]
\[ \begin{aligned}\frac{n^{2} \left(n + 1\right)^{2}}{4}\end{aligned} \]
結果を見やすくするため、「factor(数式)」で因数分解しています。
等差数列、等比数列の和
\[ \begin{aligned}\sum_{k=1}^n (d(k-1)+a_1)\end{aligned} \]
\[ \begin{aligned}\sum_{k=1}^n a_1 r^{k-1}\end{aligned} \]
1 2 | factor(summation(d*(k-1)+a1,(k,1,n))) summation(a1*r^(k-1),(k,1,n)) |
\[ \begin{aligned}\frac{n \left(2 a_{1} + d n – d\right)}{2}\end{aligned} \]
\[ \begin{aligned}\frac{a_{1} \left(\begin{cases} n & \text{for}\: r = 1 \\\frac{r – r^{n + 1}}{1 – r} & \text{otherwise} \end{cases}\right)}{r}\end{aligned} \]
後者は少しわかりにくいかもしれません。\(r=1\)のとき、\(\frac{a_1n}{r}\)で、それ以外は\(a_1\frac{1- r^n }{1 – r} \)ですね。
無限級数
範囲としては、無限大\(\infty\)を使うこともできます。SymPyでは、2つのオー「oo」です。
\[ \begin{aligned}\sum_{k=1}^\infty a_1 r^{k-1}\end{aligned} \]
1 | summation(a1*r^(k-1),(k,1,oo)) |
\[ \begin{aligned}\frac{a_{1} \left(\begin{cases} \frac{r}{1 – r} & \text{for}\: \left|{r}\right| < 1 \\\sum_{k=1}^{\infty} r^{k} & \text{otherwise} \end{cases}\right)}{r}\end{aligned} \]
調和級数を含む、逆数のべき乗の級数の収束・発散も判定できます。
\[ \begin{aligned}\sum_{k=1}^\infty \frac{1}{k}\end{aligned} \]
\[ \begin{aligned}\sum_{k=1}^\infty \frac{1}{k^2}\end{aligned} \]
\[ \begin{aligned}\sum_{k=1}^\infty \frac{1}{k^{1.1}}\end{aligned} \]
1 2 3 | summation(1/k,(k,1,oo)) summation(1/k^2,(k,1,oo)) summation(1/k^(1.1),(k,1,oo)) |
\[ \begin{aligned}\infty\end{aligned} \]
\[ \begin{aligned}\frac{\pi^2}{6}\end{aligned} \]
\[ \begin{aligned}10.5844484649508\end{aligned} \]
参考:負のべき乗の無限級数Σ1/n^pの収束・発散の判定方法
べき級数
数列に新たな変数を加えることで、べき級数も計算できます。これらはテイラー展開の逆の計算です。
\[ \begin{aligned}\sum_{k=0}^\infty \frac{1}{k!}x^k\end{aligned} \]
\[ \begin{aligned}\sum_{k=0}^\infty x^k\end{aligned} \]
\[ \begin{aligned}\sum_{k=1}^\infty \frac{(-1)^{k-1}}{k} x^k\end{aligned} \]
1 2 3 | summation(x^k/factorial(k),(k,0,oo)) summation(x^k,(k,0,oo)) summation((-1)^(k-1) *x^k / k,(k,1,oo)) |
\[ \begin{aligned}e^x\end{aligned} \]
\[ \begin{aligned}\begin{cases} \frac{1}{1 – x} & \text{for}\: \left|{x}\right| < 1 \\\sum_{k=0}^{\infty} x^{k} & \text{otherwise} \end{cases}\end{aligned} \]
\[ \begin{aligned}- \begin{cases} – \log{\left(x + 1 \right)} & \text{for}\: x \leq 1 \wedge x > -1 \\\sum_{k=1}^{\infty} \frac{\left(-1\right)^{k} x^{k}}{k} & \text{otherwise} \end{cases}\end{aligned} \]
対数関数を定めるべき級数は、\(|x|<1\)において収束しています。\(x=1,-1\)での収束・発散は、具体的に計算できます。
\[ \begin{aligned}\sum_{k=1}^\infty \frac{(-1)^{k-1}}{k} \end{aligned} \]
\[ \begin{aligned}\sum_{k=1}^\infty \frac{(-1)^{k-1}}{k} (-1)^k\end{aligned} \]
1 2 | summation((-1)^(k-1) / k,(k,1,oo)) summation((-1)^(k-1) *(-1)^k / k,(k,1,oo)) |
\[ \begin{aligned}\log(2)\end{aligned} \]
\[ \begin{aligned}-\infty\end{aligned} \]
以上、Julia(SymPy)で数列の和、無限級数、べき級数を求める方法を紹介してきました。
数値的に和を求めるのではなく、記号的に計算して和の公式を導いたり、無限級数すら計算できるのは便利ですね。
木村すらいむ(@kimu3_slime)でした。ではでは。
コロナ社 (2020-03-26T00:00:01Z)
¥7,353 (コレクター商品)
こちらもおすすめ
Julia(SymPy)によるテイラー級数展開の求め方(指数対数、三角、双曲線)
Julia(SymPy)で1変数関数を積分する方法(多項式、指数対数、三角関数)
Julia(SymPy)で1変数関数を微分する方法(多項式、指数対数、三角関数)