76
Scilab 1995 9 4 1

Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

Embed Size (px)

Citation preview

Page 1: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

Scilab 入門

大野修一

1995年 9月 4日

1

Page 2: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

目 次

1 Scilab とは 3

2 Scilab のインストール 4

3 Scilab の使い方の基礎 5

3.1 メニューバー . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.1.1 Demos . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.1.2 Help Browser . . . . . . . . . . . . . . . . . . . . . . . 7

3.2 コマンド行の編集と実行 . . . . . . . . . . . . . . . . . . . . . 93.3 Scilab の終了 . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4 プログラミングの基礎 11

4.1 簡単なプログラミングの例 . . . . . . . . . . . . . . . . . . . . 114.2 コメント行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.3 継続行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.4 変数名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.5 特殊変数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.6 数値表示の変更 . . . . . . . . . . . . . . . . . . . . . . . . . . 134.7 複素数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.8 基本算術演算 . . . . . . . . . . . . . . . . . . . . . . . . . . . 144.9 行列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.9.1 行列要素の指定 . . . . . . . . . . . . . . . . . . . . . . 164.9.2 行列の大きさと要素数 . . . . . . . . . . . . . . . . . . 174.9.3 行列の転置,複素共役 . . . . . . . . . . . . . . . . . . 184.9.4 ブロック行列による定義 . . . . . . . . . . . . . . . . . 194.9.5 行列のサイズの変更 . . . . . . . . . . . . . . . . . . . 194.9.6 組込関数による行列の生成 . . . . . . . . . . . . . . . . 204.9.7 GUI による行列値設定 . . . . . . . . . . . . . . . . . . 22

4.10 変数の一覧と消去 . . . . . . . . . . . . . . . . . . . . . . . . . 224.11 変数のセーブとロード . . . . . . . . . . . . . . . . . . . . . . 234.12 セッション記録 . . . . . . . . . . . . . . . . . . . . . . . . . . 254.13 行列の演算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.13.1 四則演算 . . . . . . . . . . . . . . . . . . . . . . . . . . 254.13.2 スカラー倍 . . . . . . . . . . . . . . . . . . . . . . . . 264.13.3 冪乗 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.13.4 ランク,行列式,トレース . . . . . . . . . . . . . . . . 264.13.5 逆行列,固有値,固有値分解 . . . . . . . . . . . . . . 274.13.6 その他の基本演算 . . . . . . . . . . . . . . . . . . . . . 284.13.7 行列の指数,三角関数,対数 . . . . . . . . . . . . . . 28

2

Page 3: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

4.13.8 要素ごとの演算 . . . . . . . . . . . . . . . . . . . . . . 30

5 プログラミング 32

5.1 比較演算子と論理演算子 . . . . . . . . . . . . . . . . . . . . . 325.2 条件文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5.2.1 if-then-else文 . . . . . . . . . . . . . . . . . . . . . . . 345.2.2 select-case文 . . . . . . . . . . . . . . . . . . . . . . . 35

5.3 ループ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.3.1 for ループ . . . . . . . . . . . . . . . . . . . . . . . . . 365.3.2 while ループ . . . . . . . . . . . . . . . . . . . . . . . 375.3.3 breakと continue . . . . . . . . . . . . . . . . . . . . . 38

5.4 deff による関数定義 . . . . . . . . . . . . . . . . . . . . . . . 39

6 グラフィックス 41

6.1 二次元プロット . . . . . . . . . . . . . . . . . . . . . . . . . . 416.1.1 LineSpec . . . . . . . . . . . . . . . . . . . . . . . . . 426.1.2 タイトルと凡例 . . . . . . . . . . . . . . . . . . . . . . 436.1.3 GUIグラフィックエディタ . . . . . . . . . . . . . . . . 476.1.4 図の出力 . . . . . . . . . . . . . . . . . . . . . . . . . . 51

7 関数 52

7.1 関数の構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527.2 SciPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527.3 関数のロード . . . . . . . . . . . . . . . . . . . . . . . . . . . 537.4 グローバル変数とローカル変数 . . . . . . . . . . . . . . . . . 55

8 多項式と有理式 57

8.1 多項式の定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . 578.2 多項式の根 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588.3 多項式の演算と有理式 . . . . . . . . . . . . . . . . . . . . . . 588.4 有理式の微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . 598.5 多項式と有理式の評価 . . . . . . . . . . . . . . . . . . . . . . 608.6 部分分数展開 . . . . . . . . . . . . . . . . . . . . . . . . . . . 608.7 多項式行列と有理式行列 . . . . . . . . . . . . . . . . . . . . . 618.8 多項式関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

9 線形システム 62

9.1 線形システムの定義 . . . . . . . . . . . . . . . . . . . . . . . 629.1.1 多項式による線形システムの定義 . . . . . . . . . . . . 629.1.2 状態空間表現によるシステムの定義 . . . . . . . . . . . 639.1.3 システム表現の変換 . . . . . . . . . . . . . . . . . . . 64

3

Page 4: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

9.2 線形システムの極ゼロ点表示 . . . . . . . . . . . . . . . . . . . 669.3 線形システムの接続 . . . . . . . . . . . . . . . . . . . . . . . 669.4 線形システムの時間応答 . . . . . . . . . . . . . . . . . . . . . 679.5 ボード線図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

4

Page 5: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

1 Scilab とは

Scilab[1]はフランスの国立研究機関 INRIA(Institut nationale de Rechercheen Informatique et en Automatique)[2]とENPC (Ecole nationale des pontset chaussees)[3] でシステム制御や信号処理向けに開発された数値計算ソフトウェアである.現在は,高機能数値計算ソフトウェアを目指し Scilab Consor-tium が開発を行っている.Scilab はオープンソースでありライセンスにのっとれば自由に配布できる.Scilabは有用な数値計算アルゴリズムの多くを実装しており,それらを組合せることで複雑な計算が可能である.また,プロ

グラミング環境も提供されており,ユーザが独自の数値計算プログラムを作

成することができる.

5

Page 6: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

2 Scilab のインストール

Scilab Consortium のWeb サイト http://scilabsoft.inria.fr/ から,

各種プラットホーム用のバイナリファイルとソースファイルをダウンロード

できる.バイナリファイルであれば上記 Web サイトの指示に従えば簡単にインストールできる.

6

Page 7: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

3 Scilab の使い方の基礎

筆者は主に Linux を使用しているので, Linux 上の Scilab を用いて説明する.Windows 上の Scilab もほぼ同様である.なお,数式と Scilabのコマンドを区別するため,数式はローマン体で, Scilab コマンドをタイプライタ体で記述する.(たとえば,数式 A + B,コマンド A+B.)プログラムメニュー に Scilabが登録されていればそれを指定することで

Scilab が起動する.また,kterm などの端末で scilab とタイプすると (パスが適切に設定されていれば)Scilab が起動する (図 1).

図 1: Scilab 起動画面

3.1 メニューバー

上部にあるメニューバーの概要はつぎのとおりである.

• File

– File Operations: 関数やデータをロードしたり,スクリプトファイルを実行

– Kill: Scilabシェルスクリプトを中断

– Quit: Scilabを終了

• Control

– Resume: 休止状態 pauseからの実行の再開

7

Page 8: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

– Abort: 一回(もしくは複数回)の pauseの後,実行を中断しトッ

プレベルのプロンプトに復帰

– Stop: 実行を中断し pauseモードに入る

• Demos: 対話型としてデモを実行

• Graphic Window : アクティブなグラフィックウィンドウを選択

• Help

