Octaveの使い方1~インストールから基本的な使用方法

大分大学工学部
菊池武士
Octave の使い方 1
~
インストールから基本的な使用方法
~
大分大学工学部
菊池武士
※この資料は 2013 年 3 月時点の情報を元に,32bit Windows7 の環境で作成しております
のでソフトウェアのバージョン等,各自の環境に合わせて適宜読み替えてください.詳
しい情報は参考図書や Web で調査してください.
1.
Octave とは
Octave とは,MATLAB と互換性を持ったフリーな数値解析ソフトウェアである.GNU
General Public License によって公開されているため,その改変,複製,利用は自由であ
る.Octave は多くの Unix や Unix 互換のプラットフォーム,Mac OS X,Microsoft
Windows で実行できる(Wikipedia より).
なお,MATLAB(マトラボとかマットラブとか呼ばれる)は米 MathWorks 社が開発し
ている配列計算用のソフトウェアである.配列の計算が容易に実現できるだけでなく,様々
な Toolbox によって制御工学等のシミュレーション,設計を実現できるため,多くの大学で
教育・研究用に使用されている.
MATLAB は商用のソフトであるため当然有料である(低価格の Student Version もあるら
しいが).さらに,いくつかの Toolbox を必要に応じて追加購入しなければならない.本稿
では誰でもタダで使えるために Octave の使い方を記す.
Octave で使用する文法はC言語の文法と類似するところが多い.そこで本稿は読者がC
言語の基本的な文法を知っていることを前提に説明する.
2.
Octave のインストール方法
Octave-Forge (http://octave.sourceforge.net/)にアクセスして,各自の環境にあった
Octave Installer をダウンロード・インストールする.
例:Windows
OS の場合
1) Octave-Forge から Windows: installers へ
2) 最新のインストーラを選択
Octave 3.6.2 for Windows MinGW installer
(2013.3 現在)
大分大学工学部
菊池武士
3) ファイルのダウンロード
次の2つのファイル(2013.3 現在)
・Octave3.6.2_gcc4.6.2_20120609.7z
・・・
・Octave3.6.2_gcc4.6.2_pkgs_20120613.7z
メインプログラム
・・・
追加パッケージ
4) インストールディレクトリを作り,ダウンロードしたファイルを移動.
「C:¥Octave」を推奨
※ディレクトリ名に空白文字を含まないこと.日本語を使うことは推奨しない.
5) Octave のメインプログラムを解凍する.
6) 解凍されたファイルの中にショートカットがあるので,デスクトップ等にコピー.
※プログラムの起動ショートカットとドキュメントへのリンクの2つ
7) 環境変数 Path に実行ファイルまでのパスを追加する
※この作業はPCの設定を変更するため自己責任で行ってください.
※すでに入っているパスの後にセミコロンを付けて下記を続ける.
C:¥Octave¥Octave3.6.2_gcc4.6.2¥bin
(数字は実際のバージョンによって変わる)
8) Octave の追加パッケージを解凍する.
9) Octave を起動する(先ほどのショートカットより)
10) パッケージの再構築
Octave-Forge のダウンロードページに記載されている下記のコマンドを Octave のコン
ソールに打ち込み,実行する.(Ver.3.6.2 の場合)
pkg rebuild -auto
pkg rebuild -noauto ad windows
pkg rebuild -noauto nan
pkg rebuild -noauto gsl
pkg rebuild -auto java
※Octave のコンソールにペーストするときは右クリック
11) パッケージの確認
下記のコマンドを実行する.
pkg list
大分大学工学部
※以上の方法は九州大学 大学院システム情報科学研究院
菊池武士
金子邦彦先生のページ
(http://www.kkaneko.com/rinkou/octave/octaveinstall.html)を参考にした.
※以下,Octave の基本的な使用方法に関してまとめるが,それらの情報元は下記である.
帯広畜産大
増田豊先生のページ 「GNU Octave 日本語版マニュアルのダウンロード」
(http://www.obihiro.ac.jp/~suzukim/masuda/)
3.
Octave の起動と終了
1) 起動
→
上記のショートカットより
2) 終了
→
コンソールに quit もしくは exit と打ち込む
※右上の×で終了すると異常終了となる.
4.
Octave のアンインストール
Octave をアンインストールするには,インストールフォルダごと削除して,次に
Windows 環境変数の Octave 関係部分を削除する.環境変数に関しては他の部分を間違っ
て消さないように注意.
5.
Octave の基本操作
Octave の言語処理はインタプリタによって実行される.つまり,命令ごとに逐次処理さ
れる.これを実行する方法としては以下の二つがある.
1) コンソールにコマンドを一行ごと入力し,逐次実行する
2) まとまった命令をファイルに保存しておき,このファイルを読込・実行する.
まず,1)の方法について説明する.
5.1
コンソールの操作
・Octave のコンソール画面ではその最終行に「Octave:1>」のようなプロンプトが表示さ
れている.このすぐ右にコマンドを入力する.
・実行する場合は Enter キーを押す.
・コマンドの履歴はカーソルキーの上下によって呼び出すことができる.
・マウスの右クリックがコピーとペーストに対応している
・プログラムが無限ループ等で暴走した場合は「Ctrl+c」で強制終了する.
・コマンドの使い方を調べる場合は「help (コマンド)」とする.
5.2
四則演算
ほとんど C 言語と同じである.C言語と異なる点として,べき乗として「^」もしくは「**」
大分大学工学部
菊池武士
が使用できる点である.また,余りの演算に%を使用できないため(コメント記号として使
用するため)
,Octave での余りは rem(x,y)を使用する.
5.3
スカラ変数
C言語のように変数の型を明示的に示す必要はない.変数に数値が代入された時に自動
的に型を判断する.以下は実行例である.コマンドプロンプトは簡単のために単に「>」と
記す.コマンドプロンプトがない行は実行(表示)結果である.
> x=1;
%x に 1 を代入
> y=2;
%y に 2 を代入
> x+y
%x+y を実行
ans = 3
例 1 整数の四則演算
「%」から改行まではコメントとして無視される.「;」(セミコロン)のある行の計算結果
は表示されない.
「ans」は答えを格納するために Octave が自動で作成した変数である.変
数の名前と数値はメモリに保存され,それ以後も使用できる.次の例ではまず割り算の答
えを変数 z に入力している(非表示).その後に z の結果を表示する.z は自動的に実数と
して定義される.
> z = x/y; %表示されない
>z
%表示される
z = 0.50000
例 2 実数の四則演算
メモリに保存された変数等の値は「clear」で消去することができる.単に「clear」とする
と定義したすべての変数情報が消去される.特定の変数の情報のみを消去する方法等は
「help clear」とすると教えてくれる.
5.4
ベクトル・行列変数
ベクトルの定義は下記のように[]を使用する.各要素の間はスペースで空ける.配列の各
要素を呼び出すには配列名の後に()を付けて要素番号を指定する.C言語と異なり,初
めの要素番号は 1 である(C言語は 0 だった)
.ベクトル同士の演算はスカラと同様に行う
ことができる.
大分大学工学部
菊池武士
> a = [1 2 3]
a=
1
2
3
> b = [4 5 6];
>b(1)
ans = 4
> a+b
ans =
5
7
9
例 3 ベクトルの演算
例えば 3x3 の行列の定義は下記のとおり,各行をセミコロンで区切る.配列の各要素の
指定は,配列名の後に()をつけ,行番号,カンマ,列番頭で指定する.例えば,指定の
行番号のすべての要素を指定する場合はコロン「:」で指定する.シングルクォーテーショ
ンは転置行列を求める演算記号である.その他,行列に対する多くの演算が用意されてい
る.
> c = [1 2 3; 4 5 6; 7 8 9]
c=
1
2
3
4
5
6
7
8
9
> c(3,3)
ans = 9
> c(3,:)
ans =
7
8
9
> c' %転置行列
ans =
1
4
7
2
5
8
3
6
9
例 4 行列の演算
行列同士の掛け算は前の列数と後の行数が同じでなければならない.乗算記号「*」の前
にピリオドを付けた場合は各要素ごとの掛け算となる.この場合は,行数,列数ともに同
大分大学工学部
菊池武士
じでなければならない.
> d = [1 2 3; 4 5 6];
> e = [1 2; 3 4; 5 6];
>d*e
ans =
22
28
49
64
> d .* d
ans =
6.
1
4
9
16
25
36
例 5 行列の演算 2
Mファイルによるコマンドの実行
6.1
Mファイルの保存
実行させるコマンドの行数が多くなる場合は,コマンドをファイル保存しておき,まと
めて実行させることができる.ファイルはテキスト形式で,Windows の場合はメモ帳,秀
丸,さくらエディタなどを使用して作成する.ただし,ファイルを保存する場合に拡張子
を「.m」とすること.このようなファイルをMファイルと呼ぶ(Matlab のMファイルを踏
襲しているものと思われる).
Mファイルのファイル名は,Octave で一つの関数として処理・実行される.したがって,
ファイル名は半角英数字とアンダーバー「 _ 」のみの組み合わせとし,スペース,ハイフ
ンは使用してはいけない.なぜなら,ファイル名にスペースがある場合,一つの関数とし
て理解してくれないからである.またハイフンがある場合は引き算と間違えられる.
6.2
Octave によるディレクトリ(フォルダ)操作
Octave でMファイルを読み込むためには,Mファイルが存在する場所をカレントディレ
クトリにする必要がある.現在のカレントディレクトリを調べるためには「pwd」コマンド
を実行する.ディレクトリの移動は「cd」コマンドを実行する.DOS,UNIX,Li
nux,Windows のコマンドプロンプトと同じ操作である.Mファイルの先頭にコメント
行で cd コマンドを記述しておくとコピペできて便利である(例 6 参照).
大分大学工学部
菊池武士
% テストプログラム 1
% 作者:菊池
% cd C:¥Octave¥sample
% my_func1
clear; %前回までの設定を消去
x=100;
y=7;
rem(x, y)
6.3
%100/7 の余り
例 6 テストプログラム 1(my_func1.m)
Mファイルの実行
Mファイルを実行するためには,Mファイルが存在するディレクトリに移動し,拡張子
なしのファイル名を呼び出すだけである.上記の例 6 の場合は単に「my_func1」と打ち込
めばよい.
7. 処理の流れの制御
C言語とほとんど同じように,if 文,switch 文,while 文,for 文などが使える.ただし,
C言語のように処理の中身を括弧で閉じることがないので,適切なインデントを付けて処
理の階層が明確になるような工夫が必要である.
下記は for 文を用いて 2 行 100 列の配列に,1行目には角度
(0~2を 100 分割した値),
2行目には対応する sin()の値を代入するサンプルプログラムである.円周率は「pi」で
使用できる.for 文の初めのコロン「:」は範囲を示す演算子であり,いろいろな使用方法
があるので各自調べてほしい.
大分大学工学部
菊池武士
% テストプログラム 2
% 作者:菊池
% cd C:¥Octave¥sample
% my_func2
clear; %前回までの設定を消去
num = 100; % データの分割数
A = zeros(2, num); %すべてゼロの 2x100 行列
for i = 1:num
A(1,i) = 2.0 * pi / num * (i-1); % 角度[rad]
A(2,i) = sin(A(1,i)); % sin
endfor
例 7 テストプログラム 2
(my_func2.m)
8. コマンドラインからの入力
例えば,上記のテストプログラム 2 で分割数「num」をプログラム実行後にキーボード
から入力できるようにするにはどうすればよいだろうか.この場合は input コマンドを使
用する.input コマンドを使用した例を次に示す.input の右の括弧内のダブルクォーテー
ションは表示する文字列を指示できる.
% テストプログラム 3
% 作者:菊池
% cd C:¥Octave¥sample
% my_func3
clear; %前回までの設定を消去
% データの分割数をキーボードから入力
num = input("Please input num: ");
A = zeros(2, num); %すべてゼロの 2x100 行列
for i = 1:num
A(1,i) = 2.0 * pi / num * (i-1); % 角度[rad]
A(2,i) = sin(A(1,i)); % sin
endfor
例 8 テストプログラム 3
(my_func3.m)
大分大学工学部
菊池武士
9. データファイルの入力
Octave では,外部データファイルを入力したり,計算結果を出力ファイルとして保存し
たりすることができる.他のソフト(例えばエクセル等)で演算したデータを読み込んで
Octave でさらに高度な処理をする場合や,Octave で演算した結果を使い慣れたグラフソフ
トで作図する場合には必要な知識である.
外部ファイルの入力には「load」コマンドを使用する.例えば,カレントディレクトリに
ある「data.txt」というテキストファイルを読み込み,プログラムで使用する場合には次の
ようにする.読み込まれたデータは「data」という配列として取り込まれる.
% サンプルデータ
123
456
789
例 8 サンプルデータ(data.txt)
> load data.txt
> data %3x3 の配列として利用できる
>a=data(:,1) %1 列目のみを縦ベクトルで利用
>b=data(2,:) %2 行目のみを横ベクトルで利用
例 9 サンプルデータの読み込み
計算結果を外部ファイルに出力するには以下の二つの方法がある.
(1)「save」コマンド
(2)「fopen()」によるファイルのオープン+「fprintf()」による書式付き書き出し
(1)の方法はコマンドラインが簡単だが細かいフォーマットの指定ができない.(2)の
方法はC言語における fopen- fprintf 関数とほぼ同じである.細かいフォーマット指定がで
きるのでこちらを推奨する.テストプログラム 3 の計算結果を「result.txt」に保存するた
めのテストプログラム 4 を以下に示す.fprintf 関数によるフォーマットの指定方法はC言
語とほとんど同じである.「%%」と二つつなげているところは,%文字を出力するためで
ある.出力フォーマットと出力するデータ配列の列数を一致させる必要がある.場合によ
っては fprintf の前に出力用に配列の整理(転置させたり,複数の配列をくっつけたり)が
必要な場合もある.
大分大学工学部
菊池武士
% テストプログラム 4
% 作者:菊池
% cd C:¥Octave¥sample
% my_func4
clear; %前回までの設定を消去
% データの分割数をキーボードから入力
num = input("Please input num: ");
A = zeros(2, num);
for i = 1:num
A(1,i) = 2.0 * pi / num * (i-1); % 角度[rad]
A(2,i) = sin(A(1,i)); % sin
endfor
%以下,ファイル出力
fid = fopen("result.txt", "w");
fprintf(fid, "%%計算結果¥n");
fprintf(fid, "%6.5f %6.5f ¥n", A);
fclose(fid);
例 10 テストプログラム 4(my_func4.m)
10. グラフの作成
上述のファイル出力で自分の好きなグラフソフトを使用することも可能であるが,
Octave 自体にも多くのグラフィック関数が用意されており,これらを用いることでシミュ
レーション・設計作業を軽減することができる.論文等のためのきれいな作図には外部の
グラフソフトを使用し,シミュレーション結果の逐次的な確認には Octave のグラフィック
関数を使うほうが良いだろう.Octave には例えば伝達関数のボード線図を作図する「bode」
コマンドのように設計理論に必要な作図コマンドが多く用意されている.それらについて
は別で説明するとして,ここではデータ配列からグラフを作図する一般的な方法について
示す.
データ配列をグラフ化するコマンドは「plot」コマンドである.「plot」コマンドを用い
てテストプログラム 3 の計算結果をグラフ化するテストプログラム 5 を以下に示す.
「plot」
コマンドの最後の引数"b+"は「青色(blue)で+マークでプロットせよ」の意味である.ライ
ンを引きたい場合は"b-"とする.plot の後にラベルの表示等を指示している.最後のコマン
ドはグラフを jpeg ファイルに保存するコマンドである.作成されたグラフを図 1 に示す.
大分大学工学部
菊池武士
% テストプログラム 5
% 作者:菊池
% cd C:¥Octave¥sample
% my_func5
clear; %前回までの設定を消去
num = input("Please input num: ");
A = zeros(2, num);
for i = 1:num
A(1,i) = 2.0 * pi / num * (i-1);
A(2,i) = sin(A(1,i)); % sin
endfor
%以下,グラフ出力
plot(A(1,:), A(2,:), "b+")
xlabel("Angle (rad)")
ylabel("Sin (-)")
title("Sin function")
%jpeg 保存
print -djpeg test.jpg
例 11 テストプログラム 5(my_func5.m)
図 1.
sin 関数のグラフ
大分大学工学部
菊池武士
参考情報
[1] GNU Octave Wiki
http://wiki.octave.org/Main_Page
[2] 九州大学 大学院システム情報科学研究院
金子先生のページ
http://www.kkaneko.com/rinkou/octave/index.html
[3] 東海大学 情報理工学部 コンピュータ応用工学科 稲葉先生のページ
http://www.inaba-lab.org/modules/bwiki/index.php?Octave%C6%FE%CC%E7#content_
1_17
[4] 東北大学 大学院工学研究科電子工学専攻 川又先生のページ
http://www.mk.ecei.tohoku.ac.jp/dsptext/octave/usage.html
[5] 首都大学東京システムデザイン学部情報通信システムコース 西川先生のページ
http://ifnks1.sd.tmu.ac.jp/~kiyoshi/jugyo/matlab/
[6] 福井大学 工学部知能システム工学科
浪花先生のページ
http://www.rbt.his.u-fukui.ac.jp/~naniwa/pub/octave.html
[7] 福島大学 市井先生のページ
http://envmm.jp/data/docs/octave/Octave_Lecture.pdf