第12回
      数式処理システム



数式処理ソフトウェアは、数値計算、微積分や行列などの数式処理、3Dのカラーグラフィックス表示やアニメーションなどができる。現在、Wolfram Research社のMathematica(マセマティカ)、Waterloo Maple Software社のMaple V(メープルファイブ)、Mathsoft社のMathcad(マスキャド)、Mathwork社のMATLAB、三井東圧化学のEOUATRAN(イコートラン)などパソコンやワークステーションで動作する汎用のソフトが登場している。ここでは、Mathematicaを使い、技術士一次試験の数学の問題と電気回路の過渡現象解析を例にその基本操作法を学ぶ。

1. Mathematicaの起動と簡単な計算
Mathematicaで作成されたノートブックを単に読んだり、グラフィックやアニメーションを見るだけならMathReaderというソフトで十分で、このソフトはWolfram Research社のホームページ(http://www.wolfram.com/)からダウンロードできる。
Mathematicaのノートブックを作り、編集し、関数を実行するには、Mathematicaの完全セットが必要になる。現在の最新バージョンはVer3.0であるるが、ここではVer2.2を使った実例を紹介する。
Mac版のMathematica Ver2.2では立ち上がると自動的にuntitled-1という名のウインドウが開く。まず、ウインドウに3+8とキーボードから入力する(図1 起動画面)。
   
入力した数字や文字はボールド体で表示される。
次にShiftキーとEnterキーを同時に押す。はじめは、カーネルがスタートするので若干時間がかかるが、結果が図2(出力表示)のようにプレイン体で表示される。このとき、In[1]=,Out[1]=も自動的に付加される。
また右には、セルが表示される。入力セルや出力セルを複数個まとめたものがセクションで、セクションが閉じている場合には、下側がはねた括弧で表示される。セクションを開くには括弧をダブルクリックすればよい。 HelpメニューのGetting Startedに目を通せば、初心者用のマニュアルとしていくつかの例が解説されているのでMathematicaの概要を把握するのに役立つ。
またHelpメニューでコマンドや関数の解説を見ることができる。例えば、Plotコマンドについて?Plotと入力し、ShiftキーとReturnキーを同時に押すと解説文が表示される(図3 ヘルプ機能)ので分厚いマニュアルで探さなくてもよい。

2.四則演算
四則演算の簡単な例を図4(四則演算)に示す。
四則演算の記号は、可算は+、減算は−、乗算は*、除算は/でパソコンの一般的な記述法が使える。乗算は*の代わりにスペースを使用することもでき、4x5は4*5または4 5と書く。また2xは2*x、2 x、2x、といずれの方法で書いても良い。Mathekatecaはいずれの方法で入力しても評価して2 xを返す。
冪計算には^(キャレット)を使う。
   

3.構文の基本的規則(文法)
Mathematicaには角括弧と大文字という二大規則の他にも次に列挙する規則がある。
(1)関数の変数(引数)は角括弧([ ])で括る。
例えば、Sin[x]とすべきところを通常の数学の表記にしたがってSinxとしたり、Sin(x)と入力したりすると実行時にエラーメッセージが表示される。

(2)内部関数は必ず大文字で始まる。
Mathematicaではケースセンシティブといって大文字と小文字は区別される。例えばAbsとabsは別のものとして扱われる。コマンドやオブジェクトの頭文字は大文字でPlot、Show、Solveなどと表す。一つのコマンドが2つまたはそれ以上の単語からできている場合はそれぞれの単語の頭文字は大文字で始まり、例えば、ParametricPlot、DSolveのように表す。ただし、ユーザー定義のオブジェクトは小文字で表す。

(3)リストやマトリックスは中括弧({ })で括って表示する。
例:Table[{1,2,3,4},{5,6,7,8}]

(4)定数の表記
πはPiと書く。例:Plot「Sin[x],{x,0,2Pi}]
Eはオイラー定数e、Degreeはπ/180、Infinityは正の無限大、Iは虚数iを表わす。
注:Ver3.0からはπがそのまま使えるなど伝統的な数学の表現形式が使えるようになる。
(5)%は直前の出力を表す。
例:%^2(直前の出力を自乗する)
 %%%(三つ前の出力)
  %n(n番目の出力コマンドOut[n]を指す。%3はOut[3])

(6)Nは少数で表示する
N[100] は有効桁数100桁で表示することを表わす。
N[Pi,40]はπを40桁表示する。

(7)表現の後に;を付けるとその表現は評価を受けるが出力表示は省略される。
メモリや時間を節約するのに有効である。

