More Related Content Similar to Matlab講習2021 (20) Matlab講習20212. はじめに 2
MATLABは,科学計算に特化した数値解析ソフトウェア.
• 数値解析(シミュレーション)
• 信号処理
• データ解析
• 機械学習
様々な計算に対応する
多用なツールボックスを備えている.
最近では,ロボティクスの需要に応えるため,
Robotics toolboxや,ROS (Robot OS)との連携もできるようにアップデートされた.
• データの扱いが簡単
変数の型を指定する必要がない
• プログラミングが簡単
Pythonのように,シンプルなコードで書ける
• 描画が得意
きれいなプロットを簡単に作成可能
5. とりあえずなにか計算してみる
1. 変数を作る
1. コマンドウィンドウに と入力する.
2. コマンドウィンドウに と入力する.
2. 計算する
1. 足し算をしてみる.
2. 掛け算をしてみる.
3. 新しい変数に,計算結果を代入する
>> a=2;
>> b=3;
>> a+b
>> a*b
コマンドの後ろに”;”をつけると,結果が表示されない.
計算結果がいちいち出てくると鬱陶しいときは便利.
>> c=a/b
加算: +
減算: -
乗算: *
除算: /
5
6. 行列計算をしてみる | ベクトルと行列の定義
• 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 と入力するとどうなるだろうか.
7. 準備: 行列𝐵を定義しておきます.
行列計算をしてみる | 行列の演算
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
8. 1. スカラーとベクトルの掛け算は, と書ける.
2. ベクトルの積を計算してみよう.
1. 二つの縦ベクトル を定義する.
2. ベクトル𝑢と𝑣の内積は,
3. ベクトル𝑢と𝑣の外積は,
行列計算をしてみる | ベクトルの演算
>> a*p
>> u=[2;3;4] >> v=[5;6;7]
>> dot(u,v)
>> cross(u,v)
ベクトル𝑢と𝑣の内積は,𝑢 ∙ 𝑣 = 𝑢⊤𝑣で求められる.すなわち,
でも計算できる.
>> u’*v
8
15. 練習問題
1. 行列 𝑄 =
0 1 1
−4 4 2
2 −1 1
を対角化しよう
2. 4次のルンゲクッタ法アルゴリズムを組み,微分方程式を解いてみよう
可能なら,解析解を求め,数値計算の結果と並べてプロットしてみよう
(数値計算は十分な精度で計算できているか?)
15
(2) 𝑥 + 2𝑥 + 3𝑥 = 𝑒−2𝑡
初期値は𝑥 𝑡 = 1, 𝑥 𝑡 = 0
(1) 𝑥 − 2𝑥 = 𝑒𝑡
初期値は𝑥 𝑡 = 0
16. 構造体でプログラムをシンプルに書く
• 関数の引数が長いと書くのが大変
• 「構造体」を使ってまとめてしまえば,簡単に書き表せる
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
19. 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
20. 付録 | 見やすいフォントに変更しよう
• 1とl,0とOなど,見分けにくい文字が多いと大変!
• MATLABの表示フォントを変更してみよう
見やすいフォントの例
• consolas
• メイリオ
• Osaka-等幅
など
20
21. • 等差数列
• ゼロベクトル(行列)
付録 | 便利なコマンド集
>> a=1:2:9
入力 a=
1 3 5 7 9
出力
(初項):(公差):(末項)
形式
例
zeros(行,列)
形式
>> b=zeros(2,3)
入力 b =
0 0 0
0 0 0
出力
例
21
22. 付録 | 基本構造①
• 条件分岐(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になる.
23. 付録 | 基本構造②
• 条件分岐(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
例
24. 付録 | 論理演算子など
• 等しい
• 等しくない
• 不等号
• 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 とする言語もあるので注意