– Help Brouser : Help Brouser の起動

– Apropos : キーワード検索後の Help Brouser の起動

– Configure : Help Brouser の選択

• Editor : Editor SciPad の起動 (日本語は使用できない)

図 2: Demos 選択画面

3.1.1 Demos

Scilab でどのようなことができるか Demos を選択し,デモンストレーションを見ることをお勧めする.Demos を選択すると図 2のようにデモの一覧が示される.項目をマウスで選択すると対応するデモが実行される.

8

Page 9: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

3.1.2 Help Browser

Help Brouser を起動すると図 3のようにヘルプの一覧が示される.項目を選択するとその項目に関する一覧が表示される.また,左上の虫眼鏡のアイ

コンをクリックするとヘルプのなかから単語検索を行うことができる.図 4は単語 matrix で検索した結果を示している.

図 3: Help Browser

後述するようにコマンドラインからも Help Brouser を起動することができる.

注意:ヘルプの言語は英語かフランス語だけである.

注意:コマンドのプログラムが変更されているのにヘルプが書換えられてい

ないため,ヘルプの内容が古くなりコマンドがヘルプ通りに動作しないこと

がある.

9

Page 10: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

図 4: Help Browser

10

Page 11: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

3.2 コマンド行の編集と実行

図 1にある Scilab 起動後にでてくる-->が Scilab プロンプトである.プロンプトは入力待ちを意味している.プロンプトのあとにコマンドをタイプす

ることでコマンドを入力することができる.また,カットアンドペーストで

コマンドを入力することもでき,複数コマンドからなるスクリプトファイル

や関数を実行することもできる.

カーソルは方向指示キー (←↑↓→)や CONTROLキーを使って移動できる.

CONTROLキーによるカーソルの移動はUnix における標準エディタであるEmacsに準じている.以下,(Ctrl-<chr>は,CONTROLキーを押しながらキャラクタ<chr>を押すことを意味する).コマンド行の編集に利用できるキー割当てを以下にまとめる.

• Ctrl-p あるいは ↑ ひとつ前の実行済コマンド行を出す

• Ctrl-n あるいは ↓ 次のコマンド行を出す

• Ctrl-b あるいは ← 一文字前に移動する

• Ctrl-f あるいは → 一文字後に移動する

• Delete 前の文字を消す

• Ctrl-h 前の文字を消す

• Ctrl-d 一文字消す (カーソルで)

• Ctrl-a そのラインの先頭に移動する

• Ctrl-e そのラインの後尾に移動する

• Ctrl-k そのラインのカーソルがある位置より後ろを消す

• Ctrl-u 現在の行をキャンセルする

• Ctrl-y 一つ前に消した文を戻す

• !prev prevから始まる最後のコマンド行を呼び出す

• Ctrl-c Scilabを中断し改行後一時停止する.Control/stopボタンをクリックすることは Ctrl-cを入力することと同じである.

Cntrl のつぎの文字はその動作を意味する英単語の頭文字となっている.たとえば p は previous,n は next,b は backward, f は forward に対応している.

以前に実行したコマンドの一部を変更して実行する場合,Ctrl-p (↑) で以前に実行したコマンドを出し,それを修正すればよい.

11

Page 12: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

コマンド行の終りにリターンキーを入力すると,入力したコマンドが実行

される.たとえば,コマンド行に help keyword と入力するとHelp Brouserが起動し keywordに関連する項目を調べることができる.

-->help control

なお,Scilab で利用できる言語は英語とフランス語だけである.通常,英語がデフォルトになっている.

3.3 Scilab の終了

メインメニューの File の quit を選択するか,コマンド行で

-->quit

と入力すると,Scilab が終了する.

12

Page 13: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

4 プログラミングの基礎

4.1 簡単なプログラミングの例

ある値を保持するため変数が用いられる.変数はユーザが定義することがで

きる.変数には保持する内容により数値型,文字型,Boolean 型などがある.変数 a に数値 1 を入力するには

--> a=1

とし,リターンキーを押せば良い.実行結果が

-->a=1

a =

1.

と表示される.ここで=は数式の= と意味が違い,数値 1 を変数 a に代入す

操作を示し,代入演算子と呼ばれる.

行末にセミコロン ; をつけると実行結果は表示されない.

-->a=1;

-->

一行に複数のコマンドを書くときはコンマ , かセミコロンで区切る.つぎ

の例のように,コンマの場合は実行結果が表示され,セミコロンの場合は実

行結果は表示されない.

-->a=1,b=2,c=a+b

a =

1.

b =

2.

c =

3.

-->a=1;b=2;c=a+b;

-->

変数の値を表示するときは変数名を入力する.

13

Page 14: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->c

c =

3.

上の例では c = が表示されている.変数 c の値だけを表示したい場合は関

数 dispを用いて

-->disp(c)

3.

とする.

4.2 コメント行

// で始まるコマンド行は Scilabに解釈されず,コメント行となる.

4.3 継続行

コマンドが長く複数行に継続する場合は,つぎのように ...を用いる.

-->a=(1+2+3+4+5+6+7+8+9+10 ...

-->)/2

a =

27.5

4.4 変数名

変数と関数の名前は文字か特別な記号 ’% ’, ’ _ ’, ’# ’, ’ ! ’, ’ $’, ’ ? ’ で始める.二文字目以降は文字,数字または ’ ’,’ # ’, ’ ! ’, ’ $ ’, ’ ? ’の文字を用いる.大文字と小文字は区別される.したがって変数 a と変数 A は異なる

変数である.なお,名前の字数は任意であるが,Scilab は初めの 24文字のみを解釈する.

4.5 特殊変数

一般に,ユーザが定義する変数をユーザ変数,既に定義されている変数を

システム変数という.Scilab システム変数である定義済み変数 (定数) 名は,通常,% ではじまる.定義済み変数を表 1に示す.

14

Page 15: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

変数 意味

%i 虚数単位√−1

%pi 円周率 π = 3.1415927 · · ·%e ネピア数 (自然対数の底),e = 2.7182818 · · ·%eps 1 + %eps = 1となる最も大きい値

%inf 無限大

%nan 値なし

表 1: 特殊な変数

補足:数式では 1 + x = 1 であれば x = 0 であるが,計算機には誤差があるので 1+x=1となる xが存在する.この xの最大値%epsが計算機の計算精度

となる.

% で始まらない特殊変数に変数 ansがある.変数 ans は特別な変数で,つ

ぎのように値が代入されなかった直前の計算結果を記憶している.

-->1+2;

-->ans

ans =

3.

4.6 数値表示の変更

コマンド format を用いると数値表示の形式が変更ができる.ただ,Scilab3.0 ではヘルプマニュアルどおりに動作しない.

4.7 複素数

複素数を定義するには %iを用いる.j を数式における虚数単位とする.変

数 a に 3 + 2j を代入するには

-->a=3 + 2*%i

a =

3. + 2.i

とすればよい.

15

Page 16: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

4.8 基本算術演算

スカラー変数の基本的な算術演算を表 2にまとめる.(表 2以外にも多くの算術演算が提供されている.) 三角関数の角度の単位はラジアンである.abs

数式 コマンド

a + b a+b

a− b a-b

ab a*b

a/b a/b

ab a^b

abs 絶対値

ceil 小数点以下切上げ

floor 小数点以下切捨て

round 四捨五入

real 実数部

imag 虚数部

sin sin

cos cos

tan tan

log 自然対数

表 2: 基本算術演算

ceil floor round real imag cos sin tan log

演算の評価順序は数式と同様である.

-->2+3*5

ans =

