第14回
目標
- 数値計算ソフトの使い方
数値計算ソフトとは
信号処理や制御分野では,行列式,微分方程式,複素数計算など複雑な計算を行う必要がある.人間に代わって複雑な計算を行ってくれるソフトウェアが数値計算ソフトウェアパッケージである.
数値計算ソフトへ入力する数式は,一種のプログラム形式で記述する.数値計算ソフトは,通常のプログラミング言語と同等の命令文(コマンド)を持っており,プログラミング作業をすることができるため,複雑な計算処理を記述するのに使用できる.このコマンド群は,C言語やJava言語と同等の,数値計算が得意なプログラミング言語の一種と考えることもできる.
簡単な二次方程式を解く場合でも,コンピュータに計算させる場合,計算に使用できる桁数が限定されるため,単純に解の方程式にしたがって計算した答えでは計算精度が出ないことがある.例えば,桁落ち,桁あふれという言葉を調べてみよ.こうした計算精度を落とす現象を回避して,計算精度を保った数値解を求めるためには,ニュートン法などの数値計算手法を使用する必要がある.この授業では,こうした数値計算手法が必要であることは理解して欲しいが,その数値計算手法自体を学ぶことが主目的ではないので,詳細には触れない.今回紹介する数値計算ソフトはこうした数値計算手法を用いた数値計算プログラムを記述することができる.
代表的な数値計算ソフトとしては,MathWorks社が市販するMATLABがある.
数値シミュレーションソフト
代表的なMATLABは,通常simulinkと一緒に使用されることが多い.simulinkはMATLAB上で動作するブロック線図作成ツールとブロックのライブラリで構成され,MATLABを使用しての信号処理や制御のためのシミュレーションモデルの作成・実行・結果の解析(グラフ化)を行うことができる.このため,MATLAB上でプログラムを書かなくとも,マウスで適切なライブラリを選択して,ドラッグなどの操作でブロックとブロックをつなぎ,ブロック線図を作成するだけで複雑なシミュレーションを実行することもできる.このSimulinkが非常に強力で,信号処理のためのブロックライブラリや制御のためのブロックライブラリなどがその分野で必須となっている.
しかしながらMATLABとSimulinkは高価なソフトウェアである.幸いな事に類似のフリーソフトウェアが存在する.MATLABと互換性もあるGNU Octaveは,MATLAB用のプログラムをそのまま実行できる可能性も高いソフトウェアである.このためユーザも多いが,残念ながらSimulinkに相当する機能がない.別にもう一つ,MATLABとは互換がないもののSimulink相当のXcosを搭載したScilabがある.ScilabはMATLABとは互換性がないものの,同じ機能を搭載するためにプログラム言語としては基本的にMATLABと同じ考え方で記述できるようになっており,単に命令文で使われるキーワードなどが異なるだけで,MATLAB用のプログラムを少し書き換えればScilabで動かすことができる.
簡単なScilabの使い方
起動方法
「アプリケーション」→「科学」→「Scilab」
通常の数字だけの計算式の計算
Scilabの場合,計算式を入力すれば即座に答えが表示される.演算はMaximaなどと同様,+-*/などの演算子を利用できる.分数を入力しても小数で答えを計算し,Maximaと異なり分数として処理はしない.
-->1/3 ans = 0.3333333
変数を使った計算式
Scilabでもxやyなどといった変数を扱うことができる.しかしMaximaとは異なり,方程式として扱うのではなく,変数を含んだ計算式として扱われる.これは,式を入力しても式を整理することはなく,ただプログラムされた式をその通りに計算するだけであることを意味する.
変数を扱うには,普通に代入すればよい.
-->x=100 x = 100. -->1/x ans = 0.01
行列
x=0:0.1:2*%pi; plot2d(sin(x)):-> A = [1 0 0; -1 2 0; 0 -3 -1] // 3行3列の行列の定義 A = 1. 0. 0. - 1. 2. 0. 0. - 3. - 1.グラフの書き方
データファイルの扱い
行列をデータファイルから読み込むことができる.データファイルは空白を区切りとして数字を並べるだけ.
1 2 3 4 5 6 ... --> data = read ('data.txt', -1, 3);実行状態の保存と再開
作業途中の状態(使用していた変数など全部)を,保存することができる.ファイル名の拡張子はなんでもよい.
--> save work.sci;後日その状態を復帰させるにはloadを使用する.
--> load work.sci;Scilabのプログラム保存
実行状態ではなく,何度も使用するような一連のコマンド(Scilabのプログラム)をテキストファイルから読み込んで実行することもできる.
--> exec('graph.scip')この例でのgraph.scipには,何かscilabのコマンドが書き込まれているものとする.読み込むファイルの拡張子はなんでもよい.
Xcosの使い方
使い方例などは下記参照.