线性代数在工程应用上十分广泛,在坐标系转换,深度学习,求解算法的优化解方面有着大量应用。因此掌握线性代数的基本理论,并且具有解决实际工程问题的能力尤为重要。
{ x 1 + x 2 = 1 x 1 − x 2 = 3 − x 1 + 2 x 2 = − 3 \left\{\begin{matrix}x_{1}+x_{2}=1\\ x_{1}-x_{2}=3\\ -x_{1}+2x_{2}=-3\end{matrix}\right. ⎩ ⎨ ⎧x1+x2=1x1−x2=3−x1+2x2=−3
以上是无解的,即方程组不相容,但有近似解-----最小二乘解!
对某一城市的交通流量分析:
节点A: x 1 + 450 = x 2 + 610 x_{1}+450=x_{2}+610 x1+450=x2+610
节点B: x 2 + 520 = x 3 + 480 x_{2}+520=x_{3}+480 x2+520=x3+480
节点C: x 3 + 390 = x 4 + 600 x_{3}+390=x_{4}+600 x3+390=x4+600
节点D: x 4 + 640 = x 1 + 310 x_{4}+640=x_{1}+310 x4+640=x1+310
列出方程组是:
{ x 1 − x 2 = 160 x 2 − x 3 = − 40 x 3 − x 4 = 210 x 4 − x 1 = − 330 \left\{\begin{matrix}x_{1}-x_{2}=160\\ x_{2}-x_{3}=-40\\ x_{3}-x_{4}=210\\ x_{4}-x_{1}=-330\end{matrix}\right. ⎩ ⎨ ⎧x1−x2=160x2−x3=−40x3−x4=210x4−x1=−330
按照 A x = b Ax=b Ax=b的格式转化成矩阵形式
[ 1 − 1 0 0 0 1 − 1 0 0 0 1 − 1 − 1 0 0 1 ] [ x 1 x 2 x 3 x 4 ] = [ 160 − 40 210 − 330 ] \begin{bmatrix}1 & -1 & 0 & 0\\ 0& 1 & -1 & 0\\ 0& 0 & 1 & -1\\ -1& 0& 0& 1\end{bmatrix}\begin{bmatrix}x_{1}\\ x_{2}\\ x_{3}\\ x_{4}\end{bmatrix}=\begin{bmatrix}160\\ -40\\ 210\\ -330\end{bmatrix} 100−1−11000−11000−11 x1x2x3x4 = 160−40210−330
在 A x = b Ax=b Ax=b中, b b b代表常数,这是线性方程组。注意: A A A必须是方阵才能求逆。对其x的求解,可能出现无解,有解,多解的情况,不能用 x x x求 b / A b/A b/A
所以,可以用matlab相关函数求解,使用简化行列式的思路,对行矩阵变换!
b=[160;-40;210;-330];
U=rref([A,b]);
可以求出 U U U的简化行列式为:
U = [ 1 0 0 − 1 330 0 1 0 − 1 170 0 0 1 − 1 210 0 0 0 0 0 ] U=\begin{bmatrix}1 & 0 & 0 & -1 & 330\\ 0 & 1 & 0 & -1 & 170\\ 0 & 0& 1 & -1 & 210\\ 0& 0 & 0 & 0 & 0\end{bmatrix} U= 100001000010−1−1−103301702100
可以看出,简化后属于欠定方程,属于多解问题。
方法一:
X = B / A X=B/A X=B/A用逆矩阵来求(逆矩阵的前提是A是方阵)
逆矩阵的matlab函数是
V=inv(A)
A x = B Ax=B Ax=B可以求出 x = B / A x=B/A x=B/A
x=B*inv(A);
A x = b Ax=b Ax=b, 非齐次线性方程组
A x = 0 Ax=0 Ax=0, 齐次线性方程组
方法二:
也可以用行列式来判断解是否存在:
判断线性方程组的解是否存在和唯一:Ax=0
A是系数矩阵, ∣ A ∣ ≠ 0 \left | A \right |\neq 0 ∣A∣=0,解存在
在MATLAB中求行列式的值,用
det(A);
非齐次线性方程组Ax=b解存在且唯一的条件是 d e t ( A ) ≠ 0 det(A)\neq 0 det(A)=0
齐次线性方程组Ax=0有非0解的条件是 d e t ( A ) = 0 det(A)= 0 det(A)=0
A x = b Ax=b Ax=b变换后直线还是直线。
x = [ 0 1 1 0 0 0 0 1 1 0 ] x=\begin{bmatrix} 0 &1 & 1 & 0 & 0\\ 0 & 0 & 1 & 1& 0 \end{bmatrix} x=[0010110100]为顶点在(0,0),(1,0),(1,1),(0,1)的单位方块!
这就是变换矩阵的行列式的意义!
∣ A ∣ \left | A \right | ∣A∣是变换后面积的变化
在几何里面,因为矩阵的变换是Ax,所以
k [ 3 4 ] ≠ [ 4 5 ] k\begin{bmatrix}3\\ 4\end{bmatrix}\neq \begin{bmatrix}4\\ 5\end{bmatrix} k[34]=[45]
不能实现平移等线性变换,所以引入齐次坐标系!(增加一维)
R = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] R=\begin{bmatrix}cos\theta & -sin\theta & 0\\ sin\theta & cos\theta & 0\\ 0& 0 & 1\end{bmatrix} R= cosθsinθ0−sinθcosθ0001
(旋转是绕原点的)
M = [ 0 0 a 0 0 b 0 0 1 ] M=\begin{bmatrix}0 & 0 &a \\ 0& 0 & b\\ 0 & 0 & 1\end{bmatrix} M= 000000ab1
先旋转后平移,是 R ∗ M R*M R∗M,不是 R + M R+M R+M
eigshow(A);
在matlab中,可显示二维向量x沿单位圆转动时,经A左乘后在y平面上的形状。
x − y x-y x−y共线时, y = A x = λ x y=Ax=\lambda x y=Ax=λx, λ \lambda λ为特征值, x x x为特征向量
在matlab中,求取特征值和特征向量为
[P,lambada]=eig(A);
QR分解可以看成分解出新的坐标系!
在matlab中,求取结果是
[Q,R]=qr(A);
A = [ v 1 , v 2 ] = [ − 1 6 2 8 ] A=[v_{1},v_{2}]=\begin{bmatrix}-1 & 6\\ 2& 8\end{bmatrix} A=[v1,v2]=[−1268]
作qr分解:
Q = [ − 0.4472 0.8944 0.8944 0.4472 ] , R = [ 2.2361 4.4721 0 8.9443 ] Q=\begin{bmatrix} -0.4472 & 0.8944\\ 0.8944& 0.4472 \end{bmatrix},R=\begin{bmatrix} 2.2361 & 4.4721\\ 0& 8.9443 \end{bmatrix} Q=[−0.44720.89440.89440.4472],R=[2.236104.47218.9443]
从几何角度来看:
Q的第一列代表新成立的x坐标,第二列是垂直的y坐标!(即分解后的新坐标)