17.

通常の数式のように () を利用することで,式を組合せることができる.このときより内側の ()が先に評価される.

-->2^(1+2)

ans =

8.

したがって,演算順序を明示したい場合も () を利用すればよい.

-->(2+3)*5

16

Page 17: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

ans =

25.

4.9 行列

Scilabは複数のデータの集りをひとつの行列 (あるいは配列)として扱うことができる.2次元行列を例に行列の定義と操作方法を述べる.ベクトルは 2次元行列の特別な場合として容易に理解できる.2次元以上の多次元行列も利用できるが,説明は省略する.

行列の定義は [で始まり,]で終る.各行の要素はカンマ(または空白)に

より分けられる.また,セミコロンと改行は行の終りを示す.

つぎの行列

A =

1 2 34 5 67 8 9

(1)

-->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. !

で定義できる.

空白文字に関する注意

空白文字は行列要素の区切りに用いることができるが,以下の例のような

空白の位置により行列要素の区切りとなる場合とならない場合があるので注

17

Page 18: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

意が必要である.曖昧性を避けたければ区切り文字としてコンマを利用すれ

ばよい.

-->v=[1 +3]

v =

! 1. 3. !

-->w=[1 + 3]

w =

! 1. 3. !

-->w=[1+ 3]

w =

4.

-->u=[1, + 8- 7]

u =

! 1. 1. !

4.9.1 行列要素の指定

行列 A の (m,n) 要素は,A(m,n) で指定することができる.

-->A(1,2)

ans =

2.

行や列に m:nを指定するとm 番目の行 (列)から n 番目の行 (列)の範囲を指定することになる.たとえば,A の 2列の 1行と 2行の取り出すには

-->A(1:2,2)

ans =

! 2. !

! 5. !

とする.同様に,2行の 2列と 2列は

18

Page 19: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->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,最終値 yで一定値 d毎に要素が変化するベクトルは,x:d:y で

定義できる.

--> v=5:-.5:3

v =

! 5. 4.5 4. 3.5 3. !

なお,増分 d の定義がないときの増加単位は 1である.

4.9.2 行列の大きさと要素数

size(A) は行列 A のサイズを求める.

-->size(A)

ans =

19

Page 20: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

! 3. 3. !

size(A,’r’),size(A,’c’)はそれぞれ行列 A の行数,列数を返す.

一方,length(A) は行列 A の要素数を与える.

-->length(A)

ans =

9.

size(A,’*’)も同様に行列 A の要素数を与える.

4.9.3 行列の転置,複素共役

行列 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 !

20

Page 21: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

4.9.4 ブロック行列による定義

複数のベクトルや行列からひとつの行列を定義することもできる.

X =

[1 23 4

], y =

[5 6

], z = 10

から

B =

[X y′

y z

]を作成するには

-->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. !

とすれば良い.

4.9.5 行列のサイズの変更

mn 要素を持つ行列 A をm× n行列に変更するには matrix(A,m,n) とす

る.サイズの変更は列をスタックしたmn× 1ベクトルの m 要素毎が変更後

の行列の列となる.

つぎの例は行列 B の 1行と 2行からなる 2× 3 行列 C を作成し,行列 Cの

サイズを 3× 2に変換した行列 Dを求めている.

-->C=B(1:2,:)

C =

! 1. 2. 5. !

! 3. 4. 6. !

-->D=matrix(C,3,2)

D =

! 1. 4. !

! 3. 5. !

! 2. 6. !

21

Page 22: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

行列の行や列を消去しサイズを小さくするには空行列 [] を用いればよい.

たとえば行列 B の 2行を消去するには

-->B(2,:)=[]

B =

! 1. 2. 5. !

! 5. 6. 10. !

とする.

4.9.6 組込関数による行列の生成

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’)

22

Page 23: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

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. !

23

Page 24: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

4.9.7 GUI による行列値設定

Scilabでは定義済みの行列などの値をGUIで設定することができる.(行列のサイズは変更できない.) たとえば行列 B の値を設定したい場合 editvar

を用いて

-->editvar B

Please wait...

とすると,図 5のGUIエディタ Edit Var が起動する.一番左の数字は行番号,一番上の数字が列番号を示している.修正したい要素へマウスあるいは

カーソルキーで移動し値を代入したのち,Update to Scilab をクリックすると修正が終了する.Quit をクリックすると Variable Browserが終了する.

図 5: Edit Var

4.10 変数の一覧と消去

利用している変数の一覧は whoで調べることができる.つぎのように,定

義済みのユーザ変数は 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 変数の並びとすると変数が消去される.

24

Page 25: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->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の動作を規定するオプションを指定できる.

図 6: Variable Browser

4.11 変数のセーブとロード

Scilab の変数をファイルにセーブしておくと,作業を中断し Scilab を終了した後,ファイルの内容をロードすることで作業を再開することができる.

25

Page 26: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

変数のセーブは saveを用いて

save(’ファイル名’)

とする.このとき指定したファイルに変数がセーブされる.特定の変数だけ

をセーブしたい場合は

save(’ファイル名’,変数 1,...,変数 N)

とする.

一方,変数のロードは loadにより,つぎのように行う.

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

26

Page 27: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

4.12 セッション記録

Scilab のセッション,複数のコマンド実行とそれら結果,をテキストファイルに記録することができる.このセッション記録は後の作業,データ編集

やプログラミング等,に利用することができる.

セッション記録は diaryを用いて以下の書式で行うことができる.

diary(’ファイル名’)

セッション記録を中断するには

diary(0)

を入力する.

4.13 行列の演算

本節では数値行列の演算について述べる.演算に用いる行列,演算子,関

数は,(ふたつの行列の和であれば,ふたつの行列が同じサイズであるなど),当然,数式として意味があるものでなければならない.

4.13.1 四則演算

加算,減算,乗算はスカラー変数と同様に,それぞれ演算子+, -, * で求まる.

行列 A の逆行列が存在するとき A−1B は A\B で,BA−1 は A/B で求め

ることができる.つぎの例は

A =

[1 23 4

], B =

[5 67 8

](2)

に対し,A−1B と BA−1 を計算している.

-->A=[1 2;3 4];B=[5 6;7 8];

-->A\B

ans =

! - 3. - 4. !

! 4. 5. !

-->A/B

ans =

27

Page 28: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

! 3. - 2. !

! 2. - 1. !

行列 A の逆行列が存在せず b がベクトルのとき A/b は b−Ac の距離が最小

となる c,つまり,線形方程式 Ac = b の最小二乗解

c = arg minc||b−Ac||2

を与える.ただし,||v|| はベクトルの 2ノルム ||v|| =√

v′ ∗ vを示す.

4.13.2 スカラー倍

行列のスカラー倍はつぎのようにできる.

-->2*A

ans =

! 2. 4. !

! 6. 8. !

4.13.3 冪乗

行列の羃乗は ^ を利用する.

-->A^2

ans =

! 7. 10. !

! 15. 22. !

4.13.4 ランク,行列式,トレース

行列のランク,行列式,トレースは,それぞれ rank,det,traceで求め

ることができる.

-->rank(A)

ans =

2.

28

Page 29: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->det(A)

ans =

- 2.

-->trace(A)

ans =

5.

4.13.5 逆行列,固有値,固有値分解

つぎの正方行列

A =

[1 23 4

]を考える.

以下のように 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 !

29

Page 30: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

行列 A が,固有ベクトルからなる行列 V と対応する固有値を対角成分に持

つ対角行列Dにより

A = V DV −1

