Document

MATLAB 講習会(1)
-MATLAB概説-
担当:三輪
内容
・ウインドウ環境
・演算の基礎
・データ入出力
・プログラミング
・グラフィック
・ヘルプ
・ GUI
http://www.rs.el.gunma-u.ac.jp/~yamalab/matlab.ppt
MATLAB
数値計算,ビジュアリゼーション,プログラミング
が可能なインタープリタ型ソフトウエア
データ収集
外部のハードウエアから MATLAB 環境へダイレクト
に生の計測データを取得可能
ツールボックス
信号処理、画像処理、制御系設計、最適化、記入工
学、数学、ニューラルネットワーク
アプリケーション開発
ユーザスタンドアロンの MATLAB アプリケーション
の生成と配布
ウインドウ環境 –メインウインドウ–
ディレクトリウインドウ
変数のworkspace
コマンドウインドウ
コマンドヒストリ
ウインドウ環境 –プログラムの例–
関数定義
%記号
if 文
For 文
ピリオド
コロン
セミコロン
‘ 記号
カギ括弧
演算記号
括弧
MATLABの特徴
•
•
•
•
•
•
•
対話型インターフェイス
データの扱いが簡単
変数,配列の宣言は不要
行列データを高速,簡便に取り扱える
簡易なプログラム(ソースが公開)
強力なデバッグ機能による生産性の向上
豊富な2次元,3次元プロット
スカラー、ベクトル、行列を統一的に取り扱える
繰り返し演算の低減、計算のベクトル化
データ型
double
single
uint8
int8
char
logical
- 倍精度(64bit IEEE浮動小数点)
- 単精度
- 符号なし8ビット整数 (16,32,64も同様)
- 符号付き8ビット整数 (16,32,64も同様)
- 文字列
- 論理値
数値は指定しない限り倍精度となる
>> a=1
a=
1
変数の値が表示
倍精度で定義
>> whos a
変数の詳細表示
Name Size Bytes Class
a
1x1
8 double array
Grand total is 1 element using 8 bytes
>> a=2j
a=
0 + 2.0000i
表示時には虚数単位はi
虚数単位はj
もしくは i
倍精度の複素数
数値に続いて記入可能
>> whos
a
Name Size Bytes Class
a
1x1
16 double array (complex)
Grand total is 1 element using 16 bytes
変数の型宣言は必要としない
行列の定義(1)
-入力による定義-
要素の全体はかぎ括弧 [ ] で囲む
列(横)の区切り
行(縦)の区切り
>> A=[1 2 3;4 5 6]
A=
1 2 3
4 5 6
>> A=[1 2 3];
>>
表示の抑制
空白
または , カンマ
; セミコロン または
>> A=[1 2 3
4 5 6]
A=
1 2 3
4 5 6
>> A=[ ]
A=
[]
リターン
空行列
行列の定義(2)
-関数による定義-
help elfmat
zeros(m,n) ゼロ行列
randn(m,n)
ones(m,n) 1行列
rand(m,n)
eye(m)
diag(v)
単位行列
対角行列
linspace
’
正規分布乱数
一様分布乱数
線形等間隔ベクトル
複素転置
m行n列の行列を生成
>> zeros(2,3)
ans =
0 0 0
0 0 0
>>diag([1 2 3])
ans =
1 0 0
0 2 0
0 0 3
>> [1 2 3]'
ans =
1
2
3
常に行列の形をイメージすることが重要
行列の定義(2) -関数による定義-
線形横ベクトルの定義 初期値:増分:最終値
>> 1:2:10
ans =
1 3 5
7
9
>> 1:5
ans =
1 2
4
5
>> 5:-1:1
ans =
5 4
3
3
2
1
>> (1:5)'
ans =
1
2
3
4
5
線形縦ベクトルの
定義
行列の定義(2)
-行列の連結-
[ ] は行列の連結を行う関数
横の連結
縦の連結
[A B]
[A ; B]
A,Bの行数が異なるとエラー
A,Bの列数が異なるとエラー
>> [[1:4; 1 2 0 4] zeros(2,3) ;rand(3,7) ]
ans =
1.0000
1.0000
0.1991
0.2987
0.6614
2.0000
2.0000
0.2844
0.4692
0.0648
3.0000
0
0.9883
0.5828
0.4235
4.0000
4.0000
0.5155
0.3340
0.4329
0
0
0.2259
0.5798
0.7604
0
0
0.5298
0.6405
0.2091
0
0
0.3798
0.7833
0.6808
行列の定義(3)
-ファイルから定義-
インポート関数を利用
load, dlmread, textread, xlsread, wk1read,
空白区切り 任意区切り フォーマット付数値
Excelファイル Lotus123ファイル
imread, wavread, aviread
画像ファイル
waveファイル
>> type blank.txt
134
402
345
212
ファイル blank.txt
の内容確認
aviファイル
>> load blank.txt
ファイルの読み込み
>> blank
blank =
1 3 4
4 0 2
3 4 5
2 1 2
行列の要素抽出
A( m , n )
行
A( 方
向
,
列方向
) 行列Aのm行n列番目の要素
m, n にベクトルを指定することが可能
A(m ,1:3) 
[A(m,1) A(m,2) A(m,3)]
横ベクトルの抽出
A(1:3 ,n) 
[A(1,n) ; A(2,n) ; A(3,n)]
縦ベクトルの抽出
A(1:3 ,1:3) 
[A(1,1) A(1,2) A(1,3);
A(2,1) A(2,2) A(2,3); 行列の抽出
A(3,1) A(3,2) A(3,3);]
行列の要素抽出
A=
1
4
2
5
3
6
>> A( 2 , [ 1 3 ] )
横ベクトルを
ans =
指定
4 6
>> A( [ 1 2 ] , [ 2 3 ] )
ans =
2 3
行列を指定
5 6
>> A( 2 , : ) 二行目の全要素を
ans =
指定
4 5 6
>> A(:)
ans =
1
4
2
5
3
6
全要素を縦ベクトル
として変換
>> A( : , 2 )=0
A=
1 0 3
4 0 6
特定要素の変更
文字変数
文字定数は ' シングルコーテーション ' でくくる
>> A='abcde'
A=
abcde
>> A'
ans =
a
b
c
d
e
>> size(A)
ans =
1 5
>> [A(1:3) '0' A(4:5)]
ans =
abc0de
>> A(2:3)
ans =
bc
>> [A ; '12345']
ans =
abcde
12345
文字変数も行列として取り扱う
行列要素の指定により文字を抽出
[ ]により文字の結合
行列要素が実数か、ASCIIコードかの違い
行列演算(1)
四則演算記号は行列に対する演算を意味する
A=
1
3
2
4
B=
4
2
3
1
>> A+B
ans =
5 5
5 5
>> A-B
ans =
-3 -1
1 3
>> A*B
ans =
8 5
20 13
>> A/B 逆行列を計算
ans =
1.5000 -2.5000
2.5000 -3.5000
* / は要素毎の演算ではないことに注意
行列演算(2)
行列の形を常に意識して演算を行う必要がある
A=
1
3
2
4
>> [1 2]*A
ans =
7 10
>> A*[1 2]
??? エラー: ==> mtimes
内部行列の次元は同じである必要があります
>> A+[1 2]
行列の形が演算に合わな
ければエラー
??? エラー: ==> plus
行列の次元は同じである必要があります
>> A+1
ans =
2 3
4 5
行列に対するスカラーの
加減算は許される
行列演算(3)
A=
1
3
2
4
>> A .* B
ans =
4 6
6 4
B=
4
2
演算記号の前に . をつけることにより
各要素毎の演算となる
3
1
>> A ./ B
ans =
0.2500
1.5000
0.6667
4.0000
>> A .^ B
ans =
1 8
9 4
初等数学関数等は各要素毎に計算される.
help elfun
sin(), cos(), exp(), log(), log10(), sqrt(), round(), abs()
>> exp( A( : )’ )
ans =
2.7183 20.0855
演算結果は引数の行列と同じ
形の行列になる
7.3891 54.5982
これまでの記号のまとめ
[ ] カギ括弧。行列の作成、行列の結合
( ) 括弧。変数の後に続いて 配列要素の参照、指定
関数のあとに続いて引数指定
演算式において演算順序の指定
. ピリオド。小数点。演算記号の前につけて要素毎の演算 .* 、.^ 、./ 、.¥
,
カンマ。行列のサブスクリプトや関数の引数を分離。
複数のステートメントの区別。(画面表示あり)
;
セミコロン。鍵括弧内で、行列の行区切りセパレータ。
複数のステートメントの区別。(画面表示抑制)
‘
転置。X’ は、行列X の複素共役転置。X.' は、共役でない転置。
文字列型の指定。 'ANY TEXT' はベクトルで、各要素はキャラクタに
対するASCIIコード。
:
コロン。線形横ベクトルの作成。行列の後に(:)で縦ベクトルへの変換
データ解析関数
help datafun
max , min , mean , std , sum, hist, diff ,
最大値 ,
最小値 ,
平均値 , 標準偏差 , 総和 ,ヒストグラム, 微係数
corrcoef , conv , fft , ifft
相関係数 , コンボリューション ,フーリエ変換
関数内の行列では縦ベクトルを基本に計算される
>> X=randn(256,3);
>> mean(X)
ans =
-0.0091 -0.0094 -0.0730
>> std(X)
ans =
0.9222
フーリエ,逆フーリエ変換後の
RMS誤差
>> sqrt(mean((ifft(fft(X))-X).^2))
ans =
1.0e-015 *
0.2287
0.9626
0.9085
0.2312
0.2224
行列関数
help matfun
rank , det ,
ランク
,
行列式 ,
trace ,
トレース
inv , lu ,
,
norm ,
ノルム
,
cond,
条件数
qr , eig , svd
逆行列, LU分解, QR分解, 固有値分解, 特異値分解
>> A=[2 3 5;1 4 2];
>> rank(A)
ans =
行列のランクの計算
2
>> svd(A)
ans =
7.4136
2.0098
特異値の計算
>> A=[2 3;1 4];
>> [C D]=eig(A)
C=
-0.9487 -0.7071
0.3162 -0.7071
固有ベクトル,固有値
行列への分解
D=
1.0000
0
0 5.0000
特殊数学関数
help specfun
besselj ,
besselh ,
beta ,
gamma
第1種ベッセル関数 , ハンケル関数 , ベータ関数 ,ガンマ関数
factor , primes , nchoosek
素因数分解
,
素数リスト ,
組み合わせ
>> besselj(1, [1 ; j; 1+j])
>> nchoosek(1:4,3)
ans =
0.4401
0.0000 + 0.5652i
0.6142 + 0.3650i
ans =
1
1
1
2
2
2
3
3
3
4
4
4
関係演算子
A==B
A<B
A<=B
AとBは等しい
AはBより小さい
AはB以下
>> x=rand(2,3)
x=
0.2843 0.0647
0.3708 0.5448
0.8364
0.1453
>> x>0.3
ans =
0 0 1
1 1 0
要素毎の真偽を表す
論理値行列を生成
A~=B
A>B
A>=B
AとBは等しくない
AはBより大きい
AはB以上
>> x(x>0.3)
ans =
0.3708
0.5448
0.8364
真値の抽出
(縦ベクトル)
>> x(x>0.3)=1
x=
0.2843 0.0647 1.0000
1.0000 1.0000 0.1453
真値のデータ変更
ファイルへの出力
エクスポート関数を利用
save, dlmwrite, imwrite, wavwrite, aviwrite
空白区切り
任意区切り
画像ファイル
waveファイル
aviファイル
バイナリ形式の保存
>> save file A B
MAT-ファイルとして変数A, Bを保存
アスキー形式の保存
>> A=[1 2 ;3 4];B=[1 2 3];C=1;
>> save test A B C -ascii
>> type test
1.0000000e+000 2.0000000e+000
A
3.0000000e+000 4.0000000e+000
1.0000000e+000 2.0000000e+000 3.0000000e+000 B
1.0000000e+000 C
グラフィックス機能 –二次元プロットグラフの注釈
色の管理
図の保存、印刷
ズーム、移動、回転
線の種類
軸の制御
help specgraph
plot , bar ,
errorbar ,
hist , stem
線形プロット,棒グラフ,エラーバー付グラフ,ヒストグラム,ステムプロット
scatter ,
pie ,
stairs , polar
散布図, 円グラフ, 階段状グラフ , 極座標プロット
グラフィックス機能 -plot関数1
>> x=(1:100)’/100;
>> y=sin(2*pi*x);
>> plot( y );
0.5
0
-0.5
X軸を指定しない場合,X軸は要素番号
-1
0
20
40
60
80
100
0.8
1
1
0.5
>> plot( x , y )
0
X軸を指定する場合
-0.5
-1
0
0.2
0.4
0.6
0.8
1
1
>> Y=sin(2*pi
*[x 2*x 3*x] );
>> plot( x , Y )
Y軸データが行列のとき,縦ベクトル
を基準に自動的にプロット
0.5
0
-0.5
-1
0
0.2
0.4
0.6
グラフィックス機能 -plot関数plot(x,y,s) を使って、ラインタイプ、プロットシンボル、カラーを指定
b 青
. 点
- 実線
g 緑
o 円
: 点線
r 赤
x x印
-. 鎖線
k 黒
+ プラス記号
-- 破線
1
0.5
>> plot(x, sin(2*pi*x), ’xg’ )
0
-0.5
-1
1
0
0.2
0.4
0.6
0.8
0.5
>> plot(x,sin(2*pi*x), ’--k’ )
0
-0.5
-1
0
0.2
0.4
0.6
0.8
1
1
グラフィックス機能 -軸の設定grid
subplot
hold
axis
軸のスケール
1 cycle
1
1
Sin
Cos
0.9
0.8
0.8
1
0.6
0.6
0.8
Amplitude
0.4
0.7
0.6
0.2
0.4
0.5
0.2
0.50
0
-0.2
0.4
-0.2
-0.5
-0.4
-0.4
0.3
-0.6
0.2
-0.8
0.1
-1
0
0
0.5
Time
xlabel
title
legend
text
グリッドの設定
複数の軸設定
重ね書きの設定
1
-0.6
-1
-1
-0.8
-0.5
0
0.5
1
-1
-1
-0.5
0
0.5
1
軸ラベル
タイトル
図の凡例
任意の位置に注釈
>> subplot(1,2,1)
>> plot(x,sin(2*pi*x))
>> hold on
>> plot(x,cos(2*pi*x),'r')
>> xlabel('Time')
>> ylabel('Amplitude')
>> title ('1 cycle')
>> legend('Sin','Cos')
>> subplot(1,2,2)
>> plot(cos(2*pi*x),sin(2*pi*x))
>> axis equal
>> axis([-1 1 -1 1])
グラフィックス機能
>>pcolor(peaks)
>>shading interp
>> mesh(peaks)
–行列要素の画像化-
>> contour(peaks)
>>surf(peaks)
>>shading interp
>>contour3(peaks)
>> surfl(peaks)
>> shading interp
>> colormap copper
グラフィックス機能
>> A=ones(3,4,2)
A( : , : , 1) =
1 1 1 1
1 1 1 1
1 1 1 1
A( : , : , 2) =
1 1 1
1 1 1
1 1 1
–体積要素の画像化-
3次元配列の例
1
1
1
プロット関数は2次元配列までしか利用できない
>> plot(A)
??? エラー: ==> plot
データは2次元以上である必要があります.
>> pcolor(A)
??? エラー: ==> surface
CDataはMxN行列、またはMxNx3配列である必要があります.
グラフィックス機能
–体積要素の画像化-
画像の3D回転
slice による任意断面内の2D画像
isonomal による曲面の表示
任意の視点、光源による断面、曲面の表示
ファイル管理
cd
cd dn
delete fn
dir
ls
pwd
カレントディレクトリの位置表示
type fn
path
ファイルの内容表示(アスキーファイル)
which
どのディレクトリの関数,ファイルを使っている
か表示
カレントディレクトリの変更
ファイルの消去
ディレクトリの内容表示
ディレクトリの内容表示,詳細表示可
カレントディレクトリの位置表示
Matlabがサーチするパスの順番
プログラミング
スクリプトM-ファイル
ファンクションM-ファイル
一連のコマンド・関数をまと
めて処理することができる
入力引数と出力引数を伴う
関数形式のファイル
特別な記述は必要なし
Function で始まる関数宣言
任意の数の入出力引数
workspaceと共通の変数
デバッグが容易
関数毎のlocalな変数
デバッグが困難
M-ファイル名をコマンドと
して処理
M-ファイル名を関数として
処理
M-ファイルの作成
コマンドウインドウにおいて
>> edit test としてM-ファイルを新規作成
(ファイル名がtest.mの場合)
M-ファイルにコマンドの羅列を入力
M-ファイルを保存(test.m)
実行ボタンかコマンドウインドウでtestと入力
実行
(カレントディレクトリに保存した場合)
保存
注意
ファイル名には,先頭が数字で始まるものや,漢字を指定してはいけない
また,演算記号+-*/()[]を含むものは誤動作の原因となる.
すでに test.m が存在するきは既存のファイルが開く.すでにコマンドとして予
約されているものは変更してはいけない.
特定のフォルダにパスを設定することも可能 (addpath コマンド)
M-ファイルの利点
変数にマウスカーソル
を当てると変数表示
ドラッグした範囲を
部分的に実行
ブレークポイントの設定
赤いマークの行で停止
実行させると,マークの
行で緑の矢印が出る.
コマンドウインドウは
K>>
となって実行停止し,
デバッグモードへ
変数の値は更新されない限り変更されない
プログラミング –制御構文for 変数=既知ベクトル
繰り返し内容
continue
break
end
次の繰り返しへ
ループの外へ
if 論理条件1
end
繰り返し内容
次の繰り返しへ
continue
break
end
ループの外へ
switch 変数
elseif 論理条件2
else
while 論理条件
条件式に行列が含
まれる場合,すべて
の要素が真となると
き式以降が実行
case 値1
変数値によ
る場合わけ
case 値2
end
変数、条件式にはベクトルが使用可能
For文のTIPS
>> for i=1:3 ;, i , end
i=
1
>> b=0;a=1:1000000;
>> tic;for i=a; b=b+i;end;b,toc
b=
5.0000e+011
i=
2
i=
3
通常の表記
経過時間は1.212000秒です
>> for i=[1 1 1] ; i , end
>> tic; sum(a), toc
i=
ans =
1
5.0000e+011
i=
1
i=
1
ベクトル要素の数
だけループ 経過時間は0.010000秒です
カウンタの数値は
ループ文は可能な限りさけ,内部ベクトル
どうでもよい
関数が利用できないか考える
プログラミング –よく使うコマンドclear
clf
変数の消去 (前回の値が残ったまま..)
図の消去 (前回の図が残ったまま..)
disp
size
…
%
文字列,値の表示,(1行出力等デバッグに便利)
配列のサイズ(最も使う関数,サイズの把握は必須)
次の行との継続.行末に.プログラムを見やすく
help
lookfor
ヘルプの表示.二番目に多く使う関数.
zeros
配列の事前割り当て,(ループ毎に行列の大き
さが増加するような場合)
以降コメント
キーワードから関連コマンドを表示
アプリケーションへの図のコピー
線画はmetafile、画像はbitmap形式でコピー
アプリケーションへの図のコピー
1
0.8
0.6
0.4
amplitude
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
0.1
0.2
0.3
0.4
0.5
time
0.6
0.7
0.8
0.9
1
ツールボックス
特定の機能に特化したmatlab関数,GUIの集合体
Data acquisition toolbox
AD変換ボード等のボード,カード機器とのデータのや
り取り.GUIを自作して,オシロスコープ等も作成可能
Instrument control toolbox
オシロスコープ等の計測機器と,GPIB,VISA,TCP/IP
を介して計測機器の制御,データの取得,GUI可
Signal processing toolbox
信号処理用の各種波形の生成,フィルタ,解析用の関
数,スペクトル推定,GUIによるフィルタデザイン
Statistics toolbox
統計処理用の各種確率密度関数,仮説検定,多変量解
析,線形,非線形モデル解析
Symbolic math toolbox
シンボル表現,方程式,微分方程式の解,特殊関数,
Mapleパッケージとのリンク
Wavelet toolbox
連続,離散,1次元,2次元ウェイブレット解析.周期,不
連続解析,フィルタリング,イメージ圧縮などの応用
HELPの利用法
Help Browser (ウインドウのプルダウン項目から)
ヘルプには詳細な説明が記述されている
HELPの利用法
M-file ヘルプ
コマンドウインドウで
>>help
クリック可能
genral をクリック
whos をクリック
最後には関連コマンドや
Help browser へのリンク
>>help コマンド
>>lookfor キーワード
により詳細を確認
により関連コマンドを表示
GUIの作成
>>guide
OKをクリック
ボタンを配置
コンテキストメニュー
(右クリック)からコー
ルバック処理の選択
M-ファイルが自動作
成され対応する処理
を記述
ネットワークアナライザ
からの取り込み用GUI