MATLABの初歩 - 田中雅博研究室carnation.is.konan-u.ac.jp/MATLAB.pdfMatlabとは...

48
MATLABの初歩 (この資料は、北村先生の作られたオリジナルバー ジョンに手を加えたものです)

Transcript of MATLABの初歩 - 田中雅博研究室carnation.is.konan-u.ac.jp/MATLAB.pdfMatlabとは...

MATLABの初歩(この資料は、北村先生の作られたオリジナルバー

ジョンに手を加えたものです)

第1章はじめの一歩

Matlabとは

•米国Mathworks社の製品

• Matrix Laboratory

•行列演算を基本にした数値計算環境

•科学技術計算用の多くの関数が標準装備• ビルトイン関数

• ツールボックスによる拡張が可能

• グラフィックス機能が豊富

• M-ファイルを用いたプログラミングが可能

3

Matlabの起動と終了

•起動• スタートメニュー

• 甲南大学基本メニュー

•終了• コマンドウィンドウから quit,exit

• ウィンドウ右上の終了ボタン

4

ヘルプの使い方

• コマンドウィンドウから

>> help help

>> helpwin

• [リソース] [ヘルプ]

5

デモ

• [リソース] [ヘルプ] [例]

• グラフィックス,3次元可視化の項目を見てみよ• コマンドとその結果を見ることができる

•各種機能を解説した動画もある

6

重要:作業フォルダ

• データやプログラムを保存するフォルダ

• Matlabを使うときには,最初に必ず作業フォルダを移動する

7

演習1

•本科目用のフォルダを作成せよ

•作成したフォルダに移動せよ

8

MATLABはインタプリタ>>

がプロンプト。ここで、命令を1つずつ入れることもできるし、プログラム名を入れて、一連の作業を実行することもできる。

>> a=1

a =

1

>> b=2

b =

2

>> a+b

ans =

3

覚えておきたいコマンド

>>dirまたは ls

(カレントディレクトリのファイルを調べる). fnc8_d1.m sanji.m sanjimain.m untitled.bmp

.. fnc8_d2.m sanji_at_0.m sc231.m untitled.jpg

fnc8.m kadai8.m sanji_at_2.m sc231_2.m

fnc8_2.m playresult2.csv sanji_at_3.m sc231main.m

unix (linux)のコマンドの多くが使える

cd, mkdir, rmdirなど

これが同じ(カレントディレクトリ)>> pwd

本システムおよびツールボックスのバージョンを調べる>> ver

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

MATLAB バージョン: 8.5.0.197613 (R2015a)

MATLAB ライセンス番号: 243815

オペレーティングシステム: Microsoft Windows 10 Pro Version 10.0 (Build 17134)

Java バージョン: Java 1.7.0_60-b19 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode

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

MATLAB バージョン 8.5 (R2015a)

Simulink バージョン 8.5 (R2015a)

Control System Toolbox バージョン 9.9 (R2015a)

Image Processing Toolbox バージョン 9.2 (R2015a)

Neural Network Toolbox バージョン 8.3 (R2015a)

Optimization Toolbox バージョン 7.2 (R2015a)

Signal Processing Toolbox バージョン 7.0 (R2015a)

Simulink Control Design バージョン 4.2 (R2015a)

Symbolic Math Toolbox バージョン 6.2 (R2015a)

>>

スカラー演算

•関数電卓の感覚で利用可能

>> 3 * 2.1 / 5

•半径2の円の面積

>> 3.1415 * 2 ^ 2

• Matlabでは,piは予約語になっており円周率を表す

>> pi * 2 ^ 2

13

変数

• アルファベットから始まる文字列• 数字から始まってはならない

•大文字と小文字は区別される

•変数はワークスペースに保存される

>> a = 10

a =

10

>> b = a + 2.5;

>> b

14

行の最後にセミコロンを書くと出力が抑制される

変数の中身を見たいとき

変数に代入

変数のクリア

• ワークスペース上のすべての変数を消す

>> clear

•消す変数を指定することができる

>> a = 10

>> b = 5

>> clear a

>> whos

15

演習2

•変数 r に 5 を代入せよ