と固有値分解できるとする.つぎのように,specの戻り値をふたつ指定する

と,前者に固有ベクトルからなる行列が後者に固有値を対角成分に持つ対角

行列が返される.

-->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. !

4.13.6 その他の基本演算

これまで紹介した数値行列に対する演算とその他の基本演算を表 3をまとめる.なお,表 3以外にも多くの演算関数が準備されているので,ヘルプを参照すること.

4.13.7 行列の指数,三角関数,対数

正方行列 Aの指数は

eA = I + A +12A2 + · · ·

で定義される.また,Aの対数X = log Aは

eX = A

30

Page 31: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

コマンド 意味

+ 加算

- 減算

* 乗算

\ 左からの除算

/ 右からの除算

^ 羃乗

rank ランク

det 行列式

trace トレース

cond 条件数

inv 逆行列

spec 固有値と固有ベクトル

svd 特異値分解

sum 要素の和

sort 要素のソート

max 要素の最大値

min 要素の最小値

表 3: 行列演算

を満す行列として定義される.

行列の指数を用いて正方行列 Aの三角関数は

cos(A) =12

(ejA + e−jA

)sin(A) =

12

(ejA − e−jA

)で定義される.

これらの演算は,expm,logm,cosm,sinmで計算することができる.

つぎの例は正方行列

P =

[2 11 2

]の eP,log(P ),cos(A),sin(A)を計算している.

-->P=[2 1;1 2];

-->expm(P)

ans =

! 11.401909 8.6836275 !

31

Page 32: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

! 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 !

4.13.8 要素ごとの演算

行列 A と B が同じサイズのとき要素毎の掛け算を

C(m,n) = A(m,n) ∗B(m,n)

要素毎の左からと右からの割り算を

C(m,n) = B(m,n)/A(m,n) (3)

C(m,n) = A(m,n)/B(m,n) (4)

で定義する.以下のように,これらの計算は演算子 .*,.\,./で行なうこと

ができる.

-->A=[1 2;3 4];B=[5 6;7 8];

-->A.*B

ans =

! 5. 12. !

! 21. 32. !

32

Page 33: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->A.\B

ans =

! 5. 3. !

! 2.3333333 2. !

-->A./B

ans =

! 0.2 0.3333333 !

! 0.4285714 0.5 !

同様に行列 A の要素毎の羃乗は演算子 .^で求めることができる.表 2 のabs,ceil,floor,round,real,imagのようにスカラー値に定義される

関数を行列に適用した場合,要素毎の演算結果が得られる.

33

Page 34: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

== 等しい

< より小さい

> より大きい

<= 以上

>= 以下

<> or ~= 等しくない

表 4: 比較演算子

& 論理積

| 論理和

~ 論理否定

表 5: 論理演算子

5 プログラミング

Scilabは条件文,場合分け,ループを含むプログラム環境を提供しており,ユーザは Scilabの関数などを用いてスクリプトや関数を作成し,実行することができる.本節では,Scilabのプログラミングにおける基本を説明する.

5.1 比較演算子と論理演算子

Scilabではデータオブジェクトの値の比較を行うための 5つの比較演算子を利用できる.表 4に比較演算子とその意味を示している.比較演算子は論理式を記述するために使われる.

一般に,論理式が成立するとき値を真 (True),成立しないとき偽 (False)とする.このように真偽の 2値をとる型を Boolean 型という.Scilab では真の値は %t, 偽の値は %fである.つぎのように,画面にはそれぞれ T ,F と表示される.

-->1 < 2

ans =

T

-->1 > 2

ans =

F

34

Page 35: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

コマンドへの入力は%t(あるいは%T)と%f (あるいは%F)を用いる.

-->a=%t

a =

T

なお,%tと%fは数値としては 1 と 0 となる.

-->2*%t

ans =

2.

論理演算子,&,|,~を用いるとより複雑な論理式を書くことができる.&

は論理積であり a&b において aと bが T のときのみ T でそれ以外は Fとなる.|は論理和で a| b において aと bのいずれかが T とき Tで,両方 Fのとき Fとなる.~ は論理否定で, ~aにおいて a が T なら F,a が F なら Tとなる (表 5).たとえば

-->(1 < 2) & (3 > 4)

ans =

F

-->(1 < 2) | (3 > 4)

ans =

T

となる.

演算子の演算順序の決まりを優先順位という.比較演算子は論理演算子よ

り優先順位が高いので (1 < 2) & (3 > 4) は 1 < 2 & 3 > 4 と等価であ

る.しかし,曖昧性を避け () で演算順序を明示するほうがよい.^,*,/,\,+,-の算術演算子は,比較演算子,論理演算子より優先順位

が高く,算術演算子どおしの演算順序は数式と同じである.

つぎのように論理積は論理和より優先順位が高い.

-->1|1&0

ans =

T

(1&0 が先に評価され 0, つぎに 1|0 が評価され 0となる.)論理演算子のなかで,論理否定が最も高い優先順位を持つ.

35

Page 36: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->~ 1 & 0

ans =

F

-->~ (1 & 0)

ans =

T

最も優先順位が低い演算子は変数に値を代入する代入演算子=である.表 6に主な演算子の優先順序を示す.

^ 高

*,/,\ ↑+,-

比較演算子

~

&

| ↓= 低

表 6: 優先順位

5.2 条件文

Scilabには二つの形式の条件文,if-then-elseと select-caseが存在する.

5.2.1 if-then-else文

if-then-elseは 3つ書式を持つ.つぎの書式の場合,式を評価し,もし真なら thenと endの間のコマンド

を実行する.

if 式 then

コマンド

end

なお,コマンドは複数行であってもよい.

つぎの書式であれば,式が真であれば thenと elseの間のコマンドを実行

し,偽なら elseと endの間のコマンドを実行する.

36

Page 37: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

if 式 then

コマンド

else

コマンド

end

つぎの書式は elseif以外は上の書式と同じである.elseifの後にある式を

評価し,もし真ならつぎの elseif(または else)までのコマンドを実行する.

if 式 then

コマンド

elseif 式 then

コマンド

elseif 式 then

コマンド

else

コマンド

end

以下に if 文のプログラム例を与える.

--> x=1;

--> if x>0 then,y=-x,else,y=x,end

y =

- 1.

--> x=-1;

--> if x>0 then,y=-x,else,y=x,end

y =

- 1.

5.2.2 select-case文

select-case文はつぎの書式を持つ.

switch 式

case 値

コマンド

case 値

37

Page 38: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

コマンド

else

コマンド

end

式を case の後ろにある値と比較し,等しくなる最初の場合の命令を実行する.どの条件にも当てはまらない場合は else以下の命令を実行する.

つぎのプログラムは変数 nの値を用いて処理の場合分けを行っている.

-->n=round(2*rand(1,1));

-->select n

-->case 0 then

-->result=’win’;

-->case 1 then

-->result=’draw’;

-->else

-->result=’loss’;

-->end

-->result

result =

draw

ここで,randは 0から1までの一様変数を発生するので,n=round(2*rand(1,1))は約 1/4 の確率で 0または 2,約 1/2 の確率で 1 となる.

5.3 ループ

Scilabでは二つのタイプのループ (繰り返し),forループと whileループ

が利用できる.

5.3.1 for ループ

forループはつぎの書式を持つ.

for 制御変数 = 制御変数に値を代入するベクトル do

コマンド

end

38

Page 39: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

ただし,doは省略できる.

forループは,ベクトルのはじめ要素を制御変数に代入し,doから endま

