どうも、木村(@kimu3_slime)です。
今回は、Julia(SymPy)で三角関数の加法定理、倍角の公式、和積の公式、合成を求める方法を紹介します。
準備
SymPyを使うので、持っていなければインストールしておきましょう。
1 2 | using Pkg Pkg.add("SymPy") |
準備として、以下のコードを実行しておきます。
1 | using SymPy |
三角関数の公式を求める方法
まず、変数記号として、\(\theta, \alpha ,\beta\)を用意しましょう。
1 | θ,α,β=symbols("θ α β") |
Jupyter notebookでは、「\theta」と打ってtabキーを押すことで、ギリシャ文字を変換することができます。\(\alpha,\beta\)は「\alpha, \beta」です(TeX記法)。
加法定理
まず、加法定理を求めてみましょう。「expand(三角関数, trig= true)」で、三角関数に対応した展開ができます。
1 2 3 | expand(sin(α+β), trig=true) expand(cos(α+β), trig=true) expand(tan(α+β), trig=true) |
\[ \begin{aligned}\sin{\left(α \right)} \cos{\left(β \right)} + \sin{\left(β \right)} \cos{\left(α \right)}\end{aligned} \]
\[ \begin{aligned}- \sin{\left(α \right)} \sin{\left(β \right)} + \cos{\left(α \right)} \cos{\left(β \right)}\end{aligned} \]
\[ \begin{aligned}\frac{\tan{\left(α \right)}}{- \tan{\left(α \right)} \tan{\left(β \right)} + 1}\\ + \frac{\tan{\left(β \right)}}{- \tan{\left(α \right)} \tan{\left(β \right)} + 1}\end{aligned} \]
タンジェントの公式は、分母が共通しているのにまとめてくれないのは、微妙な仕様ですね。「simplify(数式, trig= true)」で、三角関数に適した単純化を試みます。
1 | simplify(expand(tan(α+β), trig=true)) |
\[ \begin{aligned}- \frac{\tan{\left(α \right)} + \tan{\left(β \right)}}{\tan{\left(α \right)} \tan{\left(β \right)} – 1}\end{aligned} \]
倍角、半角の公式
2倍角の公式、3倍角の公式も簡単に求められます。
1 2 3 4 5 6 | expand(sin(2θ), trig=true) expand(cos(2θ), trig=true) expand(tan(2θ), trig=true) expand(sin(3θ), trig=true) expand(cos(3θ), trig=true) expand(tan(3θ), trig=true) |
\[ \begin{aligned}2 \sin{\left(θ \right)} \cos{\left(θ \right)}\end{aligned} \]
\[ \begin{aligned}2 \cos^{2}{\left(θ \right)} – 1\end{aligned} \]
\[ \begin{aligned}\frac{2 \tan{\left(θ \right)}}{1 – \tan^{2}{\left(θ \right)}}\end{aligned} \]
\[ \begin{aligned}- 4 \sin^{3}{\left(θ \right)} + 3 \sin{\left(θ \right)}\end{aligned} \]
\[ \begin{aligned}4 \cos^{3}{\left(θ \right)} – 3 \cos{\left(θ \right)}\end{aligned} \]
\[ \begin{aligned}- \frac{\tan^{3}{\left(θ \right)}}{1 – 3 \tan^{2}{\left(θ \right)}}\\ + \frac{3 \tan{\left(θ \right)}}{1 – 3 \tan^{2}{\left(θ \right)}}\end{aligned} \]
同様の方法で半角の公式を求められないか試しましたが、うまくいきませんでした。
1 | expand(sin(Rational(1,2)*θ), trig=true) |
\[ \begin{aligned}\sin{\left(\frac{θ}{2} \right)}\end{aligned} \]
半角の公式は、コサインの2倍角の公式において、\( \theta\)を\(\frac{\theta}{2}\)に置き換えることで得られます。これをプログラム上で行ってみましょう。
「Eq(左辺,右辺)」で等式を作り、「数式.subs(変数,代入する数)」で代入します。
1 2 | Eq(cos(2θ) ,expand(cos(2θ), trig=true)) Eq(cos(2θ) ,expand(cos(2θ), trig=true)).subs(θ,θ/2) |
\[ \begin{aligned}\cos{\left(2 θ \right)} = 2 \cos^{2}{\left(θ \right)} – 1\end{aligned} \]
\[ \begin{aligned}\cos{\left(θ \right)} = 2 \cos^{2}{\left(\frac{θ}{2} \right)} – 1\end{aligned} \]
これを\(\cos^{2}{\left(\frac{θ}{2} \right)}\)について整理したのが、コサインの半角の公式です。\(\cos^{2}{\left(\frac{θ}{2} \right)} =1- \sin^{2}{\left(\frac{θ}{2} \right)}\)を使えば、サインの半角の公式が得られます。タンジェントの半角の公式は、これらを組み合わせたものです。
半角の公式は、\((\sin (\theta))^2\)の展開としても見ることができます。単純に展開しようとしても、うまくいきません。
1 | expand((sin(θ))^2, trig=true) |
\[ \begin{aligned}\sin^{2}{\left(θ \right)}\end{aligned} \]
しかし、「三角関数.rewrite(tan)」によってタンジェントに書き換えてから展開すると、なぜかうまくいきます。
1 2 | simplify(expand(((sin(θ))^2).rewrite(tan), trig=true)) simplify(expand(((cos(θ))^2).rewrite(tan), trig=true)) |
\[ \begin{aligned}\frac{1}{2} – \frac{\cos{\left(2 θ \right)}}{2}\end{aligned} \]
\[ \begin{aligned}\frac{\cos{\left(2 θ \right)}}{2} + \frac{1}{2}\end{aligned} \]
タンジェントの2乗も、そのままではうまく展開してくれません。しかし、\(1+(\tan \theta)^2\)の単純化を試みると、
1 | simplify(1+(tan(θ))^2) |
\[ \begin{aligned}\frac{1}{\cos^{2}{\left(θ \right)}}\end{aligned} \]
という関係式は導いてくれます。
和積の公式、積和の公式
積和の公式を導いてみましょう。
単に積のまま展開しようとしても、うまくいきません。一旦タンジェントに変換すると、導くことができます。
1 2 3 | simplify(expand((sin(α)*sin(β)).rewrite(tan), trig=true)) simplify(expand((cos(α)*cos(β)).rewrite(tan), trig=true)) simplify(expand((sin(α)*cos(β)).rewrite(tan), trig=true)) |
\[ \begin{aligned}\frac{\cos{\left(α – β \right)}}{2} – \frac{\cos{\left(α + β \right)}}{2}\end{aligned} \]
\[ \begin{aligned}\frac{\cos{\left(α – β \right)}}{2} + \frac{\cos{\left(α + β \right)}}{2}\end{aligned} \]
\[ \begin{aligned}\frac{\sin{\left(α – β \right)}}{2} + \frac{\sin{\left(α + β \right)}}{2}\end{aligned} \]
和積の公式は、三角関数の和が既にシンプルな形なので、うまく導くことができませんでした。そこで、積和の公式において、
\[ \begin{aligned}A=\alpha +\beta \end{aligned} \]
\[ \begin{aligned}B=\alpha -\beta \end{aligned} \]
と置き換えることで導くことにします。やや複雑なコードになりますが、導くことはできます。
1 2 3 | Eq(sin(α)*sin(β) ,simplify(expand((sin(α)*sin(β)).rewrite(tan), trig=true))).subs(α +β,A).subs(α -β,B).subs(α,(A+B)/2).subs(β,(A-B)/2) Eq(cos(α)*cos(β) ,simplify(expand((cos(α)*cos(β)).rewrite(tan), trig=true))).subs(α +β,A).subs(α -β,B).subs(α,(A+B)/2).subs(β,(A-B)/2) Eq(sin(α)*cos(β) ,simplify(expand((sin(α)*cos(β)).rewrite(tan), trig=true))).subs(α +β,A).subs(α -β,B).subs(α,(A+B)/2).subs(β,(A-B)/2) |
\[ \begin{aligned}\sin{\left(\frac{A}{2} – \frac{B}{2} \right)} \sin{\left(\frac{A}{2} + \frac{B}{2} \right)}\\ = – \frac{\cos{\left(A \right)}}{2} + \frac{\cos{\left(B \right)}}{2}\end{aligned} \]
\[ \begin{aligned}\cos{\left(\frac{A}{2} – \frac{B}{2} \right)} \cos{\left(\frac{A}{2} + \frac{B}{2} \right)} \\= \frac{\cos{\left(A \right)}}{2} + \frac{\cos{\left(B \right)}}{2}\end{aligned} \]
\[ \begin{aligned}\sin{\left(\frac{A}{2} + \frac{B}{2} \right)} \cos{\left(\frac{A}{2} – \frac{B}{2} \right)} \\= \frac{\sin{\left(A \right)}}{2} + \frac{\sin{\left(B \right)}}{2}\end{aligned} \]
三角関数の合成
三角関数の合成を求めるために、単純化を試みますが、そのままでは思う形になってくれません。
1 | simplify(sin(θ)+cos(θ), trig=true) |
\[ \begin{aligned}\sin{\left(θ \right)} + \cos{\left(θ \right)}\end{aligned} \]
「三角関数.rewrite(sin)」でサインに変換してから単純化すると、期待する結果が得られます。
1 | simplify((sin(θ)+cos(θ)).rewrite(sin)) |
\[ \begin{aligned}\sqrt{2} \sin{\left(θ + \frac{\pi}{4} \right)}\end{aligned} \]
この数式を、コサインとして表示し直すこともできます。
1 | simplify((sin(θ)+cos(θ)).rewrite(sin)).rewrite(cos) |
\[ \begin{aligned}\sqrt{2} \cos{\left(θ – \frac{\pi}{4} \right)}\end{aligned} \]
ド・モアブルの定理
複素数との関連で、ド・モアブルの定理\(\cos k\theta + i \sin k \theta = (\cos \theta + i \sin \theta )^k\)を確かめることもできます。Juliaでは、虚数単位\(i\)は「im」です。
1 2 | simplify((cos(θ)+im*sin(θ))^2) simplify(cos(2*θ)+im*sin(2*θ)) |
\[ \begin{aligned}e^{2 i θ}\end{aligned} \]
\[ \begin{aligned}e^{2 i θ}\end{aligned} \]
参考:オイラーの公式、極形式、ド・モアブルの定理とは:複素指数関数、三角関数の性質
双曲線関数の加法定理
双曲線関数に対しても、三角関数と同じ方法で公式を導くことができます。
1 2 3 | expand(sinh(α+β), trig=true) expand(cosh(α+β), trig=true) expand(tanh(α+β), trig=true) |
\[ \begin{aligned}\sinh{\left(α \right)} \cosh{\left(β \right)} + \sinh{\left(β \right)} \cosh{\left(α \right)}\end{aligned} \]
\[ \begin{aligned}\sinh{\left(α \right)} \sinh{\left(β \right)} + \cosh{\left(α \right)} \cosh{\left(β \right)}\end{aligned} \]
\[ \begin{aligned}\frac{\tanh{\left(α \right)}}{\tanh{\left(α \right)} \tanh{\left(β \right)} + 1}\\ + \frac{\tanh{\left(β \right)}}{\tanh{\left(α \right)} \tanh{\left(β \right)} + 1}\end{aligned} \]
以上、Julia(SymPy)で三角関数の加法定理、倍角の公式、和積の公式、合成を求める方法を紹介してきました。
三角関数の公式は覚えるのが大変なので、手計算だけでなく、コンピュータでも導いてみると良いでしょう。
木村すらいむ(@kimu3_slime)でした。ではでは。
コロナ社 (2020-03-26T00:00:01Z)
¥7,353 (コレクター商品)
こちらもおすすめ
Julia(SymPy)によるテイラー級数展開の求め方(指数対数、三角、双曲線)
Julia(SymPy)で1変数関数を積分する方法(多項式、指数対数、三角関数)
Julia(SymPy)で1変数関数を微分する方法(多項式、指数対数、三角関数)
.Julia(SymPy)で有理関数を部分分数分解、通分する方法
Julia(SymPy)で多項式の展開・因数分解、方程式を解く方法
Juliaで1変数関数のグラフを描く方法(多項式、指数対数、三角関数)