MATLABの使い方
おまけ回：小技詰め合わせ

まとめページ：
http://www.nuee.nagoya-u.ac.jp/labs/plaene/koukai/purakaku85/tsukaikata/☆２

図中の特殊文字・「¥（バックスラッシュ）」でギリシャ文字を入力可能↑大文字小文字の変更は先頭文字で・「_（アンダーバー）」により下付き文字、「^（ハット）」により上付き文字を入力可能↑{}でまとめて変更、「_」と「^」をそのまま表示したい場合は「¥_」,「¥^」とする☆１

表示桁数を変更する
・MATLABは通常使う数値配列は倍精度で扱われるが、表示桁は小数点以下4桁となる
・表示される桁数を増やしたいとき
はformat関数を使う

disp(pi)
format long; disp(pi*2);

format short; disp(pi*3);

☆２(‘)を文字として書く・シングルクォーテーション（’）をキャラクタ配列として変数に代入するとき、普通に「‘ ‘ ‘」と入力するとエラー
・シングルクォーテーションを連続して２つ置くことで1つのシングルクォーテーションとして扱われる

☆１

コマンド内容に変数を使用する
・evalコマンドを使うと引数となっている文字列が実行される
・通常の入力ではできない、例えば可変の変数名への代入処理などが実行可能
・シングルクォーテーションを文字列中で使う場合は数に注意
・関数名を可変にするときはfevalコマンドを使用
evalコマンド使用の例

b=1

’b=1’

☆２

テキストファイルの読み書き
・文字と数字の混ざったテキストファイルを扱うときはtextreadが使えるが、低水準のI/Oコマンドを使用する方が低リスク
・テキスト内容の書き換えにはfscanfとfprintf
全読み込みと全書き込みの例
fnm=‘読みたいデータファイル名’;

fnm=‘書きたいデータファイル名’;fid=fopen(fnm);

fid=fopen(fnm,’w’);

data=fscanf(fid,’%c’);fprintf(fid,’%c’,data);

fclose(fid);

fclose(fid);

ファイル操作
findstr, strcmp, strncmp, strcmpi,
strmatch: 文字列の検出、比較☆１

バイナリファイルの読み書き・バイナリファイルの読み書きにはfreadとfwrite
・サイズや型式をヘッダファイルなどから予め読み出しておく
・最後はreshapeとpermuteで変数の形を整形する
読み込みの例（高速カメラのrawwデータ）
sizea=[256,128]; % width & height
precision=‘uint16=>double’; % uint16をdouble型へ変換
fnm=‘読みたいデータファイル名’;fid=fopen(fnm);

img=fread(fid,prod(sizea),precision);
fclose(fid);
img=reshape(img,sizea); % sizeaのサイズに整形

img=permute(img,[2,1]); % 縦と横を入れ替え

☆１

dos,unixコマンドの使用
・dos, unix関数によりコマンドプロンプトで動くプログラムをMATLABから実行可能・文末にアンド（&）を加えることでDOSウィンドウを起動（MATLABの処理は継続）・アンド（&）を挟むことで複数行のコマンド入力が可能
dosコマンド使用の例

☆１

