忘却の微分方程式(20) Maxima、三角関数の試行錯誤、思ったようには動かんな

Joseph Halfmoon

前回、MathematicaとMaximaの三角関数を使いってみましたが、三角関数の展開など、どうしてよいやらサッパリでした。今回は、Maxima中心に三角関数の加法定理とか積を和に直す公式とかを練習してみます。遥かな昔、高校のときにやった筈の物(とっくに忘れているけれど。)

※「忘却の微分方程式」投稿順 index はこちら

最初にお世話になっております、Maxima日本語ドキュメントへのリンクを貼り付けさせていただきます。市川様がご翻訳の膨大なドキュメントの中から3角関数を含むページであります。

10. Mathematical Functions

wxMaximaのギリシャ文字の入力

本題の3角関数に入るまでに、wxMaximaのギリシャ文字の入力について書き留めておきます。昔、Maxima本体では、%alphaなどと入力するとギリシャ文字に変換してくれたような記憶があったのです。そこで手元の wxMaxima(以下に見えるバージョン)で%alpha入力してみたのですが、ギリシャ文字になりません。メニューを見ると、表示>ギリシャ文字 でギリシャ文字入力用のパネルが開きました。こんな感じ。

Max_charこれでギリシャ文字の入力もバッチリだね。今回は昔懐かしい高校数学風のα、β使いたかったのであります。なお、Mathmaticaでも同様な入力パネルが使えました。

trigexpandを制御するグローバル変数

さて、前回、3角関数の「展開」などやろうとして戸惑ったのが、それを制御するグローバル変数がいろいろあることです。それぞれは真か偽かの値をとるだけなのですが、設定によって同じ関数を使った「展開」の結果がいろいろ変わってきます。まずは、起動時初期値の様子を見てみました。緑字が変数です。

Max_trigexpand_flags

まずは デフォルトが true になっている trigexpandplus から使ってみます。この変数は後に plus とあるとおり、「和の規則を制御」するもののようです。ぶちゃけ「加法定理」を適用して展開するか否か、というあたり。よくわかっておらんけど。実際に、何も指定しない状態と、この変数を局所的に false にした状態で加法定理の展開をさせてみたところがこちら。

Max_trigexpand_plus上のとおり、デフォルト状態では加法定理で展開され、ローカルにfalseにすると展開は抑止されます。遥かな昔、サイン、コス、コス、サインなどと唱えて覚えたですけれど、順番違うな。順番を合わせるテクは難しいそうなのでまたそのうち(何時だ?)

つづいて trigexpandtimes をつかってみます。こちらは times なので掛け算ですな。「積の規則の制御」らしいです。ぶっちゃけ「倍角公式」一族みたいなやつらを適用して展開するや否やみたいです。これまた、変数が trueのデフォルト状態と、falseで倍角公式を適用させてみます。

Max_trigexpand_times

上のとおり、デフォルトでは、倍角公式適用されておりますな。falseになると抑止。

つづいては halfangles です。読んでのとおり 半角公式的な処理のON/OFFのための変数のようです。デフォルトでは false。実際に使ってみたのがこちら。

Max_half上の半角公式の展開、難しい式になってますな。floor()関数が係数に載ってます。昔、高校で習ったときは、αの値はテキトーで、ホンワカ ± みたいな書き方していたですが。上記の式なら、αの値で符号が一意に決まるようになっているみたい(ホントにあっているのかいないのかは知らんけど。。。)

デフォルト状態だと半角公式は展開してくれません。上のような複雑な表示になるのがウザイからかね。

最後に、trigexpand()関数を制御する、trigexpandグローバル変数の例をMaximaのExampleから引いたものをアイキャッチ画像にかかげました。

trigexpand変数をtrueにすると、ガッツリ展開してくれていますが(3倍角公式使って変形すればできるのだと思うけど、自分じゃやってないです)、falseにするとすげないです。

も少しtrigexpand

加法定理をもう少し。こんな感じ。

Max_trigexpand00倍角公式をもう少し。こんな感じ。

Max_trigexpand013倍角公式は、ちょっと思っていたのと形が違う。そこでtrigsimp()関数に食わせていたのが以下です。cosの方はいいけど、sinの方はご所望の形とは違うな。この辺の制御、ムツカシー。Max_trigexpand02
別ルートで、trigexpand()した結果をratsimp()にかけてみた。これは良い感じ。

Max_trigexpand03
ちょっと tirgexpand()関数を触ってみるだけで、まだまだ奥は深そうな感じがします。数学力無いし、深みにハマらず使える範囲で表面的に使っているのが安全か?

ちょっとだけtrigreduce

trigexpand()だけで終わってしまいそうだったので、ちょっとだけtrigreduce()も。ぶっちゃけ積を和に直す公式をやってみただけ。

Max_trigreduce00ちゃんと変形してくれるみたいです。

ちょっとだけMathmatica

今回 Maximaやるだけで力尽きてしまいました。最後にちょっとだけMathmatica。恐ろしい事に(?)MathematicaにもMaximaと同名の関数ありました。例によって頭文字大文字だし、角カッコですけれど。こんな感じ。

Wolf_Trig

ううむ、三角関数の森の入り口で立ち止まって回れ右ですか。先は長いし次へいこう。

忘却の微分方程式(19) 三角関数、1回じゃ無理。MathematicaとMaxima に戻る

忘却の微分方程式(21) 極座標表示、MathematicaとMaxima に進む