#### Transcript Slides

```MATLAB 程式設計：進階篇

[email protected]
http://mirlab.org/jang

MATLAB 程式設計進階篇：線性代數





A1，滿足下列恆等式：
AA1  I
A1 A  I


1

1

MATLAB 程式設計進階篇：線性代數


inv：


MATLAB 的 inv 指令可用於計算反矩陣

A = pascal(4);
% 產生 4x4 的 Pascal 方陣
B = inv(A)



B=
4.0000 -6.0000
4.0000 -1.0000
-6.0000 14.0000 -11.0000
3.0000
4.0000 -11.0000 10.0000 -3.0000
-1.0000
3.0000 -3.0000 1.0000
Note that det(pascal(n)) is always equal to 1.
MATLAB 程式設計進階篇：線性代數


inv：



A = [1 2 3; 4 5 6; 7 8 9];
B = inv(A)


Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.541976e-018.
> In inv02 at 2
B=
1.0e+016 *
-0.4504 0.9007 -0.4504
0.9007 -1.8014 0.9007
-0.4504 0.9007 -0.4504
MATLAB 程式設計進階篇：線性代數


det：



A = [1 3 4; -3 -4 -1; 2 2 5];
d = det(A)


d=
29
MATLAB 程式設計進階篇：線性代數



A 
 A * adj ( A)  A * I
A
1



Matrix
Equivalent statements



A is singular
A1 does not exist
A 0
MATLAB 程式設計進階篇：線性代數

Take a 3x3 matrix A for example:
 a11 a12
A  a21 a22
a31 a32
a13 
a23 
a33 
 A11
 cofactor( A)   A21
 A31
A12
A22
A32
 adj  A  cofactor( A)T
 A * adj ( A)  A * I
 a22

a
A13   32
 a12

A23   
a
A33   32
 a12

 a22
a23
a33
a13
a33
a13
a23

a21 a23
a31 a33
a11 a13
a31 a33
a
a
 11 13
a21 a23
A  a11 A11  a12 A12  a13 A13  ...
a21 a22 

a31 a32 
a11 a12 


a31 a32 
a11 a12 

a21 a22 
MATLAB 程式設計進階篇：線性代數
How to Prove the Formula?
How to prove A * adj ( A)  A * I ?
 a11 a12 a13   A11 A21 A31 
A * adj ( A)  a21 a22 a23   A12 A22 A32 
 a31 a32 a33   A13 A23 A33 
 a11 A11  a12 A12  a13 A13 a11 A21  a12 A22  a13 A23
 a21 A11  a22 A12  a23 A13 a21 A21  a22 A22  a23 A23
 a31 A11  a32 A12  a33 A13 a31 A21  a32 A22  a33 A23
A

0
 0
0
A
0
0

0   A *I
A 
a11 A31  a12 A32  a13 A33 
a21 A31  a22 A32  a23 A33 
a31 A31  a32 A32  a33 A33 
Note that :
A  a11 A11  a12 A12  a13 A13
 a21 A21  a22 A22  a23 A23
 a31 A31  a32 A32  a33 A33
MATLAB 程式設計進階篇：線性代數
Quiz Candidates

If A is a 3x3 matrix, what is adj(A)?
 a11 a12

A  a21 a22
a31 a32

a13 

a23   adj  A  ?
a33 
And can you demonstrate that
adj  A* A  A * I
MATLAB 程式設計進階篇：線性代數




A = [1 3 4; -3 -4 -1; 2 2 5];
det(A)*inv(A)


ans =
-18
13
2
-7
-3
4
13
-11
5
MATLAB 程式設計進階篇：線性代數





Format，即分子和分母都是整數的分數）來表示，即

A = [1 3 4; -3 -4 -1; 2 2 5];
format rat
% 以有理形式表示數值
inv(A)
format short
% 改回預設的數值表示形式
ans =

-18/29
-7/29
13/29
13/29
-3/29
-11/29
2/29
4/29
5/29
MATLAB 程式設計進階篇：線性代數



Ax  x

A  I ) x  0


Singular，上式才會有解。當 A  I是 Singular

A  I  0
MATLAB 程式設計進階篇：線性代數



 Ax1  1 x1



 Ax   x
n n
 n


|  |
X   x1  xn 
 |  | 
1 0 0 
D   0  0 
 0 0 n 

（Eigenvalue decomposition）：
A  XDX 1
MATLAB 程式設計進階篇：線性代數



If A is symmetric, then X
Suppose A is 3x3, then
1
 XT
A  XDX 1  XDX T
|
  x1
 |
|
x2
|
|  1
x3   0
|   0
0
2
0
0  


0  
3  
|   1 x1T  



T
x2 x3   2 x2  
|
|   3 x3T  
 1 x1 x1T  2 x2 x2T  3 x3 x3T
|
  x1
 |
|
x1T
x2T
x3T



 
MATLAB 程式設計進階篇：線性代數


eig：


MATLAB 的 eig 指令可用於計算矩陣的固有值及固有

A = magic(5);
lambda = eig(A)


lambda =
65.0000
-21.2768
-13.1263
21.2768
13.1263
MATLAB 程式設計進階篇：線性代數




A = magic(5);
[X, D] = eig(A)


X=
-0.4472
-0.4472
-0.4472
-0.4472
-0.4472
0.0976
0.3525
0.5501
-0.3223
-0.6780
-0.6330
0.6780
-0.2619
0.5895
0.3223
-0.1732
-0.3915
-0.5501
0.3915
0.1732
-0.3525
-0.5895
0.2619
-0.0976
0.6330
D=
65.0000
0
0
0 -21.2768
0
0
0 -13.1263
0
0
0
0
0
0
0
0
0
21.2768
0
0
0
0
0
13.1263

X*D*inv(X)是否等於A。
MATLAB 程式設計進階篇：線性代數


Try “eigshow” to plot the trajectory of a
linear transform in 2D
MATLAB 程式設計進階篇：線性代數



 Av  u
 t
 A u  v


 AV  U
 T
 A U  V


MATLAB 程式設計進階篇：線性代數



UU T  I
 T
VV  I


A  U V

T

MATLAB 程式設計進階篇：線性代數


svd：
svd 指令可用於計算矩陣的奇異值及奇異向量



A = [3 5; 4 7; 2 1; 0 3];

[U, S, V] = svd(A)

U*S*V’是否等於A。

U=
S=
V=
-0.5577
0.0881
-0.6954
0.4447
10.4517
0
-0.7714
0.0333
0.2489
-0.5848
0
-0.1771
0.6471
0.5453
0.5025
0
0
-0.2504
-0.7565
0.3965
0.4558
0
0
1.9397
-0.4892
0.8722
-0.8722
-0.4892
MATLAB 程式設計進階篇：線性代數




svd 指令加入另一個輸入引數 0，使其產生的 U 及 S

A = [3 5; 4 7; 2 1; 0 3];
[U, S, V] = svd(A, 0)


U=
-0.5577
-0.7714
-0.1771
-0.2504
0.0881
0.0333
0.6471
-0.7565
S=
10.4517
0
V=
-0.4892
-0.8722
0
1.9397
0.8722
-0.4892

U*S*V’是否等於A。
MATLAB 程式設計進階篇：線性代數





AX = B


MATLAB 程式設計進階篇：線性代數





m×n、n×1、m×1，其中 m 代表方程式的數目，n 則是





2
Solution）X，使得 AX  B 為最小值

MATLAB 程式設計進階篇：線性代數




MATLAB 提供一個反斜線運算（Back Slash Operator，




MATLAB 也提供了斜線運算（Slash Operator，即「/」）



MATLAB 程式設計進階篇：線性代數





MATLAB

AX = B
X = A\B（左除）
XA = B
X = B/A（右除）

「右除」
MATLAB 程式設計進階篇：線性代數





A = vander(1:3);
B = [6; 11; 18];
X = A\B



X=
1.0000
2.0000
3.0000
>> A*X – B
Ans =
0
0
0

y  x2  2x  3
MATLAB 程式設計進階篇：線性代數






A = [2 -1; 1 -2; 1 1];
B = [2; -2; 1];
X = A\B



X=
1.0000
1.0000

2

MATLAB 程式設計進階篇：線性代數






A = [1 2 3; 4 5 6];
B = [7; 8];


X = A\B

X=
-3.0000
0
3.3333

MATLAB 程式設計進階篇：線性代數



3x - 4y = 2
4x  y = - 3
x + y =1

Hint : The shortest distance between
a point  x0 , y0  and a line ax  by  c  0
is

2
ax0  by0  c
a b
2
2
2
.
2
 3x - 4y - 2   4x  y  3   x  y  1 
L ( x, y )  



A
x

b
, where
 

 
5
17  
2 

 
4/5
 3/ 5
 2/5 
 x




A  4 / 17 1 / 17 , b   3 / 17 , x   
y

 1 / 2 1 / 2 
 1 / 2 
2
MATLAB 程式設計進階篇：線性代數





Y為最小


X：三條直線、三點
Y：距離和、距離平方和






X：三邊、三頂點
Y：距離和、距離平方和
MATLAB 程式設計進階篇：線性代數



det
norm
normest
null

Null 空間
orth

（Orthonormal Basis）
rank

rref
Reduced Row Echelon
Form
subspace

trace

MATLAB 程式設計進階篇：線性代數



expm
funm
logm
sqrtm

「\」及「/」

Cholesky 分解
chol

choline

MATLAB 程式設計進階篇：線性代數



cond
condest
Inv
lu
luinc
qr
lscov
nnls

Number，以測試其接

1-norm
Condition
Number 的估計

LU 分解

QR 分解
QR 分解

```