• 検索結果がありません。

Scilab の構文と関数

ドキュメント内 UNIX ( ) (ページ 156-169)

第 9 章 数式処理 / 数値計算ソフトウエア

9.2 Scilab 入門

9.2.6 Scilab の構文と関数

9.2. Scilab入門 139

表9.6: Scilabの演算子 記号 意味

+ 数,ベクトル, 行列の加算 - 数,ベクトル, 行列の減算

* 数,ベクトル, 行列の乗算

/ 数の除算

’ ベクトル,行列の転置

^ 数,正方行列のべき

** 数,正方行列のべき(^と同じ)

定数

Scilabは円周率%pi,虚数単位%iおよびオイラーの数%e(=2.71828...) を定数としてあらかじめ用意して

くれています. ですから,たとえば

%pi

- (9.96)

と入力すると,

%pi =

3.1415927

(9.97)

という出力が得られます.

Scilabの定数をいくつか表9.7にまとめておきます.

表 9.7: Scilabの定数 記号 意味

%pi 円周率

%i 虚数単位

%e オイラーの数

%inf 無限大

%t, %T 真(論理値)

%f, %F 偽(論理値)

代入と比較

MuPADと同じように, Scilabでも代入と比較を区別するために別の記号を使います. ところで, この記

号の使い方は, MuPADとは全然違います. まずこれについて見てみましょう.

Scilabでは,変数に数値を代入するときには記号「=」を使い,数値が等しいかどうかを判定(比較)する

ときには記号「==」を使います.

Scilabで変数に値を代入するときには,

x=10

- (9.98)

などのように,等号の左側に変数名,右側に値(データ)を書きます. 取り扱うことができるデータの種類は, 整数, 実数,複素数,ベクトル,行列などです. 代入文を使うときには, 左辺の変数がどのような種類である かを利用者が気にする必要はありません. Scilabは,右辺に書かれた内容から,左辺の変数がどのような種 類であるかを自動的に判断してくれます.

なお, Scilabで代入を含まない式を評価した場合,結果はansという名前の変数に自動的に代入されます.

変数の値を画面に表示したいときには,その変数名をキーボードから入力します. たとえば,

x

- (9.99)

と入力すると,変数xの値が画面に表示されます.

上に述べたように, 論理的な比較をするときには, 記号==を使います. 論理的な比較をおこなったときの 結果は真(%t;画面にはTと表示される)と偽(%f;画面にはFと表示される)のいずれかです.

ここで,代入と比較の例を見てみましょう. Scilabの主ウィンドウ内で x=1

- (9.100)

x==2 -

と入力してみて下さい. この例では,最初の行は「変数xに値1を代入する」, 2行目は「変数xの値と数2 を比較する」という意味になります. これを実行した結果は,以下のようになります.

-->x=1

x = 1.

-->x==2

ans = F

(9.101)

2番目の比較の式(x==2)が実行された結果は変数ansに代入されるので,実行後には変数ansの内容がF(偽) と表示されています.