4.関数定義の方法
関数を定義するときは、f[x_] =  式表現(expression)のように変数(引数)は角括弧([ ])で囲み、左辺の変数xの後にはアンダーライン(_)をつけなければならない。
例: f[x_]=x^2+5 x+7
関数の定義の仕方には2通りあり、左辺と右辺を単に=で結んだときには即時指定を表わし、:=で結んだときには、呼び出したとき初めて式表現を評価する遅延指定となる。
即時指定と遅延指定の違いを図5(即時指定と遅延指定)の例によって説明する。
関数fを区間[a,b]にわたってグラフ化する関数h[f,{a,b}]を定義する。=で定義するとMathematicaはhをすぐ評価し、図5(即時指定と遅延指定)のようなメッセージを表示する。
それに対して、:=で定義した場合には関数hが再び呼び出されるまでは評価しようとしない。


5.代表的な関数
関数は800以上もあるので、マニュアルを手元に置くかHelpメニューからFunction Browserを開くかして、使いなれないものに出会ったらいつでも調べられるように用意しておくとよい。関数を入力するにはキーボードから打ち込んでも良いが、Helpメニュ-のOpen Function Browserから該当するものを選んでテンプレートをペーストすれば間違いが少ない。またコマンド名を補完する機能もあり、Inとキーインして、四つ葉クローバーとKを同時に押すか、ActionメニューからPrepare InputのComplete Selectionを選ぶとメニューが表示される(図6コマンド名補完機能)ので適当なものを選んでクリックすると In->Integrateのように完成される。
 
特徴的なコマンドにPlayとAnimateがある。
PlayはMathematicaが音を発生するときに使うコマンドでステレオ再生、多チャンネル再生ができる。
Animate[Plot,{t,tmin,tmax}]はtminからtmaxまでの時間にわたりコマンドPlotを実行し、その結果を一連のフレームでアニメートする。
Fourier変換やLaplace変換を行うときはHelpメニュ-でFunction Browserを開き、パッケージのCalculusからFourierTransform.m(LaplaceTransform.m)を選び呼び込んでおく必要がある。

6. 数値計算と数式処理の簡単な例
次の例は書式がごく単純なコマンドである。
Abs[-3]:-3の絶対値を求める。
Mean[{2,4,6,8}]:2、4、6、8の平均値を計算する。
Factorial[100]:100の階乗を計算する。
N[Pi,40]:πを40桁の精度で生成する。

以下に技術士一次試験の数学の問題(平成6年度)を例にあげ、Mathematicaの代表的なコマンドを使って解いてみる。正解の確認をするには効果的だ。
注)例題の文は原文と同じではない。
(1)Limit:極限を求める
例題 I−1
  「xLogxで x->0の場合の極限を求めよ」

Limit[xLog[x],x->0]の結果を図7(極限)のOut[48]に示す。

 (2)Solve:方程式を解く
方程式v=1/3 Pi r^2 hをhに関して解くには、Solveを使い、
Solve[v==1/3 Pi r^2 h,h]
とすると図8(方程式を解く)のOut[1]ような結果が得られる。
Solveとよく似たコマンドにReduceがあるが、Reduceは方程式がパラメータで与えられていてもそれが解を持つための条件を求める。Solveが一般解を示すのと違いがある。
図8のOut[2]の中││はORを$$はANDを表わす。
例題 I-4
「x3+3x2-9x-2=0の負の実数解は何個か」
この問題はこのような直接的な解による答えを求めているのではないだろうが、Out[3]より二つの負の実数解があることがわかる。

(3)Expand:式を展開する、Series:式の整級数展開する
Expand[(1+t)^10]は式(1+t)^10を展開し図8(方程式を解く)のOut[4]を出力する。
Series[f[x],{x,a,n}]はTaylor展開を得るためのコマンドでa=0とすればMaclaurin展開が得られる。
例題 I-5 
「CosXをマクローリン展開するとき、x2nの係数を求めよ」
直接答えは得られないが, 図8(方程式を解く)のOut[5]から係数は(-1)n/(2n)!であることがことがわかる。

(4)f'、D(Derivative):微分する
例題 I-2 
「f(x)=log(1+x)についてf'''(0)を求めよ」
f'[x]は1変数の関数fの1次関数を計算する。f'[x]はまたはD[f[x],x]と表わすこともできる。同様にfの2次導関数はf''[x]またはD[f[x]、{x,2}]と表わす。
f',f'',f''',f'''(0)を計算するとf'''(0)=2が求まる(図9 微分)。
 