でのコマンドを実行する.つぎに,ベクトルの 2番目の要素を制御変数に代入し,doから endまでのコマンドを実行する.この操作をベクトルの値の最

後の要素まで繰り返す.したがって,(ループを途中で抜けない限り)繰り返しの回数は length(制御変数に値を代入するベクトル) となる.

以下に forループの例を挙げる.

--> x=1;for k=1:4,x=x*k,end

x =

1.

x =

2.

x =

6.

x =

24.

5.3.2 while ループ

whileループは以下の書式を持ち条件式を満たす限り doから endの間の

コマンドを繰り返し実行する.

while 条件式 do

コマンド

end

なお,doは省略可能である.

つぎの例は x<14 が成り立つ限り x=2*x の計算を繰り返している.

--> x=1; while x<14,x=2*x,end

x =

2.

x =

4.

x =

39

Page 40: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

8.

x =

16.

5.3.3 breakと continue

forループや whileループからは breakコマンドで抜け出せる.通常,if文を利用しある条件が成立した場合ループを抜けることが多い.

以下の例ではループのなかの if文が成立したときループを終了している.

-->a=0;for i=1:5:100,a=a+1;if i > 10 then break,end; end

-->a

a =

3.

複数のループがあるとき break は一番外側のループから抜け,一番外側の

ループのつぎに制御を移す.

一方,continueは continue以降のループ内のコマンドをスキップしその

ループの始めに制御を戻す.つぎの例ではループのなかの条件式が成立した

とき,k の表示をスキップしループの始めに実行が移している.

-->for k=1:10;if k>2&k<=8 then disp(’hello’),continue,end,k,end

k =

1.

k =

2.

hello

hello

hello

hello

40

Page 41: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

hello

hello

k =

9.

k =

10.

5.4 deff による関数定義

Scilab では deff を用いてユーザが関数をオンライン定義できる.deffの

書式はつぎのとおりである.

deff(’[出力変数の並び]=関数名 (入力変数の並び)’,’コマンド’)

複数行コマンドを書きたい場合は

deff(’[出力変数の並び]=関数名 (入力変数の並び)’,[’コマンド’;’コ

マンド’])

のように,複数の ’コマンド’(文字列)からなる行列 (配列)を使用する.たとえば y = x2 はつぎのように定義できる.

-->deff(’y=mysquared(x)’,’y=x^2’)

つぎのように,deffを用いて作成した関数は Scilab 標準関数と同様に利用することができる.

-->mysquared(1:5)

ans =

! 1. 4. 9. 16. 25. !

複素数 z を極座標 (r, θ)(z = rejθ)に変換する関数

-->deff(’[r,t]=mypolar(z)’,[’r=abs(z)’;’t=atan(real(z)/imag(z))’])

を定義すると,つぎのように実行できる.

-->[r,t]=mypolar(1+%i)

t =

41

Page 42: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

0.7853982

r =

1.4142136

deff は比較的短い行数の関数を定義するのに便利である.長い行数の関数

は,通常,ファイルに記述する.ファイルを用いた関数義は 7 節で述べる.

42

Page 43: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

6 グラフィックス

Scilabは作図のため数多くのコマンドがあり,そのため使いづらい面もあった.Scilab 3.1 以降では matlab R©の作図コマンドと似たコマンドが導入されるとともに GUI で図を編集できることになり,より使い易い環境を提供している.ここでは,二次元プロット用の関数 plot を中心に説明を行う.

6.1 二次元プロット

plotで基本的な二次元の図を作成することができる.plotの書式は

plot(y,<LineSpec>,<GlobalProperty>)

plot(x,y,<LineSpec>,<GlobalProperty>)

plot(x1,y1,<LineSpec1>,xN,yN,<LineSpecN>,<GlobalProperty1>,..<GlobalPropertyN>)

である.<LineSpec>,<GlobalProperty> はオプションである.x,y ともに実数ベクトルあるいは実数行列である.

y がベクトル (行列)のとき plot(y) は 1:size(y,’*’) に対する y の (各列ベクトルの)値をプロットする.

-->y=0:2:10;

-->plot(y);

とすれば図 7が描画される.

0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.00

1

2

3

4

5

6

7

8

9

10

図 7:

43

Page 44: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

作図した図を clfで消去しなければ,次の図が上書きされる.

-->clf()

図 8は以下を実行した結果を示している.

-->plot(eye(3,3))

0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.00.0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1.0

図 8:

x と y がベクトル (行列)のとき x の (列の)要素に対応する y の (列の)要素をプロットする.このとき x と yは同じ行数を持っていなければならない.図 9はつぎを実行して得られた図である.

-->x=[0:0.1:2*%pi]’;

-->clf()

-->plot(x,sin(x))

6.1.1 LineSpec

オプション LineSpecによりプロットの線の種類,色,マークの形状を指定することができる.表 7,表 8,表 9 にそれぞれの識別子をまとめている.指定したい 3つの識別子を組合せ,クォーテーションでまとめる.なお,識別子の順序は任意である.つぎのように ’--r*’ とすれば,赤い破線で*つきの

グラフとなる (図 10).

44

Page 45: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

0 1 2 3 4 5 6 7−1.0

−0.8

−0.6

−0.4

−0.2

0.0

0.2

0.4

0.6

0.8

1.0

図 9:

識別子 線の種類

-

-- 破線

: 点線

-. 破点線

表 7: 線の種類

-->clf()

-->plot(x,sin(x),’--ro’)

6.1.2 タイトルと凡例

xtitle

xtitle(’図のタイトル’,’X 軸のタイトル’,’Y 軸のタイトル’)

とすることで,図のタイトル,X 軸のタイトル,Y 軸のタイトルを描くことができる.

凡例は legend

legend([’文字列 1’;...;’文字列 N’],位置)

45

Page 46: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

識別子 色

r 赤

g 緑

b 青

c シアン

m マジェンタ

y 黄色

k 黒

w 白

表 8: 色の種類

で描くことができる.ここで n 番目の文字列は n 番目に描かれた曲線に対応

している.凡例の出力位置は 1から 5までの数字で指定する.表 10に数値と位置の対応関係を示している.

タイトルと凡例を付加するプログラム例を以下に示す.

-->clf();

-->t=0:%pi/20:2*%pi;

-->plot(t,sin(t),’ro-.’,t,cos(t),’b+’,t,abs(sin(t)),’--mo’);

-->xtitle(’Figure’,’Time’, ’Amplitude’);

-->legend([’sin(t)’;’cos(t)’;’|sin(t)|’],3);

46

Page 47: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

識別子 形

+ +

o ◦* *

. .

x x

s �d ♦^ Mv O> B< Cp ?

表 9: マーカの種類

数値 位置

1 右上 (デフォルト)

2 左上

3 左下

4 右下

5 マウスで任意の位置を指定

表 10: 凡例の位置

47

Page 48: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

0 1 2 3 4 5 6 7−1.0

−0.8

−0.6

−0.4

−0.2

0.0

0.2

0.4

0.6

0.8

1.0

図 10:

Figure

Time

Amplitude

0 1 2 3 4 5 6 7−1.0

−0.8

−0.6

−0.4

−0.2

0.0

0.2

0.4

0.6

0.8

1.0

sin(t)

cos(t)

|sin(t)|

図 11:

48

Page 49: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

6.1.3 GUIグラフィックエディタ

グラフはオブジェクトとして構成されておりオブジェクトの各要素をコマ

ンドラインで指定することで,グラフの体裁を変更することができる.また,