•変数 s に半径 r の円の面積を代入せよ• pi を用いること

•変数を定義するとワークスペースに表示されることを確認せよ

• whoコマンドを表示してワークスペース内の変数を表示させよ• whosはより詳しい情報を表示する

16

第2章データ構造

ベクトル• Matlabの演算の基本はベクトルと行列

• ベクトルは1次元配列,行列は2次元配列に対応

• ベクトルの作成

>> a = [1 2 3 4 5]

>> b = [2 4 6 8 10];

• 転置

>> c = b’

(複素数を扱うときは、b.’が転置で、b’とすると共役転置になる)

• 演算 (エラーになるものが1つある.理由を考えよ)

>> a + b

>> a * b

>> a * c

18

重要:コロン演算子を用いたベクトルの生成•初期値:増減値:最後の値

•例

>> a = 0:2:10

>> b = 0:0.5:5

•増減値は負でもよい

>> c = 10:-1:0

•増減値が1のときは省略可

>> d = 0:10

19

ベクトルの要素指定• C言語とは異なる

• 丸かっこを使う• 添え字が1から始まる。

• 1番目の要素>> a(1)

• 3番目の要素>> b(3)

• 演算>> a(2) + b(2)

• ベクトルによる要素指定>> b(2:4)>> a(1:2:5)

20

演習3

•初項2,公差2,末項100の等差数列を変数 d に代入せよ

• lengthコマンドを使って d の要素数を調べよ

>> length(d)

• d の第11要素から第20要素を変数 e に代入せよ• ヒント:ベクトルによる要素指定

21

行列• 行列の作成

>> a = [1 2 3 4; 5 6 7 8]

>> b = [2 4 5 6; 8 2 4 1];

• 転置

>> c = b’

• 演算

>> a + b

>> a * c

>> a ./ b(要素ごとの割り算)

• サイズ

>> size(a)22

行列の要素指定• (2, 3)要素

>> m = magic(5)

>> m(2,3)

• (2~5, 1~3)要素

>> m(2:5,1:3)

• 第1行の要素すべて

>> m(1,:)

• 第2~4行の要素すべて

>> m(2:4,:)

• 第5列の要素すべて

>> m(:,5)23

magic -魔方陣

このMATLAB 関数は、1 から n^2 ま

での整数を使用して、行方向と列方向の和が等しくなる n 行 n 列の行列を返します。次数 n は、3以上のスカラーでなければいけません。

M = magic(n)

演習4

•次の行列を変数 D,Eに代入せよ

• size コマンドを使って Dのサイズを求めよ

• D と Eの乗算を実行せよ

• D と Eの要素ごとの乗算を実行せよ

• Dの2行目の要素を表示せよ

24

987

654

321

D

294

753

618

E

3章グラフの作成

2次元プロット

• 1次元データをプロットする場合

>> x = -1:0.1:1;

>> plot(x)

• 2次元データをプロットする場合

>> y = x.^2;

>> plot(x, y)

26

線の種類とマーカー

•第3引数で指定

•例:赤で + をプロット

>> plot(x, y, 'r+')

27

GUIベースの加工も可能

ラベル

• x 軸のラベル:xlabel

>> xlabel('Time [s]')

• y 軸のラベル:ylabel

• タイトル:title

28

表示領域の指定

• axis() で x 軸の最小値,最大値,y軸の最小値,最大値を指定

>> x = -1:0.1:1

>> y = x .^ 2;

>> plot(x, y)

>> axis([0 1 0 1])

29

例:サイン波のプロット

• sin波

• 1周期分の x を生成

>> x = 0:pi/10:2*pi;

• sin波の計算 (ω=1)

>> y = sin(x);

• プロット

>> plot(x, y)

• グリッド