cygwin環境をMATLABで!
・cygwin(http://www.cygwin.com/)をインストールするとwindowsマシンでunix環境が実現できる・MATLABのdos, unix関数でunixコマンドを使うときは、cygwinのイ
ンストールディレクトリを環境変数に登録しておく必要がある
例えば(‘C:¥cygwin¥bin’)にunixの関数が格納されているときはsetenv(‘PATH’,[getenv(‘PATH’) …
‘;C:¥cygwin¥bin’]);

コマンド・手動どちらから設定してもOK

http://www.mathworks.co.jp/help/
ja_JP/techdoc/ref/setenv.html

☆２

可変入出力引数関数の作成
・varargin, varargoutにより入出力引数の数が可変のユーザー定義関数を作成可能・nargin, nargoutは引数の数決定の参考に使える
可変出力引数をもつ関数の作成例

varargin, varargoutはセル配列として取り扱う☆１

サブ関数(subfunction)
・function M-file内にその関数内だけで使う専用関数を定義できる・使い方は通常の記述の後にfunctionを定義するだけ
sample_subfunction.mの名前で保存
function b=sample_subfunction(a)b=test_subfunction(a);function d=test_subfunction(c)d=c^2;↑この部分がサブ関数
サブ関数は外からは見えない
http://www.mathworks.co.jp/help/ja_JP/
techdoc/matlab_prog/f4-70666.html

☆２

グローバル(global)変数・複数のM-ファイル内でたくさんの変数を共有したいとき、グローバル変数として定義すると便利
script M-filefunction M-file (sample_global.m)

script;global p1 p2 p3;
p1=1; p2=2; p3=3;
c=sample_global(2);function b=sample_global(a);global p1 p2 p3;
b=p1*p2*p3*a;return;

双方でglobal宣言された変数は値が共有される・who(‘global’)によりグローバル変数のリスト化
・isglobalによりグローバル変数の検出
http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/global.html

☆１

永続(persistent)変数

実行回数をカウントするサンプルプログラム←isempty(p)==1のためp=0←p==0のためp=p+1

・M-ファイル内でpersistent宣言された変数はclearされるまで「そのfunction内」でのみ値を保持する
・最初の宣言時は空行列が代入される←p==1のためp=p+1←clear all/functions/sample_persistent(関数名)で変数消去←isempty(p)==1のためp=0

☆１

非等間隔データの3次元可視化
ドーナツ形状を描画するプログラム

・MATLABの可視化関数はデカルト座標(x,y,z)内でメッシュ状に配置できるデータを扱うものばかり
・例えば座標(r,z,phi)で並ぶデータを可視化する場合にはpatch関数を使うと良い

http://www.mathworks.co.jp/help/ja_
JP/techdoc/visualize/f2-11758.html

☆１

ダイアログボックスによる入出力・ダイアログボックスを出現させての入出力が可能
uigetfile

waitbarinputdlg

uisetcolor
errordlg
warndlguicontrol

☆１

マウスを使った操作
・ginput関数によりマウスを使って図の座標値を取得できる
・gtext関数によりマウスを使って図上にテキストを配置できる

ginputの使用例

ターゲット

☆０

Persistent変数を使った高度目なプログラム
function num=call_times(s,lock)%------------------------------------------------% Remember and output a number of call times%
呼び出し回数の記憶と出力%
Data: 2012/09/19%
Modified: 2012/09/19%------------------------------------------------%% NUM=CALL_TIMES(S)は、文字列・数値配列あるいは関数ハンドルS% を入力とした「CALL_TIMES(S)」のコマンドが、過去に実行された% 回数NUMを返します。NUMのカウントはCLEAR
ALL/FUNCTIONS/CALL_TIMES% コマンドにより0に初期化されます。MATLAB終了時もカウントは% 初期化されます。
%% NUM=CALL_TIMES(S,LOCK)はLOCK==1のとき、CLEAR関数によるカウ% ントの初期化を防ぎます。LOCK==0により、再度初期化を可能に% します。
%% 参考：PERSISTENT, MLOCK, MUNLOCK, CLEAR, ISA% Author(s): H. Tanaka (National Institute for Fusion Science)

if nargin<2, lock=0; end
if ischar(s)elseif isnumeric(s), s=num2str(s);elseif isa(s,'function_handle'), s=func2str(s);else, error('Unsupported input!');end
val_name=['times_' s];eval(['persistent ' val_name ';']); % persistent変数宣言

if isempty(eval(val_name)) % 初回
eval([val_name '=0;']);
else% 2回目以降
eval([val_name '=' val_name '+1;']);
end
num=eval(val_name);
switch upper(lock) % カレントM-ファイルのロック
case {1 'ON'}, mlock;case {0 'OFF'}, munlock;end
returnコピペ可

☆０

公開プログラムの宣伝

http://www.nuee.nagoyau.ac.jp/labs/plaene/koukai/purakaku85/
で公開中！