Scilab 3.1 以降では,グラフの属性を GUIで修正・変更することができる.図 12のグラフィックウィンドウにおいて,Edit の Figure Properties を選択すると図 13のような画面が現われ,変更したい項目を選ぶことができる.

図 12:

この例では,Axes(2)を選択すると図 13のウィンドウが出てくる.X Axisでは,Label 名,Visibility (表示の有無),Color (色),Size (文字のサイズ),Font style 等が変更できる.

GUIグラフィックエディタを用いて図 11のタイトルを修正したものが図15である.

49

Page 50: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

図 13:

50

Page 51: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

図 14:

51

Page 52: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

Figure

Time

Amplitude

0 1 2 3 4 5 6 7−1.0

−0.8

−0.6

−0.4

−0.2

0.0

0.2

0.4

0.6

0.8

1.0

sin(t)

cos(t)

|sin(t)|

図 15:

52

Page 53: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

6.1.4 図の出力

グラフィックウィンドウの Fileを選択すると,Clear,Select,Print,Export,Save,Load,Close の項目がある (図 16).Clear は図を消去するのに対し,Close はグラフィックウィンドウを閉じる.

Print は (プリンタが適切に設定されていれば)図をプリンタに出力する.Export は図を PostScript形式や Xfig 形式で出力する.Exportを選択すると図 16のようにウィンドウが出る.LATEXファイルに図を貼り付けたい場合は,Postscript-Latex を選択し,Type,Orientation,Fileneme を設定しOk を選択する.なお,出力されたファイルの拡張子は eps である.

Saveは図 (の作成手順)を Scilabの特殊形式のファイルにセーブする.セーブしたファイルを Load すると,セーブされた図が再描画される.

図 16:

53

Page 54: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

7 関数

Deff により関数を定義できることは既に述べた.本節では,ファイルに関数を記述し,それを実行する方法を紹介する.条件分岐,ループ,Scilab標準関数等を用いた長い関数は,Deffよりファイルを利用したほうが都合がよい.ファイルはエディタを用いて作成する.Scilab にはエディタ SciPad が附属している.SciPadではなく他のエディタを利用してもよい.作成した関数は Scilab にロードすることで (関数に誤りがなければ) Scilab 標準関数と同じように使用することができる.

7.1 関数の構造

関数の構造は以下の形式に従わなければならない.

function [y1,...,yn]=foo(x1,...,xm)

.

.

.

endfunction

ここで fooは関数名で,x1,...xmは関数のm個の入力引数,y1,...ynは

関数からの n個の出力引数である.縦のドットは関数で実行されるコマンド

のリストを表している.出力引数がひとつの場合,は

function y=foo(x1,...,xm)

.

.

.

endfunction

と書ける.

7.2 SciPad

メインウィンドウの Editor を選択するか,コマンドラインで

-->scipad

と入力すると Scilab附属エディタ SciPad が起動する (図 17).つぎの k!を計算する関数を入力してみる.

54

Page 55: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

図 17: SciPad

function [x]=fact(k)

k=int(k)

if k<1 then k=1,end

x=1;

for j=1:k,x=x*j;end

endfunction

SciPad のカーソル移動はコマンドラインの場合と同じである.プログラムを間違いなく入力できたらファイルにセーブする.メニューバー

の File の Save を選択するか Ctrl-s とするとファイルセーブの画面が現われる.ファイルの新規作成の場合,関数名と同じファイル名がデフォルトとな

る.ファイル名は関数名と同じである必要はないが,同じであるほうが間違

いが少なくなる.

ファイルの拡張子 sci が自動的に設定されている.Scilab 関数の拡張子はsci でなければならない.したがって,SciPad 以外のエディタを利用する場合,拡張子を sci にすることを忘れてはならない.図 18 に示すように SciPad は通常必要となるファイル操作機能を提供している.

7.3 関数のロード

作成した関数を Scilab で利用するには関数を Scilabにロードしなければならない.

55

Page 56: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

図 18: SciPad

関数が fact.sciと言う名前のファイルにあるとする.この関数をロード

するには次のようにすればよい.

SciPad での関数のロードはメニューバーの Execute の Load into Scilabを指定するか,Ctrl-l とする.ファイルを変更しその変更を Scilab に反映するには,ファイルをセーブし再度関数をロードしなければならない.(同じ関数名を持つ関数をロードすると最新の関数が有効となる.)関数はコマンドラインからもロードできる.コマンドラインからのロード

は,主に,SciPad 以外のエディタを利用しているときに使用する.コマンドラインからのロードの書式は

exec(’ファイルへのパス/ファイル名.sci’,-1)

あるいは

getf(’ファイルへのパス/ファイル名.sci’)

である.ここでファイルが Scilabを起動したディレクトリにある場合や適切に設定された Scilab のパス変数に含まれるディレクトリにある場合は,ファイルへのパス/ は省略できる.

以下に関数のロード例を示す.ここで exists(’名前’) はその名前の変数

や関数が存在すれば 1,存在しなければ 0 を返す関数である.

--> exists(’fact’)

ans =

0.

56

Page 57: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

--> exec(’../macros/fact.sci’,-1);

--> exists(’fact’)

ans =

1.

--> x=fact(5)

x =

120.

上の Scilabセッションのはじめのコマンド existsで factがないというこ

とがわかる.相対パス ../macros/ にあるファイル fact.sci が関数が exec

によりロードされる.つぎに,existsにより factがロードされていること

を確認し,関数 factを実行している.

7.4 グローバル変数とローカル変数

関数では関数を呼び出す環境と同じ変数名を持つ変数を定義することがで

きる.同じ変数名であっても,関数内の変数と関数を呼び出す環境の変数は

異なる実体を持つ.そのため,関数内の変数を変更しても関数を呼び出す環

境の変数は変化しない.

関数内で入力パラメータにない変数が定義されておらず,呼び出した環境

で同じ名前をもつ変数がある場合の値をとる.(resume を使用しない場合)関数内での変数の変更は呼び出した環境の変数を変更しないという意味でロー

カルを保つ.この特徴から,関数は入力や出力パラメータなしでも使用でき

る.例を用いてこの性質を説明する.

function [y1,y2]=f(x1,x2)

y1=x1+x2

y2=x1-x2

endfunction

この関数に入力引数,出力引数を与えると以下のようになる.

-->[y1,y2]=f(1,1)

y2 =

0.

y1 =

2.

57

Page 58: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

関数の出力引数は 2個あるがそれを指定しない場合,はじめの引数のみが出力される.

-->f(1,1)

ans =

2.

入力引数をひとつだけ指定,呼出し環境で x2 が定義されていない場合つぎ

のようにエラーとなる.

-->f(1)

y1=x1+x2;

!--error 4

undefined variable : x2

at line 2 of function f

呼出し環境で x2 を定義すると以下のように実行できる.

-->x2=1;

-->[y1,y2]=f(1)

y2 =

0.

y1 =

2.

-->f(1)

ans =

2.

58

Page 59: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

8 多項式と有理式

Scilabでは記号変数 (シンボル変数)を用いて多項式と有理式を定義できる.また,多項式と有理式の演算が可能である.

8.1 多項式の定義

多項式の定義は poly を使用する.polyによる多項式は,根による定義,

係数による定義,行列の特性方程式による定義がある.はじめのふたつの書

式は

poly(多項式の根からなるベクトル, ’記号変数’)

poly(多項式の係数からなるベクトル, ’記号変数’,’coeff’)

である.なお,多項式係数ベクトルは多項式の低次の係数から順に並べる.

記号変数を x とし,多項式 2− 3x + x2 = (x− 1)(x− 2) を定義してみよう.根が 1,2 であるので,根による多項式の定義は

