フリーソフトの小道   

愛用のフリー・ソフト

第21回 Maxima の実力を探る     フリーソフトの数式処理システム(第4部)

数式計算をどこまでしてくれるのか?

 前回、方程式をどこまで解いてくれるのかを具体例を示しながら説明してきました。 今回は、微積分を取り上げてみましょう。

ステップ4  数式処理システム 「Maxima」 を使ってみる

6. 「微積分」

 2次関数 F(x)=2*x^2 + 3*x + 5 を x で微分してみましょう。微分するコマンドは diff です。

(%i1) F(X):=2*X^2 + 3*X + 5;      ※ 関数を定義する

 
2 (%o1) F(x) := 2 x + 3 x + 5 ※ 確認のため表示してくれた
 
(%i2) diff(F(x),x); ※ 関数を微分します
 
(%o2) 4 x + 3 ※ 関数を微分できました
 

 これなら、2年生でも分かる簡単な微分ですね。 では積分はどうでしょうか。 積分のコマンドは integrate コマンドです。

(%i1) F(X):=2*X^2 + 3*X + 5;      ※ 関数を定義する

 
(%i3) integrate(F(x),x); ※ 関数を積分する
 
3 2 2 x 3 x (%o3) ---- + ---- + 5 x ※ 積分ができました 3 2
 

 これも2年生でも分かる積分です。こんなものは誰でも出来るのですが、そう簡単ではないものもあります。 例えば、tan(x) の平方根の関数はどうでしょうか? 手で計算するのは大変です、Maximaなら1秒です。 試してみましょう。

(%i1) F(X):=sqrt(tan(x));      ※ 関数を定義する

 
(%i3) integrate(F(x),x); ※ 積分する
 
LOG(TAN(x) + SQRT(2) SQRT(TAN(x)) + 1) (%o4) 2 (- -------------------------------------- 4 SQRT(2)
 
2 SQRT(TAN(x)) + SQRT(2) ATAN(------------------------) LOG(TAN(x) - SQRT(2) SQRT(TAN(x)) + 1) SQRT(2) + -------------------------------------- + ------------------------------ 4 SQRT(2) 2 SQRT(2)
 
2 SQRT(TAN(x)) - SQRT(2) ATAN(------------------------) SQRT(2) + ------------------------------) ※ 積分ができました 2 SQRT(2)

 Maximaが積分するために必要な時間は殆どゼロです。すぐに答えが表示されます。 人間が手で計算すれば、そうは行かないでしょう。10分でできるか、20分かかるか。いつまで経っても答えが出ないかもしれませんね。

 では、数学の問題集にある問題を解いてみましょう。次の積分は部分積分法を用いる問題です。

  [問題]指数関数と三角関数を組み合わせた関数 F(x)=e^x sin 2x を積分せよ。

 指数関数は exp(x) と表します。もちろん、%E^(x) でも同じですが...

(%i5) integrate( exp(x)*sin(2*x),x);   ※ 定義とコマンドを一括してもOK

 
x %E (SIN(2 x) - 2 COS(2 x)) (%o5) --------------------------- ※ 積分ができました(%E は自然数 e を示す) 5

 元の関数をグラフ化してみましょう。前回で紹介したプロットコマンドを使います。今回は、変数は x のみですので、2次元グラフになります。 具体的には、コマンドは plot2d( exp(x)*sin(2*x),[x,-5,10]); でOKです。

 不思議なグラフのようですが、指数関数部分は負の領域では殆どゼロだからこうなるのですね。

 普通の指数関数でもOKです。

(%i7) integrate(5^(x) *sin(2*x),x);

 
LOG(5) x ^ LOG(5) x LOG(5) %E SIN(2 x) - 2 %E COS(2 x) (%o7) -------------------------------------------------- 2 LOG (5) + 4

 複雑な積分が出来るのはわかったが、数学の問題は解けるのか? では、半径が10の半円の面積を求めてみよう。

(%i8) y(x):=sqrt(10^2 -x^2)$   ※ 半径10の円の関数を定義

 
(%i9) integrate(y(x),x,-10,10); ※ 積分範囲を追加して、積分する
 
(%o9) 50 %pi ※ 半円の面積がみごと求まりました。全円の面積は100π!

 定積分は積分コマンドに積分範囲を付け加えればよいのです。それだけなんですね。積分範囲は文字定数でもOKですので、 どのようなものにも対応できます。

 最後に、微分方程式を解いてみましょう。ばねの単振動の微分方程式の問題です。

(%i11) 'diff(x(t),t,2)=-k/m*x(t);   ※ 加速度は位置を時間で2回微分したもの

 
2 d k x(t) (%o11) --- (x(t)) = - ------ ※ 2次微分のの微分方程式です 2 m dt
 
(%i12) 'diff(x(t),t)=v(t); ※ 速度は位置を時間で微分したもの
 
d (%o12) -- (x(t)) = v(t) ※ 1次微分方程式です dt
 
(%i13) atvalue(x(t),t=0,A); ※ 初期条件:時刻ゼロで x=A (端からスタート)
 
(%o13) A ※ 初期値設定しました
 
(%i14) atvalue('diff(x(t),t),t=0,0); ※ 初期値:時刻ゼロで v=0 (静かに手を離した)
 
(%o14) 0 ※ 初期値設定しました
 
(%i15) desolve([%o11,%o12],[x(t),v(t)]); ※ 微分法手式を解きなさい
 
Is k m positive, negative, or zero? ※ ばね定数、質量は正、負、ゼロ? と聞かれた!
 
positive; ※ もちろん正です! SQRT(k m) t A k SIN(-----------) SQRT(k m) t m (%o15) [x(t) = A COS(-----------), v(t) = - --------------------] ※ 答えです! m SQRT(k m)

 式の形は整理し切れていませんが、微分方程式も解いてしまいました。Maximaの力はどれくらいになるのでしょうか? 筆者(志)にも分かりません。マニュアルを少し読んだだけですので...。


これにて終了とします

 まだまだ、Maximaの機能はまだまだ語り尽くせないほどあります。今回のフリーソフト紹介の記事としてはこれにて終了とします。 詳しく知りたい方は、数式処理システム 「Maxima」 を、一度入手して使ってみてはいかがでしょうか。 何しろ 「無料」 なんですからね。マニュアル(PDF文書で全200ページ以上)に詳しく書かれているので、 全てを読めば相当なレベルまでの数式処理が可能になります。 Maximaをマスターした頃には英語の力も増強されるので一石二鳥だからね!

 有能な人へ、Maximaに挑戦したそのレポートをお寄せください。「物理の小道」 発表させていただきます。 いつまでもお待ちしています。(現れるかな?)



2005/02/07  管理人(志)


感想・意見は、掲示板、または メールでどうぞ! --- 管理人(志)