フリーソフトの小道   

愛用のフリー・ソフト

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

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

 前回、数式の展開計算、因数分解などを紹介しました。今回は、数式を代入したり、整理したりする一般的な計算や、 連立方程式を解いたりしてみることにしましょう。

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

1. 「関数を決めて代入する?」

 関数 F(X,Y)=(X+Y)^2 + 2*X + Y なるものに、X=3、Y=2 を代入したときの計算をしてみる。まず、関数をていぎしましょう。 関数の定義は、定義記号 := を使います。等号 = にコロン : を組み合わせたものです。 関す定義から、数値代入までを一気にしてみましょう。

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




2
(%o1) F(X, Y) := (X + Y) + 2 X + Y ※ 関数を定義されました!



(%i2) F(3,2); ※ 関数に代入します



(%o2) 33 ※ 関数値を計算しました

 数値を代入するレベルでは簡単すぎますね。では、数式を代入してみましょう。X に 3a+b を、Y に 2a-5b を代入してみましょう。 これは、関数の変数部にそれぞれの値を入れてやるだけで、Maxima が計算してくれます。 F(3a+b, 2a-5b) だけで良いのですからね。注意する点は 係数と変数の間に乗算記号 * を入れるところだけです。

(%i3) F(3*a+b,2*a-5b);                     ※ 関数に代入します




2
(%o3) 2 (b + 3 a) - 5 b + (5 a - 4 b) + 2 a ※ 代入してくれました

 さらに展開してみましょう。expand コマンドを使えばよいのは分かっていますね。

(%i4) expand(%o2);        ※ 前の出力式をそのままつかうときは式の番号 %o2 を入れます




2 2
(%o4) 16 b - 40 a b - 3 b + 25 a + 8 a ※ 展開・整理してくれました

 これくらいの計算であれば、計算ミス無しに筆算で答えを出すのは大変です。Maxima はどんなに複雑になっても大丈夫ですから。

2. 「方程式が解ける?」

 方程式は中学校で習ったものですが、当然、Maxima でも計算してくれます。このとき使うのは、solve コマンドです。

(%i5) solve(2*x + 3 =0 ,x);    ※ 最も簡単な一元一次方程式から




3
(%o5) [ x = - - ]   ※ 分数で答えを出してくれました
2

 このレベルなら中学生でも出来ますね。では、2次方程式はどうでしょうか?

(%i6) solve(2*x^2 + 3*x - 5 = 0 ,x);    ※ 一元二次方程式では




5
(%o6) [ x = 1, x = - - ]   ※ 分数で答えを出してくれました
2

 二次方程式だから、解は2つ出てきました。実数解以外はどうなるのでしょうか? 虚数解になる二次方程式を入れて見ましょう。当然、これも解いてくれます。

(%i7) solve(2*x^2 + 3*x + 5 = 0 ,x);    ※ 虚数解になる二次方程式では




SQRT(31) %I + 3 SQRT(31) %I - 3
(%o7) [x = - ---------------, x = ---------------]   ※ %I が虚数単位記号
4 4

 なお、SQRT は平方根記号のことです。Maximaは 虚数解まできちんと解けるのですね。 3次方程式は全て解が求められると数学の先生に聞いたのですが、Maxima は、3次方程式が解けるでしょうか?

(%i8) solve(2*x^3 + 4*x^2 + 4*x +2 = 0 ,x);    ※ 3次方程式は解けるか?




SQRT(3) %I + 1 SQRT(3) %I - 1
(%o8) [x = - --------------, x = --------------, x = - 1]
2 2

 係数がどんなに複雑でも同じです。簡単に計算してくれますね。
 では、連立方程式を解いてくれるのでしょうか? 当然、解いてくれます。数値係数の中学校レベルの連立方程式から、 高校レベルの文字係数の連立方程式でも、どちらでもOKです。

 [問題] 質量が m と 2m の2つの物体が糸で連結し滑車にかけられている。静かに手を離すとき、両物体の加速度と糸の張力を求めなさい。なお、重力加速度が g であるとする。

 上の問題は物理分野の 「運動方程式を扱う問題」 です。全て、文字係数となっているので、中学生にはできません。 Maximaは、糸の張力と加速度を求めることができるでしょうか。Maximaに計算させて見ましょう。 最初に2つの物体の運動方程式を作り、Maximaに渡してみましょう。糸の張力は T 、加速度が a です。

(%i9) solve([T - m*g = m*a, 2*m*g - T = 2*m*a], [a,T]);    ※ 文字係数の連立方程式は解けるか




g 4 g m
(%o9) [[a = -, T = -----]] ※ 見事に解けました。文字の順はご愛嬌ですね!
3 3

 1秒もかからないのです。あっという間に、糸の張力と加速度を求めてくれました。 上の問題は、未知数が2つで、係数も簡単ですから手で求めてもそれほど大変ではありません。 しかし、キルヒホッフの法則を使う問題などでは未知数が多くなり、手で計算するには大変です。 この様な場合では、Maximaは大いに威力を発揮するでしょう。

 ページの都合もあり、これくらいにしておきましょう。次回は、三角関数などを取り上げてみましょう。お楽しみに。

 前回と含めて2回に渡って紹介してきた 数式処理システム 「Maxima」 ですが、一度入手して利用してみてはいかがでしょうか。 マニュアルなどはPDF文書で入手可能ですので、詳しく読めば相当なレベルの数式処理が可能になります。



2005/02/05  管理人(志)


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