変数 a に数値 1 を入力するには
--> a=1とし,リターンキーを押せば良い.実行結果が
-->a=1
a =
1.
と表示される.
ここで=は数式の
行末にセミコロン ; をつけると実行結果は表示されない.
-->a=1; -->
一行に複数のコマンドを書くときはコンマ , かセミコロンで区切る.
つぎの例のように,コンマの場合は実行結果が表示され,セミコロンの場合は
実行結果は表示されない.
-->a=1,b=2,c=a+b
a =
1.
b =
2.
c =
3.
-->a=1;b=2;c=a+b;
-->
変数の値を表示するときは変数名を入力する.
-->c
c =
3.
上の例では c = が表示されている.
変数 c の値だけを表示したい場合は
関数 dispを用いて
-->disp(c)
3.
とする.
...を用いる.
-->a=(1+2+3+4+5+6+7+8+9+10 ...
-->)/2
a =
27.5
% ', ' _ ',
'# ', ' ! ', ' $', ' ? ' で始める.二文字目以降は文字,
数字または ' _ ',' # ', ' ! ', ' $ ', ' ? 'の文字を用い
る.大文字と小文字は区別される.したがって変数 a と変数 A
は異なる変数である.なお,名前の字数は任意であるが,
Scilab は初めの24文字のみを解釈する.
一般に,ユーザが定義する変数をユーザ変数,既に定義されている
変数をシステム変数という.Scilab システム変数である定義済み変数(定数)
名は,通常,% ではじまる.
定義済み変数を表 1に示す.
補足:数式では
であれば
であるが,
計算機には誤差があるので 1+x=1となるxが存在する.
このxの最大値%epsが計算機の計算精度となる.
% で始まらない特殊変数に変数ansがある.
変数ans は特別な変数で,つぎのように値が代入されなかった直前の計
算結果を記憶している.
-->1+2;
-->ans
ans =
3.
複素数を定義するには %iを用いる.
を数式における虚数単位とする.変数 a に
を代入するには
-->a=3 + 2*%i
a =
3. + 2.i
とすればよい.
スカラー変数の基本的な算術演算を表2にまとめる.
(表2以外にも多くの算術演算が提供されている.)
演算の評価順序は数式と同様である.
-->2+3*5
ans =
17.
通常の数式のように() を利用することで,式を組合せることができる.
このときより内側の()が先に評価される.
-->2^(1+2)
ans =
8.
したがって,演算順序を明示したい場合も() を利用すればよい.
-->(2+3)*5
ans =
25.
Scilabは複数のデータの集りをひとつの行列(あるいは配列)として扱うことが できる.2次元行列を例に行列の定義と操作方法を述べる.ベクトルは2次元行列の 特別な場合として容易に理解できる.2次元以上の多次元行列も利用できるが, 説明は省略する.
行列の定義は[で始まり,]で終る.
各行の要素はカンマ(または空白)により分けられる.
また,セミコロンと改行は行の終りを示す.
つぎの行列
-->A=[1,2,3;4,5,6;7,8,9] A = ! 1. 2. 3. ! ! 4. 5. 6. ! ! 7. 8. 9. !あるいは
-->A=[1 2 3 -->4 5 6 -->7 8 9] A = ! 1. 2. 3. ! ! 4. 5. 6. ! ! 7. 8. 9. !で定義できる.
-->v=[1 +3]
v =
! 1. 3. !
-->w=[1 + 3]
w =
! 1. 3. !
-->w=[1+ 3]
w =
4.
-->u=[1, + 8- 7]
u =
! 1. 1. !
行列
の
要素は,A(m,n) で指定することができる.
-->A(1,2)
ans =
2.
行や列にm:nを指定すると
番目の行(列)から
番目の行(列)の範
囲を指定することになる.たとえば,A の2列の1行と2行の取り出
すには
-->A(1:2,2) ans = ! 2. ! ! 5. !とする.同様に,2行の2列と2列は
-->A(2,2:3) ans = ! 5. 6. !で取り出せる.
コロンだけを行あるいは列の指定に用いた場合,全ての行あるいは全ての列を
指定することになる.
A の1列と2行を指定するには,それぞれ
-->A(:,1) ans = ! 1. ! ! 4. ! ! 7. ! -->A(2,:) ans = ! 4. 5. 6. !とすればよい.
$ は行列の最後の要素を示す特殊記号である.
したがって,A($)は,つぎのように行列 Aの最後の要素となる.
-->disp(A($))
9.
初期値
,最終値
で一定値
毎に要素が変化するベクトルは,
x:d:y で定義できる.
--> v=5:-.5:3 v = ! 5. 4.5 4. 3.5 3. !なお,増分
A のサイズを求める.
-->size(A) ans = ! 3. 3. !size(A,'r'),size(A,'c')はそれぞれ 行列
A の行数,列数を返す.
-->length(A)
ans =
9.
size(A,'*')も同様に行列 A の要素数を与える.
A が実数値行列のとき,A' は行列 A
の転置行列を与える.
行列 A が複素行列の場合は,A' は行列
A の複素共役転置行列を与
える.複素行列Aの複素共役はconj(A)で,転置はA.'で求
めることができる.以下に例を与える.
-->z=[1+%i,1-%i] z = ! 1. + i 1. - i ! -->z' ans = ! 1. - i ! ! 1. + i ! -->conj(z) ans = ! 1. - i 1. + i ! -->z.' ans = ! 1. + i ! ! 1. - i !
-->X=[1,2;3,4];y=[5,6];z=10; -->B=[X,y';y,z] B = ! 1. 2. 5. ! ! 3. 4. 6. ! ! 5. 6. 10. !とすれば良い.
つぎの例は行列 B の1行と2行からなる
行列C を
作成し,行列Cのサイズを
に変換した行列Dを求めている.
-->C=B(1:2,:) C = ! 1. 2. 5. ! ! 3. 4. 6. ! -->D=matrix(C,3,2) D = ! 1. 4. ! ! 3. 5. ! ! 2. 6. !
行列の行や列を消去しサイズを小さくするには空行列 [] を用いればよい.たとえば行列 B の2行を消去
するには
-->B(2,:)=[] B = ! 1. 2. 5. ! ! 5. 6. 10. !とする.
ones にベクトルの引数を与えるとそれと同じ次元で要素が全て1の行列が 作成される.一方,zeros にベクトルの引数を与えるとそれと同じ次元で要素が全て0の行列が 作成される.
--> ones(1:4) ans = ! 1. 1. 1. 1. ! -->zeros(1:5) ans = ! 0. 0. 0. 0. 0. !onesあるいはzerosの引数が行列の場合, その行列と同じサイズで要素が 1 あるいは 0 の行列が求まる.
--> v=[1 5 6] v = ! 1. 5. 6. ! --> ones(v) ans = ! 1. 1. 1. ! --> ones(v') ans = ! 1. ! ! 1. ! ! 1. ! -->zeros(v) ans = ! 0. 0. 0. !
eyeは引数が ベクトルのとき引数と同じ次元の単位行列を, 引数が行列のときその行列と同じ次元の単位行列を求める.
-->eye(2,2) ans = ! 1. 0. ! ! 0. 1. ! -->eye(ones(2,2)) ans = ! 1. 0. ! ! 0. 1. !
diagは引数がベクトルの場合, 引数ベクトルを対角に持つ対角行列が生成する.引数が行列の場合, 引数行列の対角成分を抜き出す.
-->diag([1,2]) ans = ! 1. 0. ! ! 0. 2. ! -->A=[1,2,3;4,5,6;7,8,9];diag(A) ans = ! 1. ! ! 5. ! ! 9. !
B の値を設定したい場合
editvarを用いて
-->editvar B Please wait...とすると,図 5のGUIエディタ Edit Var が起動する. 一番左の数字は行番号,一番上の数字が列番号を示している. 修正したい要素へマウスあるいはカーソルキーで移動し値を代入したのち, Update to Scilab をクリックすると修正が終了する. Quit をクリックするとVariable Browserが終了する.
who_userにより一覧が出力される.
-->who_user User variables are: B z y X a help editvar browsevar startup_path modelica_libs using 2180 elements out of 4984500
-->clear a z -->who_user User variables are: B y X help editvar browsevar startup_path modelica_libs using 2166 elements out of 4984504
注意:変数の並びを省略し単にclear とすると全ての ユーザ変数が消去されるので注意すること.
ユーザ変数の一覧は GUI のVariable Browser でも見ることができる. browsevarを用いて
-->browsevar() --> Please wait...とすると,図 6の Variable Browser が起動する. 変数を選択し左下のアイコンの一番左をクリックすると Edit Var が起動する. 左から2番目のアイコンを指定すると変数が消去される. 左から3番目のアイコンは Scilabシェルと同期するために使用する. 左から4番目のアイコンは,Variable Browser の動作を規定するオプションを 指定できる.
save('ファイル名')
とする.このとき指定したファイルに変数がセーブされる.
特定の変数だけをセーブしたい場合は
save('ファイル名',変数1,...,変数N)
とする.
load('ファイル名')
ファイルにある特定の変数だけをロードしたい場合は
load('ファイル名','変数1',...,'変数N')
とする.save と異なり変数をクォーテーションで囲まなければならない.
以下にセーブとロードのプログラム例を与える.
-->clear
-->a=eye(2,2);b=ones(a);
-->who_user
User variables are:
b a
using 12 elements out of 4992788
-->save('val.dat',a,b);
-->clear a b
-->who_user
-->load('val.dat','a','b');
-->who_user
User variables are:
b a
using 12 elements out of 4992788
セッション記録はdiaryを用いて 以下の書式で行うことができる.
diary('ファイル名')
セッション記録を中断するには
diary(0)を入力する.
加算,減算,乗算はスカラー変数と同様に,それぞれ演算子+, -, * で求まる.
行列
の逆行列が存在するとき
は A\B で,
は A/B で求めることができる.
つぎの例は
-->A=[1 2;3 4];B=[5 6;7 8]; -->A\B ans = ! - 3. - 4. ! ! 4. 5. ! -->A/B ans = ! 3. - 2. ! ! 2. - 1. !行列
A/b は
行列のスカラー倍はつぎのようにできる.
-->2*A ans = ! 2. 4. ! ! 6. 8. !
行列の羃乗は ^ を利用する.
-->A^2 ans = ! 7. 10. ! ! 15. 22. !
-->rank(A)
ans =
2.
-->det(A)
ans =
- 2.
-->trace(A)
ans =
5.
つぎの正方行列
以下のようにinvを用いて行列の逆行列を求める ことができる.
-->A=[1 2;3 4]; -->inv(A) ans = ! - 2. 1. ! ! 1.5 - 0.5 !当然
-->inv(A)*A ans = ! 1. 0. ! ! 0. 1. !が成り立つ.
specで正方行列の固有値計算と固有値分解を 行うことができる.デフォルトでspecは行列の固有値を与える.
-->spec(A) ans = ! 5.3722813 ! ! - 0.3722813 !行列
-->A=[1 2;3 4]; -->[V,D]=spec(A) D = ! 5.3722813 0 ! ! 0 - 0.3722813 ! V = ! 0.4159736 - 0.8245648 ! ! 0.9093767 0.5657675 ! -->V*D/V ans = ! 1. 2. ! ! 3. 4. !
行列の指数を用いて正方行列
の三角関数は
これらの演算は, expm, logm, cosm, sinmで計算することができる.
つぎの例は正方行列
-->P=[2 1;1 2]; -->expm(P) ans = ! 11.401909 8.6836275 ! ! 8.6836275 11.401909 ! -->logm(expm(P)) ans = ! 2. 1. ! ! 1. 2. ! -->cosm(P) ans = ! - 0.2248451 - 0.7651474 ! ! - 0.7651474 - 0.2248451 ! -->sinm(P) ans = ! 0.4912955 - 0.3501755 ! ! - 0.3501755 0.4912955 !
行列
と
が同じサイズのとき要素毎の掛け算を
| (3) |
| (4) |
.\,./で行な
うことができる.-->A=[1 2;3 4];B=[5 6;7 8]; -->A.*B ans = ! 5. 12. ! ! 21. 32. ! -->A.\B ans = ! 5. 3. ! ! 2.3333333 2. ! -->A./B ans = ! 0.2 0.3333333 ! ! 0.4285714 0.5 !同様に行列
.^で求めることができる.
表 2のabs,ceil,floor,round,
real,imagのようにスカラー値に定義される関数を行列に適用し
た場合,要素毎の演算結果が得られる.