MATLAB 期末復習#
1 行列の入力方法#
>>a=[1 2 3;4 5 6; 7 8 9]
>>a=[1,2,3;4,5,6; 7,8,9]
>>a=[1:3;4:6;7:9]
>> a=[1 2 3
4 5 6
7 8 9]
a =
1 2 3
4 5 6
7 8 9
>>
2 行列の乗算#
A * B
A(m x n) B(p x q) はn=pのときのみ乗算可能 線形代数における行列の乗算
A .* B
サイズが完全に一致し、対応する要素を乗算
3 行列の転置#
実数行列の転置#
A'
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> A'
ans =
1 4 7
2 5 8
3 6 9
複素数行列の転置#
A'
共役転置
A.'
非共役転置
>> A = [1+i 2+i 3+i; 4+i 5+i 6+i; 7+i 8+i 9+i]
A =
1.0000 + 1.0000i 2.0000 + 1.0000i 3.0000 + 1.0000i
4.0000 + 1.0000i 5.0000 + 1.0000i 6.0000 + 1.0000i
7.0000 + 1.0000i 8.0000 + 1.0000i 9.0000 + 1.0000i
>> A'
ans =
1.0000 - 1.0000i 4.0000 - 1.0000i 7.0000 - 1.0000i
2.0000 - 1.0000i 5.0000 - 1.0000i 8.0000 - 1.0000i
3.0000 - 1.0000i 6.0000 - 1.0000i 9.0000 - 1.0000i
>> A.'
ans =
1.0000 + 1.0000i 4.0000 + 1.0000i 7.0000 + 1.0000i
2.0000 + 1.0000i 5.0000 + 1.0000i 8.0000 + 1.0000i
3.0000 + 1.0000i 6.0000 + 1.0000i 9.0000 + 1.0000i
4 ランダム分布#
一様分布#
>> rand(5) [0,1]の間の一様分布を生成
ans =
0.8869 0.0768 0.3996 0.6761 0.7636
0.0021 0.7990 0.6387 0.1379 0.8417
0.7377 0.4168 0.6586 0.1675 0.7409
0.4085 0.2020 0.3824 0.3339 0.2610
0.5768 0.7958 0.4104 0.1429 0.9621
正規分布#
>> randn(5) N[0,1]に従う標準正規分布を生成
ans =
-0.3534 -2.1492 0.2811 -0.2420 0.1620
-0.5709 -0.5303 1.1760 0.5279 -0.0394
0.8749 0.2686 0.8725 0.5440 0.2960
-1.0153 0.2161 -0.9298 1.5400 -1.1293
0.7904 0.7901 -0.1329 -0.5585 -1.0672
平均3、分散9の正規分布
x~N(μ,σ²)
ax+b~N(aμ+b,(aσ)²)
aμ+b = 平均
(aσ)² = 分散
a*randn(p,q)+b
p,q 行列のサイズはp*q
>> 3*randn(2,3)+3
ans =
6.5279 5.1196 4.8656
5.5406 -0.0497 5.2151
5 行列式#
det()
6 行列の逆#
inv
正方行列かつ非特異
pinv()
特異、計算結果は擬似逆
7 行列の格納方法#
行列は列ごとに格納される
8 行列の合計#
行列の合計も列ごとに合計される
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> sum(A)
ans =
12 15 18
9 行列の縮小#
>> a = [1:4;5:8;9:12;13:16]
a =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> b = a(2:3,3:4) 前の2:3は2行と3行、後の3:4は3列と4列
b =
7 8
11 12
行または列を削除
a =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> a(2,:)=[] 行を削除
a =
1 2 3 4
9 10 11 12
13 14 15 16
>> a(:,2)=[] 列を削除
a =
1 3 4
9 11 12
13 15 16
10 AND、OR、NOT 演算#
非零はすべて1として扱い、その後AND、OR、NOT論理演算を行うことに注意
11 diag
関数を使用して行列を生成#
例題: diag
などの関数を利用して次の行列を生成:
a = [0 0 8; 0 -7 5; 2 3 0]
b = [2 0 4; 0 5 0; 7 0 8]
その後、reshape
関数を使用してそれらを行ベクトルに変換
使用する関数
使用する関数:
d=diag(A)、Aが行列の場合、dはAの対角線要素から構成されるベクトル、Aがベクトルの場合、dはベクトルAを対角線上の要素とする対角行列
B = fliplr(A)、行列Aの列を垂直軸を中心に左右反転
Aが行ベクトルの場合、fliplr(A)はAの要素の順序を反転させる。
Aが列ベクトルの場合、fliplr(A)はAと等しい。
filpup() 行列を上下反転
B = reshape(A,...,[],...)、特定の次元を指定した後、残りの次元の長さをプレースホルダー[]で表し、次元の積がprod(size(A))に等しくなるようにする。
>> A=diag([8 -7 2]) %行列を生成。要素は対角線上に位置する
A =
8 0 0
0 -7 0
0 0 2
>> B=A+diag([5 3],-1) %副対角線行列を生成し、Aと加算
B =
8 0 0
5 -7 0
0 3 2
>> a=fliplr(B) %行列を反転
a =
0 0 8
0 -7 5
2 3 0
>> A=reshape(a,1,9) %行列を行ベクトルに並べる、`a.'はaを転置、1は1行を指定、9は要素9個を指定
A =
0 0 2 0 -7 3 8 5 0
>> q = diag([2 0 8]) % 主対角線要素
q =
2 0 0
0 0 0
0 0 8
>> r = diag([4 5 7]) % 副対角線要素
r =
4 0 0
0 5 0
0 0 7
>> w = fliplr(r) % 副対角線要素を左右反転
w =
0 0 4
0 5 0
7 0 0
>> b = q+w % 2つの行列を加算
b =
2 0 4
0 5 0
7 0 8
>> B=reshape(b.',1,[]) % 行ベクトルに変換
B =
2 0 4 0 5 0 7 0 8
12 変数名の要件#
MATLAB では、変数名は数字、アルファベット、アンダースコアのみで構成され、必ずアルファベット
で始まる必要があります。MATLAB の変数は大文字と小文字を区別します。
13 .m ファイル#
.m ファイルはスクリプトファイルと関数ファイルに分けられ、スクリプトファイルと関数ファイルは同じフォルダ内に置く必要があります。
スクリプトファイル#
関数ファイル#
関数ファイルの形式
function [] = 関数名()
end
14 曲線描画#
plot#
plot(x,y)
plot(x1,y1,'op1',x2,y2,'op2',...,xn,yn)平面図形を描画
y1=2x+1
x = 1:0.1:10
y1 = 2.*x+1
y2=...
plot(x1,y1,...,x2,y2,...)
op 線型 色 点型
線型
- 実線
: 虚線
-. 点線
-- 破線
点
+
*
.
。
x
s
d 菱形
v
^
<
>
P 五角形
h 六角形
色
r 赤
g 緑
b 青
k 黒
y 黄
w 白
m マゼンタ
c シアン
plot3#
pot3 (x1,y1,z1,'op1',x2,y2,z2,'op2',...,xn,yn,zn,'opn') 空間図形を描画
fplot#
fplot ('fun',[a,b]) % 関数 fun を [a,b] の範囲で描画
fplot(@(x) 2*exp(-0.5*x)*sin(2*pi*x),[0,2*pi],'gd-')
15 曲面描画#
平面グリッドの生成#
meshgrid(x,y)
x = a:ステップ:b;
y = c:ステップ:d;
[x,y] = meshgrid(x,y);
x = [1 2 3 4]
y = [2 4 6]
[x y] = meshgrid(x,y);
グリッド曲線の描画#
mesh(x,y,z)
塗りつぶし型曲面の描画#
surf(x,y,z)
平面等高線の描画#
contour(x,y,z)
3D 等高線の描画#
contour3(x,y,z)
複数の図形を表示#
subplot(グリッド列,グリッド行,位置)
subplot(2,2,3)% 2列2行のグリッドの3番目の位置に表示
タイトルの追加#
title ("タイトル")
X 軸ラベルの追加#
xlabel ("x 軸ラベル")
Y 軸ラベルの追加#
ylabel ("y 軸ラベル")
スケール範囲の調整#
axis(Xmin,Xmax,Ymin,Ymax)
配列の事前割り当て#
y=zeros(size(x))