Scilabによる数値計算の手引き(2008年度版)

Scilabは科学技術計算用のフリーソフトです。 ネット上に数多くの情報があり、日本語でも多くの情報が簡単に得られます。 このページでは、中嶋研の学生を対象にScilabの利用方法を紹介します。 各自が研究上の必要に応じてプログラミングできる事を目指します。 中嶋研の方で質問や改善案がある方は、電子メール等で随時お知らせ下さい。 昨年度までの古いバージョンはここにあります。

まずはインストール

まずはここをクリックして、各自のコンピュータにScilabをインストールしましょう。 また、私のページでの説明に不足を感じた方は、例えば"Scilab"でググれば、様々な情報が得られるはずです。 勿論、そんな意欲は無いという方は直接私まで聞いてください。 (そもそもネットを用いて自学自習できる方にとってはこのページは不要でしょう。)

最も簡単な使いかた

インストールしたScilabを立ち上げてみましょう。 図のようなウィンドウが現れるはずです。 (細かい表示は違っていても構いません。)
scilabを立ち上げた時の図

図の"-->"の右側には実際には"_"が点滅していると思います。 このような表現はプロンプトと呼ばれていて、キータイプした文字がここに表示されることを示しているだけなのですが、 初心者を焦らせる効果が絶大です。 決して気にしないことです。

ScilabがC言語などのプログラミング言語と異なっているのは、この状態でいきなり計算ができることです。 例えば、ここで1+1とタイプしてみましょう。

--> 1+1
タイプしたら、キーボードのEnterキーを押します。そうすれば
 ans  =

    2. 
と表示されるはずです。どうですか?簡単でしょう?Scilabはこのように電卓代わりになります。計算結果はansという変数に入っています。 ですから、
-->ans*3
 ans  =

    6.  
となります。変数はかなり自由に設定できます。例えば、電荷素量eを計算に使いたければ、
-->e=1.6e-19
 e  =

    1.600D-19  
とすればOKです。これは、eという変数に1.6*10-19という数値を代入するという意味です。 上で、"e-19"とか"D-19"とか書いてありますが、ここのeやDは変数ではなくて、10のナントカ乗を表現する古くからの決まり文句で、同様の意味で電卓ではEが使われていますね。

さて、Scilabでは様々な関数が組み込まれています。ということは、関数電卓にもなるのです。 例えば、

-->sin(30)
 ans  =

  - 0.9880316  
となります。サイン30度は0.5ですよね?そう、この関数は角度をラジアンと認識します。 なので、サイン30度を計算したければ 、ラジアンに換算する必要があります。
-->sin(30/180*%pi)
 ans  =

    0.5
通常、関数電卓では角度を度で入力するか、ラジアンで入力するかは選択できるようになっていますが、Scilabにはそういう機能はありません。 しかし、作る事はできます。
-->deff('[y]=mysin(x)','y=sin(x/180*%pi)') 
これで、度で入力できる正弦関数を定義する事ができました。ここで、%piは円周率の事です。
-->mysin(30)
 ans  =

    0.5
ほら便利でしょ!あまりそうは思えない?確かに関数電卓の使い勝手をここに要求するのは無理がありますね。 ま、もうちょっと付き合って下さい。 Scilabの威力は、ベクトルや行列を簡単に扱える所にあります。 0度から360度までの30度刻みのサインを一度の計算してみましょう。 それには、まず計算したい引数(ひきすうと発音する。ここでは角度の事)を一つのベクトルにするのが便利です。
-->kakudo=[0,30,60,90,120,150,180,210,240,270,300,330,360]
 kakudo  =


         column  1 to 10

    0.    30.    60.    90.    120.    150.    180.    210.    240.    270.

         column 11 to 13

    300.    330.    360.
これで、kakudoという行ベクトルができました。これのサインを計算するのは非常に簡単で、
-->mysin(kakudo)
 ans  =


         column 1 to 8

    0.    0.5    0.8660254    1.    0.8660254    0.5    1.225D-16  - 0.5

         column  9 to 13

  - 0.8660254  - 1.  - 0.8660254  - 0.5  - 2.449D-16
