MATLAB第十一課:線性迴歸方程式與線性系統
目標:
- 線性方程
- 線性系統
一、線性方程
Linear Equation:
給定一個線性方程的例子:
把線性方程寫成矩陣的形式。
通常,我們求解線性方程時,A和b是已知的,x是未知的。
Solving Linear Equations:
Successive elimination (through factorization) :逐次消去(通過因式分解)
Gaussian Elimination:高斯消去
例子:給定一個線性方程式,寫成增廣矩陣。然後將係數部分化簡成單位矩陣。得到的b部分的值,就是方程式的解。
Gaussian Elimination – rref():使用MATLAB求解
>> A = [1 2 1;2 6 1;1 1 4];
>> b = [2; 7; 3];
>> R = rref([A b])
R =
1 0 0 -3
0 1 0 2
0 0 1 1
使用matlab的內嵌函式rref()求解出最終的矩陣形式,可以看到x=-3,y=2,z=1.
LU Factorization:LU分解
假設我們想要求解:
將矩陣A分解為2個三角矩陣:
問題就成為:
最後的求解方法:
- Solve ?−1? = ? to obtain ?
- Then solve ?? = ?
Lower and Upper Triangular Matrices :上下三角矩陣
上三角矩陣:
下三角矩陣:
How to Obtain ? and ??
矩陣L和U是通過一系列左乘獲得的。即
LU Factorization Example:
LU Factorization – lu():使用MATLAB求解LU分解
>> A = [1 1 1;2 3 5;4 6 8]; >> [L, U, P] = lu(A); >> L L = 1.0000 0 0 0.2500 1.0000 0 0.5000 0 1.0000 >> U U = 4.0000 6.0000 8.0000 0 -0.5000 -1.0000 0 0 1.0000 >> P P = 0 0 1 1 0 0 0 1 0
接下來:運用上邊的方法,寫出式子,求出x
Matrix Left Division: \ or mldivide():
求解一個線性方程使用因式分解:這種方法是經過多個步驟的,但是使用起來是最簡單的方法。
>> A = [1 2 1;2 6 1;1 1 4];
>> b = [2; 7; 3];
>> x = A\b
x =
-3.0000
2.0000
1.0000
矩陣分解函式:
Cramer的(逆)方法:
給定一個矩陣:
假設存在逆矩陣 如下式:
得出變數x為:
Inverse Matrix:
對於一個矩陣A,他的逆矩陣求解方法為:
det(A)為矩陣A的行列式,計算方法為:
逆矩陣的性質:
Solving Equations Using Cramer’s Method:
求解x
>> A = [1 2 1;2 6 1;1 1 4];
>> b = [2; 7; 3];
>> x = inv(A)*b
x =
-3.0000
2.0000
1.0000
Singular(奇異的):奇異矩陣沒有逆矩陣。當行列式為0或者約等於0時,我們就說矩陣的狀況不是很好。不存在逆矩陣。
對矩陣進行檢查:
>> A = [ 1 2 3; 2 4.0001 6; 9 8 7]; cond(A)
ans =
4.3483e+05
>> B = [ 1 2 3; 2 5 6; 9 8 7]; cond(B)
ans =
45.5623
可以看出B矩陣的情況更好些。
二、線性系統
Linear System
給定一個線性方程:
Eigenvalues and Eigenvectors(特徵值和特徵矩陣):
Interpretation of Eigenvalues and Eigenvectors(特徵值和特徵向量的求解):
Solving Eigenvalues and Eigenvectors :
使用matlab函式求解特徵值和特徵向量:eig()
>> [v,d]=eig([2 -12;1 -5])
v =
0.9701 0.9487
0.2425 0.3162
d =
-1 0
Matrix Exponential(矩陣的指數): expm() ?
一個典型的線性時不變系統通常被表述為:
A = [0 -6 -1; 6 2 -16; -5 20 -10];
x0 = [1 1 1]'; X = [];
for t = 0:.01:1
X = [X expm(t*A)*x0];
end
plot3(X(1,:),X(2,:),X(3,:),'-o');
xlabel('x_1'); ylabel('x_2'); zlabel('x_3');
grid on;
axis tight square