SlideShare a Scribd company logo
MATLAB講習
基礎編
数値計算ソフトを使えるようになる
最終改訂:2021/04/14
はじめに 2
MATLABは,科学計算に特化した数値解析ソフトウェア.
• 数値解析(シミュレーション)
• 信号処理
• データ解析
• 機械学習
様々な計算に対応する
多用なツールボックスを備えている.
最近では,ロボティクスの需要に応えるため,
Robotics toolboxや,ROS (Robot OS)との連携もできるようにアップデートされた.
• データの扱いが簡単
変数の型を指定する必要がない
• プログラミングが簡単
Pythonのように,シンプルなコードで書ける
• 描画が得意
きれいなプロットを簡単に作成可能
もくじ
1. 基本的な使い方
2. プログラムを作る
3. 可視化する
4. 構造体とオブジェクト指向プログラミング
5. 付録
3
MATLABの画面
• MATLABを立ち上げると,以下のような画面が出てくる.
ここにコマンドを書く
4
とりあえずなにか計算してみる
1. 変数を作る
1. コマンドウィンドウに と入力する.
2. コマンドウィンドウに と入力する.
2. 計算する
1. 足し算をしてみる.
2. 掛け算をしてみる.
3. 新しい変数に,計算結果を代入する
>> a=2;
>> b=3;
>> a+b
>> a*b
コマンドの後ろに”;”をつけると,結果が表示されない.
計算結果がいちいち出てくると鬱陶しいときは便利.
>> c=a/b
加算: +
減算: -
乗算: *
除算: /
5
行列計算をしてみる | ベクトルと行列の定義
• MATLABは行列計算に強いので,いろいろ遊んでみよう.
1. ベクトルの計算
1. と入力すると,横ベクトル𝑝 = [1 2 3]が生成される.
2. と入力すると,縦ベクトル𝑞 =
1
2
3
が生成される.
2. 行列の定義
1. と入力すると,行列𝐴 =
1 2
3 4
が生成される.
>> A=[1 2; 3 4]
>> p=[1 2 3]
>> q=[1 2 3]’
転置を意味する
改行を意味する
6
>> q=[1; 2; 3]
TRY と入力するとどうなるだろうか.
準備: 行列𝐵を定義しておきます.
行列計算をしてみる | 行列の演算
1. 行列の掛け算
1. スカラーと行列の掛け算は, と書ける.
2. 行列と行列の掛け算は, と書ける.
2. 逆行列は, で簡単に求められる.
3. 固有値と固有ベクトルは, で求められる.
Vは固有ベクトルからなる正方行列で,各列が固有ベクトル.
Dは固有値を対角に持つ対角行列.
>> a*A
>> [V,D]=eig(A)
>> inv(A)
>> B = [3 4; 5 6]
>> A*B
練習問題
行列 𝑄 =
0 1 1
−4 4 2
2 −1 1
を対角化せよ.
7
1. スカラーとベクトルの掛け算は, と書ける.
2. ベクトルの積を計算してみよう.
1. 二つの縦ベクトル を定義する.
2. ベクトル𝑢と𝑣の内積は,
3. ベクトル𝑢と𝑣の外積は,
行列計算をしてみる | ベクトルの演算
>> a*p
>> u=[2;3;4] >> v=[5;6;7]
>> dot(u,v)
>> cross(u,v)
ベクトル𝑢と𝑣の内積は,𝑢 ∙ 𝑣 = 𝑢⊤𝑣で求められる.すなわち,
でも計算できる.
>> u’*v
8
ワークスペースの管理
• 作られた変数は,ワークスペースに残り続ける.
• ワークスペースを保存することができる.
• とすると,「filename.mat」が保存される
• 一部の変数だけを保存したいときは, とする
• ファイルは現在のフォルダーに保存される
• ワークスペース内を削除したいときは
• 目的の変数のみを削除したいときは
>> clear
>> clearvars A b p
>> save(’filename’)
>> save(’filename’,’A’,’b’)
9
スクリプトを使う
• 作業が多いと,一行ごとに書いていくのは大変である.
• そこで,コマンドをまとめてスクリプトにすることができる.
ここにコマンドを書く
10
スクリプトを書いてみる
• コマンドウィンドウに書いていたのと同様にコマンドを書いていく.
• MATLABはコンパイルを必要としないスクリプト言語であり,「実行」を押したら上から順番に
実行される
• スクリプトは保存しないと実行できない.また,現在のフォルダにないと実行できない.
まとめて実行
% 以降の文字列はコメントとみなされ,実行されない
%% と2つ続けて書くと,セクションとして認識される
念のため,前回の計算結果が残らないように,
はじめにclearしておくと良い
11
sin関数のプロット
• MATLABは描画機能も充実しており,2次元プロットも3次元プロットもできる.
figure プロットするウィンドウを生成
plot(x,y) xに対するyを2次元にプロット.ベクトルxとyは同じサイズでないといけない.
xlabel 軸の説明を追加.TeX形式を使ってきれいに書くことができる
12
Commands
関数を作る
• MATLABには,sin関数のように予め定義された変数がたくさんある.
• それに加えて,自分で関数を作ることもできる.
13
スクリプトで function と書くと,引数と返り値をもつ関数が定義できる.
関数内で中間変数を定義できる.
これはワークスペースに残らない
練習問題 4次のルンゲクッタ法で微分方程式を解いてみよう
𝑥 + 2𝑥 + 3𝑥 = 𝑒−2𝑡
ライブスクリプトを活用する
• ライブスクリプトを使用すると,充実したノート機能を使用できる.
• 詳しい説明や,数式を記入することができて便利!
• 計算結果も一緒に表示してくれるので,ひと目で計算が把握できる.
14
ノートはフォーマットを決めて,タイトルを付けたりできる
「挿入」タブから数式の入力が可能
MATLABコードとノートを任意に切替可能
計算結果や図はノートの右スペースに表示される
練習問題
1. 行列 𝑄 =
0 1 1
−4 4 2
2 −1 1
を対角化しよう
2. 4次のルンゲクッタ法アルゴリズムを組み,微分方程式を解いてみよう
可能なら,解析解を求め,数値計算の結果と並べてプロットしてみよう
(数値計算は十分な精度で計算できているか?)
15
(2) 𝑥 + 2𝑥 + 3𝑥 = 𝑒−2𝑡
初期値は𝑥 𝑡 = 1, 𝑥 𝑡 = 0
(1) 𝑥 − 2𝑥 = 𝑒𝑡
初期値は𝑥 𝑡 = 0
構造体でプログラムをシンプルに書く
• 関数の引数が長いと書くのが大変
• 「構造体」を使ってまとめてしまえば,簡単に書き表せる
dx = F (t, x, m1, m2, J1, J2, l1, l2, d1, d2, g);
param.m1 = 1.0;
param.m2 = 1.0;
param.J1 = 1.5;
param.J2 = 1.5;
param.l1 = 1.0;
param.l2 = 1.0;
param.d1 = 0.5;
param.d2 = 0.5;
param.g = 9.8;
dx = F (t, x, param);
‘param’ という構造体の中に,
たくさんの変数が存在する
「構造体名.変数名」というフォーマット
(.の後に変数名を書く)
‘param’ だけ引いてしまえば,
中身の変数が全部ついてくる
param = [1.0 1.0 1.5 1.5 1.0 1.0 0.5 0.5 9.8]
とするよりも,各変数の意味がわかりやすい
16
オブジェクト指向プログラミングへの発展
• 「オブジェクト」はデータ(メンバ変数)と命令(メソッド)が一体になっている
• 構造体のように多くの変数をまとめて管理できる
• メソッドとして,関数を内部に持つことができる
17
戦隊物クラス
• 色
• 得意技
• 変身(色,得意技)
• 得意技で戦う
メンバ変数 メソッド
実体化
色:赤
得意技:仁王立ち
例
「クラス」はオブジェクトの
設計図
クラスから実際にオブジェクトを生成することを実体化という
生成したオブジェクトを「インスタンス」とも呼ぶ
クラスとインスタンス
• 同じ設計図(クラス)から,様々なインスタンスを作れる
• 「戦隊物クラス」からたくさんのヒーローが作れる
• この場合,「色」と「得意技」は実体化の瞬間に代入しておいたほうがいい
• 実体化した瞬間に実行されるメソッドを作れる.これをコンストラクタという
18
戦隊物クラス
• 色
• 得意技
• 変身(色,得意技)
• 得意技で戦う
メンバ変数 メソッド
実体化
色:赤
得意技:仁王立ち
実体化
色:青
得意技:手刀
実体化
色:ピンク
得意技:踊る
例 コンストラクタにしておくのがよい
MATLABプログラムにするとこんな感じ
戦隊物クラス
• 色
• 得意技
• 変身(色,得意技)
• 得意技で戦う
メンバ変数 メソッド
例
コンストラクタ
classdef ranger
properties % メンバ変数
color;
skill;
end
methods
function ranger(self, color_, skill_)
self.color = color_;
self.skill = skill_;
end
function fight(self)
~~~
end
end
end
clear
% 赤レンジャーの実体化
akaRanger = ranger(‘red‘,‘Kamehameha‘);
% 赤レンジャーに戦わせる(引数不要)
akaRanger.fight;
% 青レンジャーになってもらう
akaRanger.color = ‘blue‘;
ranger.m main.m
コンストラクタはクラス名と同じメソッド
19
付録 | 見やすいフォントに変更しよう
• 1とl,0とOなど,見分けにくい文字が多いと大変!
• MATLABの表示フォントを変更してみよう
見やすいフォントの例
• consolas
• メイリオ
• Osaka-等幅
など
20
• 等差数列
• ゼロベクトル(行列)
付録 | 便利なコマンド集
>> a=1:2:9
入力 a=
1 3 5 7 9
出力
(初項):(公差):(末項)
形式
例
zeros(行,列)
形式
>> b=zeros(2,3)
入力 b =
0 0 0
0 0 0
出力
例
21
付録 | 基本構造①
• 条件分岐(IF)
• 繰り返し(FOR)
22
disp(’Please input 1’)
x = input(prompt)
if x == 1
disp(’Thanks’)
else
disp(’Nooo! ’)
end
if 条件A
(条件Aに合致したときの処理)
else if 条件B
(条件Bに合致したときの処理)
else
(条件AにもBにも合致しないときの処理)
end
形式 例
for (変数)=(初項):(公差):(末項)
(繰り返す処理)
end
形式 NUM = 100;
x = zeros(NUM);
x(1) = 1;
x(2) = 1;
for i = 3:NUM
x(i) = x(i-1)+x(i-2);
end
例
公差は省略可能.
省略した場合,公差は自動的に1になる.
付録 | 基本構造②
• 条件分岐(SWITCH)
• 繰り返し(WHILE)
23
disp(’Input 1,2,3,or 4’)
x = input(prompt)
switch x
case 1
disp(’You Win!’);
otherwise
disp(’You Lose... ’)
end
switch (変数)
case (値1)
(変数==値1のときの処理)
case (値2)
(変数==値2のときの処理)
otherwise
(どれにも当てはまらないときの処理)
end
形式 例
while (条件)
(条件を満たす間,繰り返す処理)
end
形式 x = 0;
while x < 100
x = x + 1;
end
例
付録 | 論理演算子など
• 等しい
• 等しくない
• 不等号
• AND(かつ)
• OR(または)
24
x == 1
x ~= 1
x < 1 x > 1
x <= 1 x >= 1
x == 1 && y ==2
x == 1 || y ==2
AND
OR
x != 1 とする言語もあるので注意