-->p1=poly([1 2],’x’)

p1 =

2

2 - 3x + x

となる.一方,多項式の係数による定義は

-->p1=poly([2 -3 1],’x’,’coeff’)

p1 =

2

2 - 3x + x

である.

poly の引数が行列の場合の書式は

poly(行列, ’記号変数’)

である.このとき引数で与えた行列の記号変数に関する特性方程式を与える.

以下の例は特性方程式 |xI −A| を求めている.

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

A =

! 1. 2. !

59

Page 60: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

! 3. 4. !

-->p2=poly(A,’x’)

ans =

2

- 2 - 5x + x

8.2 多項式の根

多項式の根は roots で計算できる.

-->roots(p1)

ans =

! 1. !

! 2. !

8.3 多項式の演算と有理式

記号変数を

-->x=poly(0,’x’)

で定義する.この定義以降は変数 x は記号変数として扱われる.記号変数と

通常の四則演算子を用いて多項式を定義することもできる.たとえば,多項

式 1 + 2x は

-->p3=1+2*x

p3 =

1 + 2x

で定義できる.

多項式と多項式の加算,減算,乗算,除算は通常の演算と同様に定義されて

いる.たとえば,つぎのように多項式を多項式で割ると有理式が定義できる.

-->q=p3/p1

q =

1 + 2x

----------

2

2 - 3x + x

60

Page 61: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

このとき qは有理式 q = (1 + 2x)/(2− 3x + x2) となる.なお,つぎの例のように,有理式はデフォルトで約分される.

-->q=(x-1)/p1

q =

1

-----

- 2 + x

数式と違い計算機には数値誤差がある.この誤差のため様々な問題が発生す

る.たとえば有理式の分母の根が 1 で分子の根が 1.000001 のとき約分すべきであろうか.どの程度で同じであれば約分するのかは simpで定義できる.

詳細は simpペルプを参照すること.

有理式の分母は denomあるいは有理式名 (’den’) で取り出せる.

-->denom(q)

ans =

2

2 - 3x + x

-->q(’den’)

ans =

2

2 - 3x + x

有理式の分子は numerあるいは有理式名 (’num’) で取り出せる.

-->numer(q)

ans =

1 + 2x

-->q(’num’)

ans =

1 + 2x

8.4 有理式の微分

derivatは,多項式や有理式の導関数を返す.

61

Page 62: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->derivat(q)

ans =

- 1

---------

2

4 - 4x + x

8.5 多項式と有理式の評価

hornerは,多項式や有理式に数値,あるいは,多項式・有理式,を代入し

た結果を求める.

-->horner(q,4)

ans =

1.5

-->horner(q,x-1)

ans =

1

-----

- 3 + x

-->horner(q,1/x-1)

ans =

x

-----

1 - 3x

8.6 部分分数展開

pfssは,有理式の部分分数展開を与える.ただし,結果は sの有理式とし

て表示される.

-->x=poly(0,’x’);

-->h=1/(x+1)/(x+2);

62

Page 63: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->pfss(h)

ans =

ans(1)

1

-----

1 + s

ans(2)

- 1

-----

2 + s

8.7 多項式行列と有理式行列

行列の要素を多項式あるいは有理式で定義すると,多項式行列あるいは有

理式行列が定義できる.ほとんどの場合,多項式あるいは有理式と同様の演

算が可能である.

8.8 多項式関数

Scilabは多項式のための多くの関数を持っている.ペルプの項目Polynomial

Calculationsでそれらを調べることができる.

63

Page 64: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

9 線形システム

Scilab では線形時不変システム (以下線形システム)が定義でき,線形システムの演算,評価,設計のための多くの関数が準備されている.本節では,

Scilabにおける線形システムの基本的操作を説明する.詳しくはペルプの項目 Generl System and Controlを参照すること.

9.1 線形システムの定義

線形システムは syslinを用いて定義する.

9.1.1 多項式による線形システムの定義

伝達関数を有理式で表現し線形システムを定義する.伝達関数が有理式 H

の線形システム S1は

S1=syslin(’文字’,H)

で定義される.ここで線形システムが連続時間システムの場合文字に cを,

離散時間システムの場合文字に dを代入する.c は continuous time の d は

discrete time の頭文字に対応している.つぎの伝達関数を持つ連続時間線形システムを考える.

H(s) =1 + 2s

2 + 3s + s2(5)

伝達関数は有理式なので

-->s=poly(0,’s’);

-->H=(1+2*s)/(2+3*s+s^2)

H =

1 + 2s

----------

2

2 + 3s + s

で伝達関数 Hを定義する.ここで Hは有理式であることに注意する.

伝達関数 Hを持つ連続時間線形システム S1は

-->S1=syslin(’c’,H)

S1 =

64

Page 65: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

1 + 2s

----------

2

2 + 3s + s

で定義できる.

線形システムは syslin(’文字’,分子多項式,分母多項式)で定義することもできる.

-->syslin(’c’,1+2*s,2+3*s+s^2)

ans =

1 + 2s

----------

2

2 + 3s + s

有理式と同様に線形システムの分母多項式 (分子多項式) は denom(線形シ

ステム名)あるいは線形システム名 (’num’) (numer(線形システム名)ある

いは線形システム名 (’num’)) で取り出せる.

9.1.2 状態空間表現によるシステムの定義

syslin は,状態空間表現 (A, b, c, d) を用いて線形システムを定義することもできる.状態空間表現

A =

[0 1−1 −2

], b =

[01

], c =

[2 1

], d = 0 (6)

を持つ連続時間線形システムを考えよう.この連続時間線形システムは

-->A=[0 1;-1 -2];b=[0;1];c=[1,1];d=0;

-->S2=syslin(’c’,A,b,c,d)

S2(1) (state-space system:)

!lss A B C D X0 dt !

S2(2) = A matrix =

! 0. 1. !

! - 1. - 2. !

65

Page 66: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

S2(3) = B matrix =

! 0. !

! 1. !

S2(4) = C matrix =

! 1. 1. !

S2(5) = D matrix =

0.

で定義できる.

状態空間表現で定義されたシステム S2 の (A, b, c, d)はコマンド abcd で

-->[A,b,c,d]=abcd(S2)

d =

0.

c =

! 2. 1. !

b =

! 0. !

! 1. !

A =

! 0. 1. !

! - 1. - 2. !

とすると取り出せる.また,S2.A,S2.B,S2.C,S2.D,あるいは,S2(’A’),

S2(’B’),S2(’C’),S2(’D’)とすると,それぞれ A, b, c,d の値を得るこ

とができる.

9.1.3 システム表現の変換

線形システムは伝達関数表現あるいは状態空間表現される.これらふたつ

の表現を互いに変換することができる.

66

Page 67: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

tf2ss は,伝達関数表現された線形システムを状態空間表現の線形システ

ムに変換する.先に伝達関数表現で定義した S1 はつぎのように状態空間表

現の線形システムに変換できる.

-->tf2ss(S1)

ans =

ans(1) (state-space system:)

!lss A B C D X0 dt !

ans(2) = A matrix =

! - 2.8 - 0.6 !

! 2.4 - 0.2 !

ans(3) = B matrix =

! - 1.5491933 !

! 0.7745967 !

ans(4) = C matrix =

! - 1.2909944 - 1.923E-16 !

ans(5) = D matrix =

0.

ここで,伝達関数の次数は分子多項式の次数と等しいか,または大きくなけ

ればならない (つまり,プロパーでなければならない).一方,状態空間表現された線形システムから伝達関数表現の線形システム

