「Octave入門」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし
(ページの作成:「== Octave入門 == Octave(正確にはGNU Octave)は行列・ベクトルの数値演算を行なうことのできる,コマンドラインインタフェース...」) |
編集の要約なし |
||
1行目: | 1行目: | ||
Octave(正確にはGNU Octave)は行列・ベクトルの数値演算を行なうことのできる,コマンドラインインタフェースを備えたフリーの汎用演算ソフトです.本家webサイトは [[http://www.octave.org/]]です. | Octave(正確にはGNU Octave)は行列・ベクトルの数値演算を行なうことのできる,コマンドラインインタフェースを備えたフリーの汎用演算ソフトです.本家webサイトは [[http://www.octave.org/]]です. | ||
5行目: | 4行目: | ||
Octave自体に組み込まれている関数やコマンドは基本的なものに限られていますが,多くの関数やコマンドを世界中の人が開発し,公開するプロジェクトがあります([[http://octave.sourceforge.net/]]).その成果はoctave-forgeというパッケージとして公開されています(関数一覧は[[http://octave.sourceforge.net/index/index.html]]).研究室のマシンにインストールされているのもoctave-forgeパッケージです. | Octave自体に組み込まれている関数やコマンドは基本的なものに限られていますが,多くの関数やコマンドを世界中の人が開発し,公開するプロジェクトがあります([[http://octave.sourceforge.net/]]).その成果はoctave-forgeというパッケージとして公開されています(関数一覧は[[http://octave.sourceforge.net/index/index.html]]).研究室のマシンにインストールされているのもoctave-forgeパッケージです. | ||
== 基本操作 == | |||
=== 起動と終了 === | |||
起動はWindowsPCならスタートメニューのGNU Octave 2.1.50 を選びます.MacOS XやlinuxなどPC-unix系のシステムなら,ターミナルを開いてoctaveとタイプすればいいです.起動するとターミナルが開き,コマンドを受け付ける状態になります.終了はexitとタイプします. | 起動はWindowsPCならスタートメニューのGNU Octave 2.1.50 を選びます.MacOS XやlinuxなどPC-unix系のシステムなら,ターミナルを開いてoctaveとタイプすればいいです.起動するとターミナルが開き,コマンドを受け付ける状態になります.終了はexitとタイプします. | ||
=== ヘルプ === | |||
Octave上で関数やコマンドのヘルプを表示するには, | Octave上で関数やコマンドのヘルプを表示するには, | ||
24行目: | 23行目: | ||
とすると,キーワード(関数名など何でも良い)に関連した説明が表示されます. | とすると,キーワード(関数名など何でも良い)に関連した説明が表示されます. | ||
=== カレント・ディレクトリ === | |||
Octaveを起動して開くウィンドウにコマンドを打ち込んでいけば利用はできますが,結果をファイルとして残したり,実験データなとを読み込む場合にはディレクトリを意識する必要があります.今現在自分が作業しているディレクトリをカレント・ディレクトリと呼びます.unix系のOSならすでに各自のホーム・ディレクトリで作業し始めているので,問題は少ないですが,Windowsの場合は注意が必要です. | Octaveを起動して開くウィンドウにコマンドを打ち込んでいけば利用はできますが,結果をファイルとして残したり,実験データなとを読み込む場合にはディレクトリを意識する必要があります.今現在自分が作業しているディレクトリをカレント・ディレクトリと呼びます.unix系のOSならすでに各自のホーム・ディレクトリで作業し始めているので,問題は少ないですが,Windowsの場合は注意が必要です. | ||
39行目: | 38行目: | ||
== 基本数値・算術コマンド == | |||
=== 数値,ベクトル・行列の表現の仕方 === | |||
Octave上でスカラー定数は, | Octave上でスカラー定数は, | ||
57行目: | 56行目: | ||
のように入力します.要素は実数や複素数,後述の変数(数式)でも構いません.また,要素の区切りはスペース以外にカンマ(, )でも大丈夫です.行列はベクトルをセミコロン(; )で改行しながら入力するというイメージです. | のように入力します.要素は実数や複素数,後述の変数(数式)でも構いません.また,要素の区切りはスペース以外にカンマ(, )でも大丈夫です.行列はベクトルをセミコロン(; )で改行しながら入力するというイメージです. | ||
== 変数 == | |||
Octave上では,実数,複素数,行列,ベクトルの区別なく変数に格納することができます.変数名は英文字で始まる英数字の文字列で,大文字小文字の区別をします. | Octave上では,実数,複素数,行列,ベクトルの区別なく変数に格納することができます.変数名は英文字で始まる英数字の文字列で,大文字小文字の区別をします. | ||
79行目: | 78行目: | ||
のように,特定の変数だけをクリアすることもできます. | のように,特定の変数だけをクリアすることもできます. | ||
=== コマンドライン上での入力と表示 === | |||
基本的に数値やコマンド・関数をタイプしてenterを押せば,入力されて実行されます.標準状態では結果がすぐ表示されますが,表示させないようにすることもできます.一番簡単な方法は行の最後にセミコロン(; )をつけることです. | 基本的に数値やコマンド・関数をタイプしてenterを押せば,入力されて実行されます.標準状態では結果がすぐ表示されますが,表示させないようにすることもできます.一番簡単な方法は行の最後にセミコロン(; )をつけることです. | ||
88行目: | 87行目: | ||
>> a =[1 2 3]; | >> a =[1 2 3]; | ||
=== 四則演算,超越関数 === | |||
四則演算は実数,複素数,行列,ベクトルおよびそれらを内容とする変数に対して実行可能です.ただし,行列,ベクトルの除算は以下のような意味となります. | 四則演算は実数,複素数,行列,ベクトルおよびそれらを内容とする変数に対して実行可能です.ただし,行列,ベクトルの除算は以下のような意味となります. | ||
116行目: | 115行目: | ||
== 行列・ベクトルの操作 == | |||
=== 要素,行,列,小行列の取り出し === | |||
行列およびベクトル内の特定の要素を取り出すには,変数名とカッコを用いて次のようにします. | 行列およびベクトル内の特定の要素を取り出すには,変数名とカッコを用いて次のようにします. | ||
139行目: | 138行目: | ||
=== 行列の結合 === | |||
複数の行列やベクトルをまとめて一つの行列にすることができます.ただし,対応する行数や列数は合わせておく必要があります. | 複数の行列やベクトルをまとめて一つの行列にすることができます.ただし,対応する行数や列数は合わせておく必要があります. | ||
151行目: | 150行目: | ||
4 8 | 4 8 | ||
=== 転置行列 === | |||
行列やベクトルの転置はシングルコーテーション(' )を使います. | 行列やベクトルの転置はシングルコーテーション(' )を使います. | ||
160行目: | 159行目: | ||
2 4 | 2 4 | ||
=== 特定の数列からなるベクトルの作成 === | |||
Octaveの関数では,シミュレーションの時間軸やボード線図の周波数軸などをベクトルで与えることになります.そのときは,以下の関数を用いると便利です. | Octaveの関数では,シミュレーションの時間軸やボード線図の周波数軸などをベクトルで与えることになります.そのときは,以下の関数を用いると便利です. | ||
175行目: | 174行目: | ||
== 数値表示のフォーマット == | |||
演算結果や変数の内容を表示する桁数を指定できます.標準では5桁の数値で表示されます.これでは桁数がすくなすぎるとか,指数表示をしてもらいたい時はコマンドformatを使います. | 演算結果や変数の内容を表示する桁数を指定できます.標準では5桁の数値で表示されます.これでは桁数がすくなすぎるとか,指数表示をしてもらいたい時はコマンドformatを使います. | ||
191行目: | 190行目: | ||
== グラフ == | |||
Octaveではグラフ機能はgnuplotを呼び出して利用しているので,細かなコントロールにはgnuplotのコマンドを理解する必要があります.しかし,octave-forgeのパッケージにはMATLABとの互換性を高めるため,グラフ関連のコマンドが多く追加されていて(例えばgridなど),だいぶ使いやすくなっています. | Octaveではグラフ機能はgnuplotを呼び出して利用しているので,細かなコントロールにはgnuplotのコマンドを理解する必要があります.しかし,octave-forgeのパッケージにはMATLABとの互換性を高めるため,グラフ関連のコマンドが多く追加されていて(例えばgridなど),だいぶ使いやすくなっています. | ||
=== plot関数の基本 === | |||
1次元のベクトルの組を2次元グラフに表現できます.ベクトルXをx軸,Yをy軸としてグラフ化するには,plot(X, Y)とします. | 1次元のベクトルの組を2次元グラフに表現できます.ベクトルXをx軸,Yをy軸としてグラフ化するには,plot(X, Y)とします. | ||
214行目: | 213行目: | ||
=== その他の装飾 === | |||
plot関数でグラフを書いた後,xlabel, ylabel, titile関数で軸ラベルとタイトルをつけることができます. | plot関数でグラフを書いた後,xlabel, ylabel, titile関数で軸ラベルとタイトルをつけることができます. | ||
247行目: | 246行目: | ||
=== 対数グラフ === | |||
plot関数のかわりにsemilogx関数を使うと片対数(x軸だけ対数)のグラフになります.両対数はloglog関数です.線種の指定などはplot関数と同じです | plot関数のかわりにsemilogx関数を使うと片対数(x軸だけ対数)のグラフになります.両対数はloglog関数です.線種の指定などはplot関数と同じです | ||
=== 文書への張り込み === | |||
グラフをTeX文書などに取り込む場合は,EPSファイルとしていったん保存します.print関数を使うことでファイルに出力できます. | グラフをTeX文書などに取り込む場合は,EPSファイルとしていったん保存します.print関数を使うことでファイルに出力できます. | ||
260行目: | 259行目: | ||
== スクリプトファイル == | |||
=== スクリプトファイル(mファイル)とは === | |||
これまでのようにコマンドを1行1行打ち込んでいっても作業はできますが,ある程度まとまった処理や繰り返し試行する処理などは,面倒ですし,間違いも見つかりにくいです.そこで,その一連の作業をmファイルというテキストファイルとして保存しておくと,実行や修正が非常に楽になります. | これまでのようにコマンドを1行1行打ち込んでいっても作業はできますが,ある程度まとまった処理や繰り返し試行する処理などは,面倒ですし,間違いも見つかりにくいです.そこで,その一連の作業をmファイルというテキストファイルとして保存しておくと,実行や修正が非常に楽になります. | ||
=== mファイルの作成と実行 === | |||
mファイルはただのテキストファイルですから,メモ帳など使い慣れたエディタで作成・編集できます.保存する場所は自分のホームディレクトリ以下の適当なところとします. | mファイルはただのテキストファイルですから,メモ帳など使い慣れたエディタで作成・編集できます.保存する場所は自分のホームディレクトリ以下の適当なところとします. | ||
ファイル名は変数名と同じく数字で始まらない英数字とし,拡張子は.mとします.実行はファイル名から.mを抜いた部分を入力すればいいです.カレント・ディレクトリにその名前のファイルがあれば実行されます. | ファイル名は変数名と同じく数字で始まらない英数字とし,拡張子は.mとします.実行はファイル名から.mを抜いた部分を入力すればいいです.カレント・ディレクトリにその名前のファイルがあれば実行されます. | ||
=== path === | |||
自作のmファイルをあるディレクトリにまとめておき,カレント・ディレクトリがどこであっても,そのmファイルを実行できるようにすることができます.汎用性の高い関数やツールを作り,将来にわたり使いたい場合に便利です. | 自作のmファイルをあるディレクトリにまとめておき,カレント・ディレクトリがどこであっても,そのmファイルを実行できるようにすることができます.汎用性の高い関数やツールを作り,将来にわたり使いたい場合に便利です. | ||
284行目: | 283行目: | ||
== 制御系解析・設計コマンド類 == | |||
=== システムの表現 === | |||
Octave上では,システムは伝達関数表現(分子分母それぞれの係数を降べきの順に並べた2つのベクトルの組),状態空間表現(4つの行列の組),システム行列表現(1つの行列で表現)のいずれかで表現できます.しかし,後述する解析や設計の関数はシステム行列表現を引数としてとるので,その他の表現で与えられた物をシステム行列表現に変換する必要があります.変換を行う関数はtf()です(古いバージョンのoctaveの場合はtf2sys). | Octave上では,システムは伝達関数表現(分子分母それぞれの係数を降べきの順に並べた2つのベクトルの組),状態空間表現(4つの行列の組),システム行列表現(1つの行列で表現)のいずれかで表現できます.しかし,後述する解析や設計の関数はシステム行列表現を引数としてとるので,その他の表現で与えられた物をシステム行列表現に変換する必要があります.変換を行う関数はtf()です(古いバージョンのoctaveの場合はtf2sys). | ||
296行目: | 295行目: | ||
=== 周波数応答の計算 === | |||
代表例としてボード線図を書いてみます.関数はbodeを利用します. | 代表例としてボード線図を書いてみます.関数はbodeを利用します. | ||
316行目: | 315行目: | ||
== データファイルの取り扱い == | |||
=== 全変数の保存と復元 === | |||
一旦Octaveを終了して次回続きをやりたいときなど,変数の内容をとっておきたいことがあります.スクリプトファイルとして作業手順を保存することはできますが,時間のかかる計算が必要な場合その度に計算し直すのも面倒です. | 一旦Octaveを終了して次回続きをやりたいときなど,変数の内容をとっておきたいことがあります.スクリプトファイルとして作業手順を保存することはできますが,時間のかかる計算が必要な場合その度に計算し直すのも面倒です. | ||
345行目: | 344行目: | ||
のように-forceオプションをつけます. | のように-forceオプションをつけます. | ||
=== 指定した変数だけの保存と復元 === | |||
すべての変数を保存する必要がない場合や,一つのファイルに保存してある複数の変数のうちのいくつかだけを復元したい場合もあります.そのような場合,saveやloadコマンドでファイル名の後に変数名を羅列します. | すべての変数を保存する必要がない場合や,一つのファイルに保存してある複数の変数のうちのいくつかだけを復元したい場合もあります.そのような場合,saveやloadコマンドでファイル名の後に変数名を羅列します. | ||
355行目: | 354行目: | ||
できます.なお,先と同様にloadコマンドではファイルの形式は自動的に判別されるので,オプションは通常不要です. | できます.なお,先と同様にloadコマンドではファイルの形式は自動的に判別されるので,オプションは通常不要です. | ||
=== タブまたはスペース区切りのテキストデータの読み込み === | |||
実験結果をOctaveで処理したりグラフ化する場合,実験用のプログラム(通常はC言語などで自作するでしょう)側はOctaveに渡したいデータをテキスト形式のファイルとして保存するのが簡単です. | 実験結果をOctaveで処理したりグラフ化する場合,実験用のプログラム(通常はC言語などで自作するでしょう)側はOctaveに渡したいデータをテキスト形式のファイルとして保存するのが簡単です. | ||
383行目: | 382行目: | ||
>> y = result(:,3); | >> y = result(:,3); | ||
=== 他のアプリケーション向けのテキストデータ書き出し === | |||
Octaveでのシミュレーションや解析の結果を他のアプリケーション(例えばExcelなどのスプレッドシートやIgorやNGraphといったグラフ化ソフトなど)に渡したい時はテキストファイルとして書き出します.ただし,save -ascii 変数名 変数名 ...で保存できるOctave固有のフォーマットのファイルをそのまま読み込めるとは限らないので,以下のような工夫が必要です. | Octaveでのシミュレーションや解析の結果を他のアプリケーション(例えばExcelなどのスプレッドシートやIgorやNGraphといったグラフ化ソフトなど)に渡したい時はテキストファイルとして書き出します.ただし,save -ascii 変数名 変数名 ...で保存できるOctave固有のフォーマットのファイルをそのまま読み込めるとは限らないので,以下のような工夫が必要です. | ||
412行目: | 411行目: | ||
== Octaveスクリプトのいろいろ == | |||
=== キーボード入力,画面への出力 === | |||
スクリプト実行中にキーボードから数値や文字列を入力させるにはinput命令を使います.同時にメッセージとして表示させる文字列を指定することができます. | スクリプト実行中にキーボードから数値や文字列を入力させるにはinput命令を使います.同時にメッセージとして表示させる文字列を指定することができます. | ||
423行目: | 422行目: | ||
printf("a = %g\n",a); | printf("a = %g\n",a); | ||
=== 条件判定 === | |||
条件判定にはC言語と同じくif命令が利用できます.ただし,C言語のように括弧で条件式は囲みません.また,中括弧({ })は使用せず,endifでif命令の範囲を指定します.さらに,C言語ではelseとifを分けて書きますが,Octaveではelseifと続けて書きます. | 条件判定にはC言語と同じくif命令が利用できます.ただし,C言語のように括弧で条件式は囲みません.また,中括弧({ })は使用せず,endifでif命令の範囲を指定します.さらに,C言語ではelseとifを分けて書きますが,Octaveではelseifと続けて書きます. | ||
436行目: | 435行目: | ||
endif | endif | ||
=== 繰り返し === | |||
==== while命令 ==== | |||
while命令は条件が成り立っている間,命令群を繰り返します.やはり中括弧は用いずに,命令群の終わりはendwhileで指定します.なお,中断は\break命令です. | while命令は条件が成り立っている間,命令群を繰り返します.やはり中括弧は用いずに,命令群の終わりはendwhileで指定します.なお,中断は\break命令です. | ||
454行目: | 453行目: | ||
==== for命令 ==== | |||
for命令はC言語のforを限定的にした感じで,インデックスとする変数の初期値,増分,終値を指定して命令群を繰り返します.命令群の終わりはendfor,中断はbreakなのはwhileと同様です.なお,増分を省略すると1ととられます. | for命令はC言語のforを限定的にした感じで,インデックスとする変数の初期値,増分,終値を指定して命令群を繰り返します.命令群の終わりはendfor,中断はbreakなのはwhileと同様です.なお,増分を省略すると1ととられます. | ||
474行目: | 473行目: | ||
=== ユーザ定義関数 === | |||
スクリプト内でユーザ独自の関数を定義したり,別ファイルで定義したりできます. | スクリプト内でユーザ独自の関数を定義したり,別ファイルで定義したりできます. |