Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
Matlab演習
Matlabとは
•数値解析用ソフトウェアである
•大規模行列演算やグラフィック機能が充実している
⇒ 電磁気現象のシミュレーションを行う
ワークスペース:変数が一時的に蓄えられる
行列演算 3×3の行列が作成できる
要素番号は1から始まるので
>> a(2,2)
は “5” になる
行列の作り方
•以下のコマンドを実行すると行列[1,2,3,4,5]が作成される
>>mat = [1:1:5];
(>>mat = [1:5]としてもよい)
mat = [初期値:ステップ幅:終値]
•以下のコマンドにより3×3のゼロ行列,単位行列が作成される.
zmat, omatは任意の変数名.
>>zmat = zeros(3,3)
>>omat = ones(3,3)
演算子 目的 説明
+加算 A+Bは Aと Bを足します。
+単項プラス +Aは Aを返します。
-減算 A-Bは Aから Bを引きます。
-単項マイナス -Aは Aの要素の単項マイナスを求め
ます。
.*要素単位の乗算 A.*Bは Aと Bの要素単位の積を求め
ます。
.^要素単位のべき乗 A.^Bは要素が A(i,j) の B(i,j) 乗である
行列を求めます。
./配列の右除算 A./Bは要素が A(i,j)/B(i,j) の行列を求
めます。
.¥配列の左除算 A.¥Bは要素が B(i,j)/A(i,j) の行列を求
めます。
.'配列転置 A.'は Aの配列転置です。複素数行列
の場合、これは複素共役転置を含みません。
http://jp.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html?refresh=true
>> a*a
の結果と比較せよ
演算子 目的 説明
* 行列乗算 C = A*Bは、行列 Aと Bの線形代数の積です。Aの列数は Bの行数と等しくなければなりません。
/ 行列の右除算 x = B/Aは、式 xA = B の解です。行列 Aと Bの列数は同じでなければなりません。左除算演算子の場合はB/A = (A'¥B')'となります。
¥ 行列の左除算 x = A¥Bは、式 xA = B の解です。行列 Aと Bの行数は同じでなければなりません。
^ 行列のべき乗 Bがスカラーの場合、A^Bは Aの B乗です。Bがそれ以外の値の場合は、固有値および固有ベクトルを含む計算となります。
' 複素共役転置 A'は Aの線形代数の転置です。複素数行列の場合、これは複素共役転置となります。
http://jp.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html?refresh=true
線形代数学
cross 外積
dot 内積
kron Kroneckerテンソル積
surfnorm 3 次元表面の法線の計算と表示
tril 行列の下三角部分
triu 行列の上三角部分
transpose 転置
演習
• a=[1,0,0]とb=[0,1,0]の内積を求めよ
• aとbは直交ベクトル• 内積計算の答えはスカラ
•上記の行列a と bの外積を求めよ
• aとbは直交ベクトル• 外積計算の答えはベクトル• 外生計算の答えはaとbに対する直交ベクトル
制御構文 if文
if 真理値A
処理1
elseif 真理値B
処理2
else
処理3
end
a = 1;
if a == 1
b=1;
elseif a == 2
b=2;
else
b=0;
end
例題:構文:
制御構文 for文
for 初期値:ステップ幅:終了値
処理
end
j=0;
for i=1:1:10
j = j + i;
end
例題:構文:
3次元プロットのためのmeshgridによる行列作成
•以下のコマンドにより1次元行列x, yが作成できる
x=[-0.2:0.01:0.2];
y=[-0.2:0.01:0.2];
• このx, yから2次元平面の全ての点を表現する行列を作成するためには
[X, Y] = meshgrid(x, y)
とする.ワークスペースのX, Yの行列サイズを確認せよ.
3次元描画
[X,Y] = meshgrid(-2:0.2:2,-2:0.2:2);Z = X.*exp(-X.^2 - Y.^2);figure(1);surface(X,Y,Z);figure(2);contour(X,Y,Z);
メッシュグリッドに対応したデータを作成し描画することができる
mファイルの作成
• コマンドラインに
>> edit
と入力するとエディタが立ち上がる.
• コマンドを記述し実行するとコマンドを上から下に順番に実行できる.
• clear all; と記述するとワークスペースの変数が消去されるので,1行目に記述すると良い.
ベクトル描画
• 2次元ベクトルを表示する場合は
quiver(x0,y0, Δx1, Δy1)
• 3次元ベクトルを表示する場合は
quiver3(x0,y0,z0, Δx1, Δy1, Δz1)
例えば
a=[1,0,0];
quiver3(0,0,0,a(1),a(2),a(3));
と入力すると1本ベクトルが描かれる
(x0,y0) (Δx1, Δy1)
ベクトル描画•続けてquiver3(0,0,0,b(1),b(2),b(3))と入力すると前のベクトルが消えてしまう
•複数のベクトルを重ね書きするためにはhold onコマンドを一度だけ実行する必要がある
figure(1);
a=[1,0,0];
b=[0,1,0];
quiver3(0,0,0,a(1),a(2),a(3))
hold on
quiver3(0,0,0,b(1),b(2),b(3))
c=cross(a,b);
quiver3(0,0,0,c(1),c(2),c(3))
ベクトル場の表示
[X,Y] = meshgrid(-2:0.25:2,-1:0.2:1);Z = X.* exp(-X.^2 - Y.^2);[U,V,W] = surfnorm(X,Y,Z);figurequiver3(X,Y,Z,U,V,W)hold onsurf(X,Y,Z)
plotコマンド
• 2次元のグラフを作るときに利用する
t=[0:pi/100:2*pi-pi/100];
y=sin(t);
plot(t,y)
アニメーション
figure;
hold on
for t=0:pi/100:2*pi-pi/100
plot(t,sin(t),'ro');
pause(0.1);
end