とするだけです。計算結果は引数ベクトルの各要素のサインを計算した結果を要素に持つベクトルになります。 サイン180度と360度がわずかにゼロからずれているのは計算誤差でしょうが気にしない。 もうちょっと格好良くやってみましょう。今度は10度おきに計算するとしましょう。するとベクトルの定義を書くのが面倒ですね。 そこで
-->kakudo=[0:10:360];
とします。 意味は想像できますね。文末のセミコロンは代入結果を表示しないという指示です。37個も結果を表示されてもウットウシイですからね。 サインの計算は
-->seigen=mysin(kakudo);
と書いてみましょう。今度は、計算結果を表示せずにseigenというベクトル変数に代入します。 多数の計算結果をぱっと見る便利な方法はグラフにプロットする事ですね。
-->plot(kakudo, seigen)
これでOKです。グラフが表示されましたか?ちょっとは便利だなと思ってもらえたでしょうか?
plot.gif(8795 byte)

本格的な使用方法

フォルダの指定

さて、先ほど定義したmysinやkakudo,seigenなどの変数はScilabを終了するとメモリーから消えてしまいます。 したがって、もう少し複雑な若しくは大量の計算をしたい場合には別の方法が必要になります。 計算方法(プログラム)や計算結果をファイルに保存する必要があります。 その為にはまず保存先のフォルダを決めておきましょう。 Scilabの上部にある[File]メニューを開くと、[Change Directory]という項目がありますので、これをクリックします。 そうすれば、自分が作ったプログラムや計算結果を保存する基準となるフォルダを指定できます。 その際、日本語を含むフォルダは避けた方がいいでしょう。 フォルダを指定すると例えば私の例だと

-->chdir('C:\Documents and Settings\mk\My Documents\2008\scilab-semi'); 
のように表示されます。 これは、本来プロンプトの後にユーザーが手で入力すべきコマンドをウィンドウズ版のソフトが代行してくれた事をしめしています。 ま、あまり気にする必要はありませんが、chdir(ナンチャラ)と手で入力しても同じだという事です。

変数の保存

フォルダを指定しておけば、例えば以下のコマンドで変数を指定フォルダ内のファイルに保存しておく事ができます。
-->save('hensu',kakudo,seigen)
上の例では、'hensu'というファイルにkakudo、seigenという二つの変数を保存しています。後日再びこのファイルから変数seigenを読み出したいときには
-->load('hensu','seigen')
とすればOKです。実際にはエクセルなどの他のアプリケーションで計算結果を見たい場合が多いでしょうが、その方法は別の機会に説明することにします。

関数の保存方法

関数を保存する一般的な方法は、別ファイルに関数を定義することです。 Scilabの[Editor]というメニューをクリックするとScipadと呼ばれるテキストエディタが開きます。
scipad.gif(8621 byte)
ここに上記のようにしてmysinという関数を定義します。この場合、複数行に関数を記述できるので、複雑な関数を定義する事ができます。 [File]メニューの[Save as]から'mysin.sci'というファイル名で保存してください。 そうすれば、
-->getf('mysin.sci')
によって、この関数の定義を後日呼び出すことが可能になります。

プログラミングを書く方法

より複雑な事がしたい場合にはプログラミングする必要があります。 例えば、角度を定義して、サインを計算して、グラフにプロットするという一連の作業をプログラミングしてみましょう。 先ほどの同じようにScipadを開きます。 すでに開いている人は[File]の[New]を実行しましょう。そして以下の様に入力して、保存します。

seigen_sce.gif(9600 byte)
このプログラムを実行する方法はscipadの[Execute]メニューの[Load into Scilab]を実行する事です。 Scilabの[File]の[Exec]から呼び出すことも出来ます。 先ほどの同様にグラフが表示されたでしょうか?

これから

Scilabの素晴らしさは、様々なツールボックスを利用する事でもっと明らかになっていきます。 以降では、主にoptimization and simulationというツールボックスの利用方法を紹介していく予定です。 これによって、化学反応による化学種の量の時間変化や拡散による空間分布を理解したり、実験結果を説明できるようになることを目論んでいます。

[HOME]
[HOME]