>> grid on 30

)sin( xy

図のコピー,保存

• コピー• [編集] [Figureのコピー]

• Wordなどにペースト可能

•保存• [ファイル] [保存]

• .fig 形式で保存すれば,後ほど再加工可能• openコマンドで開く

• 一般的な画像形式でも保存可能

31

演習5

• y=x2-3 のグラフを -5 から 5 の範囲でプロットせよ.グリッドも表示せよ.

• ラインの色を黒にして再度プロットせよ• plot のヘルプを見て調べよ

•線を破線にして改めてプロットせよ

• その図をmyfig.fig として保存せよ

• closeコマンドでフィギュアウィンドウを閉じたのち,myfig.figを開け

32

第4章プログラミングの基本

Matlabにおけるプログラム

• M-file を作成することにより,独自の関数を作ることができる (拡張子が .m)

•関数名は、アルファベットから始まり、記号を含まないこと(特に、ハイフンに注意)• 使えないファイル名の例

• 20171001.m, 1example.m, rei-2.m, rei2.1.m

• C 言語と異なる点• 変数の型宣言がない

• 配列の添え字は1から

34

M-file の作成と実行

• Matlabのエディタで作成

• エディタの起動

• >> edit

•作成後,ファイルに保存• 拡張子は .m

• ファイル名と関数名を一致させる

•実行• 他の関数と同じ.ただし,作業フォルダ内にそのM-file が存在する必要あり

35

スクリプトの作成

• 「新規スクリプト」あるいは、「新規作成」-「スクリプト」でエディタが開く

• コマンドとして順に入れるのを、まとめて入力するのと同じ

• 次のコマンド列をスクリプトにして実行してみよう

>> x = linspace(0,2*pi);

>> y = sin(x);

>> plot(x,y,'k','LineWidth',2); grid on

>> set(gca,'FontSize',16,'LineWidth',1)

>> savefig('sin_x.fig')

関数の作成

•単独では実行できず、他のスクリプトや関数から呼んで使う

function [戻り値1,戻り値2,…] = 関数名(引数1,引数2,…)

で始まる

•関数の最後は

end

(なくても動く)

関数(続き)

•戻り値が1つの場合

•戻り値が複数個ある場合

38

function x = example(a, b)

(プログラム)

function [x, y] = example(a, b)

(プログラム)

if文, while文

If 条件処理

else処理

end

while 条件

処理

end

for文

for k = 1: 2: 100 (赤は増分)処理

end

演習6

•以下のプログラムをエディタで入力し,en6.m というファイル名で保存せよ

•引数 10 を与え実行せよ (答:55)

41

function s = en6(n)

s = 0;for k = 1:n

s = s + k;end

Matlabの for 文

演習7

•以下のプログラムをエディタで入力し,en7.m というファイル名で保存せよ

•引数 10 と -1 を与え実行せよ (答:10)

42

function y = en7(a, b)

if a >= by = a;

elsey = b;

end

Matlabの if-else 文

演習8

•引数で与えられたスカラー値の絶対値を返すプログラム (en8.m) を作れ

• Matlabのビルトイン関数 abs() は用いないこと

43

演習9

• 楕円をプロットするプログラム (en9.m) を作成せよ.楕円の媒介変数表示は以下の通り

• 以下の式の a と b を引数とせよ

• 実行例

>> en9(2, 1)

• 補足• plot の後で,axis equal を実行すると軸のデータ単位が等しくなり,楕円らしく見える

44

tby

tax

sin

cos

)20( t

演習10

•引数で与えられた身長と体重からBMIを計算し,肥満,普通,やせの判定をするプログラム(en10.m) を作れ

•文字列の出力には disp() を用いよ

• BMIの計算式は次の通りBMI = w/h2

•判定基準は以下の通り

45

w:体重 (kg),h:身長 (m)

BMI 判定

18.5未満 やせ

18.5~25 普通

25以上 肥満

第5章ファイル入出力

データの保存と読み込み

• .mat ファイル(Matlab特有。ファイルサイズは小さく読み書きも早いが、他の言語では読めない)

• 変数 a を a.matに保存

>> save a;

• ファイル名を指定

>> save data.mat a;

• ワークスペース上の全ての変数を all.matに保存

>> save all.mat;

• 読み込み

>> load a.mat;

47

csvファイル

• ファイルの中は、テキストファイルで、項目はコンマで区切られる

•例 (data1.csv)

1.0, 1.0

2.0, 4.0

3.0, 9.0

• これを読み込むには

>> m = csvread('data1.csv')