例題 I-10 
「z=e2x-3yのとき37.jpgを求めよ」

2変数の関数について2次の偏導関数を求める例を図10(2次偏導関数)に示す。Out[2]とOut[3]を足して答えは13zとなる。Dの代わりにDerivativeを使うこともできる。
 

(5)In(Integrate):不定積分を計算する、定積分を計算する
例題  I-7 
36.jpgの値を求めよ」
図11(積分1)のようにIntegrate[f,x]は不定積分を計算し、Out[9]のように逆三角関数tan--1xが求められる。In[10]のIntegrate[f,{x,xmin,xmax}]は定積分を計算し、π/4が求められる。
 
例題  I-8 

「平面上の曲線y=44.jpgとx軸及び直線 x=2とで囲まれた部分をx軸のまわり に回転させて得られる回転体の体積を求めよ」
V=41.jpgであるから、図12(積分2)に示されるように前問と同様に不定積分はOut[4]、定積分はOut[5]となる。
 

(6)DSolve:微分方程式を解く
連立も含めた微分方程式を解くには DSolveコマンドが使われる。
例題  I-9 
「(1+x)dy/dx=xy を初期条件x=0、y=1のもとに解け」
変数分離形と呼ばれる代表的な問題で図13(微分方程式)のOut[6]に答が得られる。




7. グラフィックス表示
(1)Plot
Plot[Sin[x],{x.-2Pi,2Pi}]は正弦波SinXをー2πから2πまで作図する(図14 Plot)。
オプションでFrame->True]と設定すると図14(Plot)のように枠が描き込まれ、GridLines->Automaticとすると自動的に方眼を描く。オプションを記述するにはHelpメニューでPlotを選択した画面で左下のOption項目を選択してペーストすればよい。


(2)ListPlot
本連載講座の第5回「表計算とグラフ」でカオスのシミュレーションを取り上げたが、同じことをMathematicaでも実行できる。図5cの例はMathematicaでは図15(カオス)のようになる。

(3)ParametricPlot
おなじみのリサージュ図形の例を図16(リサージュ図形)に示す

(4)Plot3D
図17(Plot3D)は実際はカラー表示されている。Lighting->Falseでグレイ階層表示、Lighting->Trueでカラー表示される。
 
ViewPointはActionメニューのPrepare Inputから3D Viewoint selector(図18 3D Viewoint selector)を選び、適当な視点を決めてペーストすればオプション入力が簡単にできる。

8. 音声出力
PlayコマンドはMathematicaに音声を発生させる。Play[func,{t,tmin,tmax}]は時間の関数funcをt=tminからt=tmaxの間の音に変換する。図19(うなり)は音の唸りの実験で良く使われる例で、数式で加算されるている。グラフィック画面をダブルクリックすると唸りがスピーカーからループ再生され、セルをダブルクリックすると停止する。セル括弧内のスピーカーアイコンをダブルクリックすれば一回だけ再生される。Play[{f1,f2},{t,tmin,tmax}]とすればステレオ再生もできる。


9.RLC直列回路の過渡特性
図20(RLC直列回路)のRLC直列回路でスイッチSを閉じたときの電流は、微分方程式をi(0)=0、V(0)=100vという初期条件と与えられたR,L,Cの定数のもとで以下の微分方程式を含むプログラムよって解くことができる。
Clear[l,r,c,e]
l:=0.5; c:=2 10^-6;r:=100; e:=100;
DSolve[{i[t]==-c v'[t],
l i'[t]+r i[t]-v[t]==e,
v[0]==0,i[0]==0},
{i[t],v[t]},t]
Plot[Evaluate[i[t] /. %],{t,0.0001,0.04},PlotPoints->40,
PlotRange->All, Frame->True,AxesLabel->{" t(sec)","i(A)"}]

結果は図21(RLC直列回路の過渡現象)のような減衰振動波形となる。
    
                                     (つづく)
                  参考資料

1.「Mathematica 数学の探索」T.W.グレイ/J.グリン著、時田節/藤村行俊訳、アジソンウェスレイ・トッパン
2.「理工系ツールとしてのMathematica 」
R.E.グランドール著、伊藤利明訳、アジソンウェスレイ・トッパン
3.「Mathematicaハンドブック」M.L.アベル/J.P.ブレイセルトン共著、川瀬/五島/佐藤/田沢共訳、東京電機大学出版局
4.神戸大学Mathematicaホームページ(http://bach.seg.kobe-u.ac.jp/mma/index-jp.html)