論理値については, 入力するときの表記(%t$, \verb画面に表示したときの表記(T,F)が異なることに 注意して下さい. ですから, たとえば変数xに論理値「真」を代入するつもりで

x=T

と入力しても,期待した結果は得られません. このようなことをやりたい場合には, x=%t

と入力する必要があります.

計算結果の表示の抑制

Scilabのコマンドをキーボードから打ち込んでゆくとき,行の最後にセミコロン を打つと,行を評価した

結果は画面には表示されません. これに対し, セミコロンを打たなければ, 行を評価した結果が画面に表示 されます.

コメント

Scilabでは,文字「//」で始まる行はコメント とみなされます. コメントとは,おもに人間にとってプロ

グラムを読みやすくする目的で挿入されるいろいろな記述のことです. コメントはプログラム本体では実行 されませんし,計算結果に影響を与えることもありません.

入力行の継続

1行の長さが長すぎるときには,コンマの後に記号「...」を使うと,次の行にコマンド行を継続できます.

9.2. Scilab入門 141 関数, 制御構造など

さらに, Scilabには,各種の数学関数を含むいろいろな関数が用意されています. どのような関数が用意さ れているかについてはマニュアルなどを参照して下さい. また, Scilabはfor文やwhile文, if文などといっ た各種制御構造をサポートしています. これらの意味については現段階では理解できなくても構いません.

9.2.7 線形代数の例題

では,いくつかの例題を通してScilabの簡単な使い方を学んでゆきましょう. なお,以下の例では小さい 行列のみを扱いますが, Scilabは非常に大きな行列(1000行くらいのものでも)も何の問題もなく扱えるこ とを注意しておきます.

行列やベクトルの定義

まず, 2行2列のAという名前の行列を定義してみます.

A=[1,2;3,4]

- (9.102)

と入力して下さい.

すると,画面には -->A=[1, 2; 3, 4]

A =

! 1. 2. !

! 3. 4. !

(9.103)

という表示が出ます.

上記の操作で定義されるのは, [ 1 2 3 4 ]

という行列です.

なお,今定義した行列Aは,あなたがAという変数の内容を他のもので上書きしてしまわない限り, Scilab を終了するまではずっと残っています. そして,

A

- (9.104)

と入力することで,いつでもAの内容を確認することができます. 試してみて下さい.

ここで, Scilabにおける行列の一般的な記法を説明しておきましょう.

Scilabで行列を定義するときには,

行列全体を角括弧「[ ]」 で囲う

個々の要素をコンマ「,」 あるいは1個以上の半角スペース「 」 で区切る,これらを併用してもよい

1行が終わったところには,セミコロン「;」 を打つか改行を入れる,これらを併用してもよい という規則にしたがいます.

ですから, A=[1 2

- (9.105)

3 4]

-

というように入力しても,上と同じ行列Aを定義することができます.

なお,半角スペースや改行を2個以上連続させて置いた場合にも,これらが1個しかない場合と効果は変 わりません.

横ベクトル(行ベクトル)を定義したいときには,

x=[1,2,3,4]

- (9.106)

などのようにします. 上の例の通り打ち込むと, --> x=[1,2,3,4]

x =

! 1. 2. 3. 4. !

(9.107)

という結果が得られます.

同様に,縦ベクトル(列ベクトル)を定義したいときには, x=[1;2;3;4]

- (9.108)

などのようにします. この例を打ち込むと,結果は -->x=[1;2;3;4]

x =

! 1. !

! 2. !

! 3. !

! 4. !

(9.109)

のようになります. Scilabは横ベクトルと縦ベクトルを区別します.

なお,横ベクトルと1行n列の行列は同じものであり,縦ベクトルとn列1列のの行列は同じものです.

行列やベクトルの加減算と乗算

行列やベクトルの加減算と乗算には,記号+ - *を使います.

まず,縦ベクトルの加算の例を見てみましょう.

x= [

1 2 ]

, y= [

10 20 ]

という2個のベクトルを定義し,これらのベクトルの加算を実行してみましょう.

x=[1;2];

- y=[10;20];

- (9.110)

x+y -

と入力してみて下さい. ここに, 1行目と2行目の行末の「;」はベクトルxとベクトルyの内容を画面に表 示させないようにするために入れてあります.

結果は -->x=[1;2];

-->y=[10;20];

-->x+y ans =

! 11. !

! 22. !

(9.111)

9.2. Scilab入門 143 となります. ベクトルの加算が正しくおこなわれていることが確認できるでしょうか?

次に,行列の減算の例を見てみましょう.

A= [

1 2 3 4 ]

, B=

[ 10 0

0 10 ]

という2個の行列を定義し,これらの行列の減算を実行してみましょう.

このためには, A=[1,2;3,4];

- B=[10,0;0,10];

- (9.112)

A+B - とします.

結果は

-->A=[1,2;3,4];

-->B=[10,0;0,10];

-->A+B ans =

! 11. 2. !

! 3. 14. !

(9.113)

となります. 行列の減算が正しく実行できていることが確認できるでしょうか?

続いて,

C= [

1 2 3 4 5 6 ]

, D=

 1 100 2 200 3 300



という2個の行列を定義し,これらの行列の積C×Dを計算してみましょう.

このためには, C=[1,2,3;4,5,6];

- D=[1,100;2,200;3,300];

- (9.114)

C*D - と入力します.

入力に誤りがなければ,結果は -->C=[1,2,3;4,5,6];

-->D=[1,100;2,200;3,300];

-->C*D ans =

! 14. 1400. !

! 32. 3200. !

(9.115)

のようになるはずです.

ところで,加算,減算,乗算を実行しようとしたとき,行列やベクトルの大きさが合わない場合にはどうな るでしょうか?

例として,

v= [

1 1 ]

, w=

[ 2 2

]

(9.116) という2個の横ベクトルに対し,v×wを計算してみましょう. もちろん,本来この計算はできないはずです.

Scilabのウィンドウで

v=[1,2];

- w=[3,4];

- v*w

-

(9.117)

と入力すると, -->v=[1,2];

-->w=[3,4];

-->v*w

!--error 10

inconsistent multiplication

(9.118)

というエラーメッセージが出ます. このエラーメッセージの意味は, 「形が合わないから掛算ができない」

というようなものです.

ところで, (9.2.7)で定義されたベクトルv,wの内積を計算するにはどうしたらよいでしょうか? このため には, wを転置して縦ベクトルにすればよいです. ベクトルや行列を転置するために, Scilabは演算子「’」

を用意しています. これを使ってみましょう.

(9.2.7)の入力が終わっている状態で, Scilabのウィンドウ内で

v*w’

- (9.119)

と入力してみて下さい. すると,今度は正しく計算ができ, -->v*w’

ans =

11.

(9.120)

という表示が画面にあらわれます.

さいごに, 行列とベクトルの乗算をやってみます.

A= [

1 2 3 4 ]

, x= [

1 1 ]

とし,行列Aとベクトルxの積を計算してみます.

A=[1,2;3,4];

- x=[1;1];

- (9.121)

A*x -

と入力して下さい. 入力に誤りがなければ, -->A=[1,2;3,4];

-->x=[1;1];

-->A*x ans =

! 3. !

! 7. !

(9.122)

という結果が得られます.

9.2. Scilab入門 145 行列やベクトルの次元を知る: size

行列やベクトルの次元を知りたいときには, 関数sizeを使います. 関数size は行列の行の大きさと列の 大きさを要素として持つ2次元のベクトルを値として返します. たとえば, 2行3列の大きさを持つ行列を A=[11,12,13;14,15,16];

- のように定義し,

size(A) - と入力すると,

-->A=[11,12,13;14,15,16];

-->size(A) ans =

! 2. 3. !

(9.123)

のような結果が得られます. 得られた結果はベクトル[23]であり,第1要素が行列Aの行の大きさ,第2要 素が行列Aの列の大きさになっていることが確認できます.

関数sizeは,縦ベクトルをn行1列の行列,横ベクトルを1行n列の行列として取り扱います. ですから, たとえば

x=[11,12,13,14]; (9.124)

- size(x)

-

と入力すると(xは1行4列の行列,すなわち横ベクトル),結果は -->x=[11,12,13,14];

-->size(x) ans =

! 1. 4. !

(9.125)

となりますし, y=[23;24;25];

- (9.126)

size(y) -

と入力すると(xは3行1列の行列,すなわち縦ベクトル),結果は -->y=[23;24;25];

-->size(y) ans =

! 3. 1. !

(9.127)

のようになります.

行列の要素の参照と部分抽出

行列の要素を参照するには, A(1,2)

- (9.128)

のように,行列の名前に続いて( )の中の行列の行の番号と列の番号を順番に指定します. 同様に,ベクトル の要素を参照するには,

x(2)

- (9.129)

のように,ベクトルの名前に続いて( )の中にベクトルの要素の番号(添字)を指定します. 縦ベクトルの場 合にも横ベクトルの場合にも同様の記法が使えます.

記号コロン(「:」)を使うと, いくつかの添字をまとめて指定できます. 記号「:」の使い方は,

初期値:終了値 (9.130)

あるいは

初期値:刻み:終了値 (9.131)

または

: (9.132)

です. なお,「初期値」,「終了値」,「刻み」と書かれた部分には適当な数が入ります. また,記号「:」を 単体で使うと,「考えうる添字すべて」という意味になります.

いくつか例を見てみましょう.

まず,

A=



11 12 13 14 15 21 22 23 24 25 31 32 33 34 35



という行列を定義しておきます. このためには,以下のように入力して下さい.

A=[11,12,13,14,15;

- 21,22,23,24,25;

- (9.133)

31,32,33,34,35];

- A(2,3)

- (9.134)

と入力すると,行列Aの第2行3列の要素が抽出され, -->A(2,3)

ans =

23.

(9.135)

のような出力が得られます.

次に,行列Aの第3行,第2列から4列までを抽出してみましょう.

A(3,2:4)

- (9.136)

と入力してみて下さい. すると, -->A(3,2:4)

ans =

! 32. 33. 34. !

(9.137)

のような出力が得られます.

続いて,行列Aの第2行から3行まで全体を抽出してみましょう. このために,列の方については,「考え うる添字すべて」という意味で,記号「:」を単体で使います.

A(2:3,:)

- (9.138)

ドキュメント内 UNIX ( ) (ページ 156-169)