は,ss2tf より求めることができる.状態空間表現で定義した S2 はつぎの

ように伝達関数表現の線形システムに変換できる.

-->ss2tf(S2)

ans =

2 + s

---------

67

Page 68: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

2

1 + 2s + s

9.2 線形システムの極ゼロ点表示

ZerosΟ Poles×

transmission zeros and poles

real axis

imag. axis

−2.5 −2.0 −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5−1.5

−1.0

−0.5

0.0

0.5

1.0

1.5

図 19: 極ゼロ点表示

plzr は線形システムの極 (分母多項式の根) とゼロ点 (分子多項式の根) を図示する.図 19は以下のコマンドを実行した結果得られた表示である.

plzr(S1)

ここで極は× でゼロ点 ◦ で示されている.(なお,バグのため左下に Pole とZeros が重なって表示されている.)

9.3 線形システムの接続

定義済みのふたつ以上の線形システムを,演算子 *で直列接続,演算子 +

で並列接続,演算子 /.でフィードバック接続することができる (図 20,図21,図 22).つぎの例は,線形システム S1 と S2を直列接続,並列接続,フィードバッ

ク接続した線形システムを求めている.(スペースを節約するため伝達関数表現で表示している.)

68

Page 69: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-->ss2tf(S1*S2)

ans =

2

1 + 2s - 2.293E-15s

-------------------

2 3

2 + 5s + 4s + s

-->ss2tf(S1+S2)

ans =

3

-----

2 + s

-->ss2tf(S1/.S2)

ans =

2

1 + 3s + 2s

---------------

2 3

3 + 7s + 4s + s

なお,上の 2.293E-15 は数値 2.293 · 10−15 であり計算誤差である.

- S1- S2

-

図 20: 直列接続 S1*S2

9.4 線形システムの時間応答

連続時間線形システムの時間応答は csim で計算できる.csimの書式はつ

ぎのとおりである.

[y [,x]]=csim(u,t,sl,[x0 [,tol]])

69

Page 70: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

-

S1

S2

?

6e+ -

図 21: 並列接続 S1+S2

- e+ S1

S2

-

6

図 22: フィードバック接続 S1/.S2

引数 uは入力ベクトルあるいは文字列 ’impuls’ または ’step’,tは時間範囲

と時間ステップをあらわすベクトル,slがシステムである.文字列 ’impuls’あるいは ’step’を指定した場合,時間 t に対応する線形システムのインパル

ス応答あるいはステップ応答が求まる.x0と tolはオプションでそれぞれ状

態の初期値と誤差に関するベクトルである.戻り値 y が線形システムの出力

である.オプション xは状態ベクトルである.

線形システム S1 に対し.時間刻み 0.1 で時間 tが 0から 4までの,インパルス応答,ステップ応答をプロットするプログラムを以下に示す.

-->t=0:0.1:4;

-->plot(t,csim(’impuls’,t,S1),’ro-.’,t,csim(’step’,t,S1),’--bx’)

-->xtitle(’Response’,’Time’, ’Amplitude’);

-->legend([’impulse’;’step’],1);

つぎのプログラムは線形システム S1 の cos(t) に対する応答を求めプロットしている (図.

-->t=0:0.1:10;

-->u=cos(t);

-->y=csim(u,t,S1);

-->plot(t,y,’ro-.’,t,u,’--bx’)

-->xtitle(’Response’,’Time’, ’Amplitude’);

-->legend([’output’;’imput’],1);

70

Page 71: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

Response

Time

Amplitude

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0−0.2

0.0

0.2

0.4

0.6

0.8

1.0

1.2

1.4

1.6impulse

step

図 23: インパルス応答,ステップ応答

9.5 ボード線図

ボード線図は bodeで描くことができる.

-->clf()

-->bode(S1)

図 25は線形システム S1のボード線図である.

71

Page 72: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

Response

Time

Amplitude

0 1 2 3 4 5 6 7 8 9 10−1.0

−0.8

−0.6

−0.4

−0.2

0.0

0.2

0.4

0.6

0.8

1.0output

imput

図 24: 線形システムの時間応答

Magnitude

Hz

db

−310

−210

−110

010

110

210

310

−70

−60

−50

−40

−30

−20

−10

−0

Phase

Hz

degrees

−310

−210

−110

010

110

210

310

−90

−80

−70

−60

−50

−40

−30

−20

−10

0

10

図 25: ボード線図

72

Page 73: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

参考文献

[1] http://scilabsoft.inria.fr/

[2] http://www.inria.fr/

[3] http://www.enpc.fr/

[4] Claude Gomez (Editor), Engineering and Scientific Computing withScilab, Birkhauser, 1999.

73

Page 74: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

索 引abcd, 48abs, 11ans, 10

bode, 53Boolean, 25break, 29browsevar, 18

ceil, 11clear, 18clf, 31Color, 35continue, 29cos, 11cosm, 23csim, 51

deff, 30Demos, 5denom, 44, 48derivat, 45det, 21diag, 17diary, 20disp, 9

Editor, 39editvar, 17endfunction, 39exec, 41Execute, 41exists, 41expm, 23Export, 38eye, 16

Figure Properties, 35floor, 11

Font style, 35for, 28format, 11function, 39

getf, 41

Help Browser, 6honer, 45

imag, 11inv, 21

Label, 35legend, 33length, 14Load, 38load, 19Load into Scilab, 41logm, 23

matrix, 15

numer, 45, 48

ones, 16

pfss, 46plot, 30plzr, 49poly, 43Print, 38

rand, 28rank, 21real, 11roots, 44round, 11

Save, 38

74

Page 75: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

save, 19SciPad, 39SciPad , 39select-case, 26simp, 44log, 11sin, 11tan, 11sinm, 23Size, 35size, 14spec, 21ss2tf, 49syslin, 47, 48

tf2ss, 49trace, 21

while, 28who_user, 18who, 18

xtitle, 33

zeros, 16

空行列, 16

記号変数, 43行列, 12

の大きさ, 14の逆行列, 21の行列式, 21の固有値, 21の固有値分解, 21のサイズ変更, 15の三角関数, 22の指数, 22の四則演算, 20のスカラー倍, 20の対数, 22転置, 14

のトレース, 21複素共役, 14の冪乗, 21の要素ごとの演算, 24の要素数, 14のランク, 21

グラフィックエディタ, 35

継続行, 10

コマンド行, 8コメント行, 10

最小二乗解, 20

条件文, 26状態空間表現, 48

線形システム, 47のインパルス応答, 51の極, 49の極ゼロ点表示, 49の時間応答, 51の状態ベクトル, 51の初期値, 51のステップ応答, 51のゼロ点, 49の直列接続, 50のフィードバック接続, 50の並列接続, 50

タイトル, 33代入演算子, 9多項式, 43

デモ, 5伝達関数, 47

特殊変数, 10円周率, 10虚数単位, 10計算精度, 10

75

Page 76: Scilab 入門 - scilab 情報ブログ · PDF file目次 1 Scilab とは 3 2 Scilab のインストール 4 3 Scilab の使い方の基礎 5 3.1 メニューバー

ネピア数, 10無限大, 10

凡例, 33

比較演算子, 24

複素数, 11分子多項式, 48分母多項式, 48

ヘルプ, 6変数名, 10

ボード線図, 53

優先順位, 26有理式, 43

の微分, 45の評価, 45の部分分数展開, 46の分子, 45の分母, 44

離散時間システム, 47

ループ, 28

連続時間システム, 47

論理演算子, 25論理式, 24

76