More Related Content

PDF
Design Principles for a High-Performance Smalltalk
PDF
Pat2 ก.พ. 63
PDF
คู่มือการใช้โปรแกรม ActivInspire บน Active Board
PDF
Functional Smalltalk
PDF
Bloc for Pharo: Current State and Future Perspective
PDF
Volleyball vocabulary
PDF
初心者講習会資料(Osaka.r#6)
PDF
【SIROK技術勉強会 #4】機械学習と線形代数の基礎
Design Principles for a High-Performance Smalltalk
Pat2 ก.พ. 63
คู่มือการใช้โปรแกรม ActivInspire บน Active Board
Functional Smalltalk
Bloc for Pharo: Current State and Future Perspective
Volleyball vocabulary
初心者講習会資料(Osaka.r#6)
【SIROK技術勉強会 #4】機械学習と線形代数の基礎

Similar to Matlab講習2021 (20)

PDF
あまぁいRcpp生活
PDF
StatGenSummerSchool2023_Rsoftware.pdf
PPT
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
PDF
マイクロマウスのための MATLAB/Simulink 講座 第1回 - MATLAB入門
PPTX
統計環境R_はじめの一歩2016
DOCX
Ⅰ. Rの基礎 2017
PPT
K010 appstat201201
PPTX
Pythonとdeep learningで手書き文字認識
PDF
初心者講習会資料(Osaka.R#5)
PDF
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
PPTX
【Deep Learning (MIT Press)】線形代数 2.1~2.7
PDF
Good coding for research
PDF
10分で分かるr言語入門ver2.9 14 0920
PDF
PFI Christmas seminar 2009
PDF
Nagoya.R #8 入門者講習資料
PDF
初心者講習会資料(Osaka.R#7)
PDF
Datamining 5th knn
PDF
Tokyor23 doradora09
PPTX
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
あまぁいRcpp生活
StatGenSummerSchool2023_Rsoftware.pdf
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
マイクロマウスのための MATLAB/Simulink 講座 第1回 - MATLAB入門
統計環境R_はじめの一歩2016
Ⅰ. Rの基礎 2017
K010 appstat201201
Pythonとdeep learningで手書き文字認識
初心者講習会資料(Osaka.R#5)
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
【Deep Learning (MIT Press)】線形代数 2.1~2.7
Good coding for research
10分で分かるr言語入門ver2.9 14 0920
PFI Christmas seminar 2009
Nagoya.R #8 入門者講習資料
初心者講習会資料(Osaka.R#7)
Datamining 5th knn
Tokyor23 doradora09
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
Ad

Matlab講習2021