现代科学运算-matlab语言与应用
东北大学 http://www.icourses.cn/home/ (薛定宇)
《高等应用数学问题的MATLAB求解(第四版)》
代码可在matlab r2016b 运行。
零矩阵、幺矩阵及单位矩阵
A = zeros(n),
B = ones(n),
C = eye(n)
A = zeros(m, n)
B = ones(m, n)
C = eye(m, n)
A = zeros(size(B))
A = zeros(n, m, …, k)
例4-1 特殊矩阵的建立
% 生成一个3x8的零矩阵A,生成一个和A维数相同的单位矩阵B
A = zeros(3, 8),
B = eye(size(A))
% 注意: zeros() 和 ones() 也可用于多为数组的生成
随机元素矩阵
均匀分布随机数矩阵的输入
[0, 1]区间,A = rand(n), A = rand(n, m)
[a, b]区间, B = a + (b-a)*rand(n, m)
征态分布随机数矩阵的输入
标准征态分布N(0, 1): A = randn(n), A = randn(n, m)
N(μ,σ2):B=μ+σ∗randn(n,m) N ( μ , σ 2 ) : B = μ + σ ∗ r a n d n ( n , m )
对角元素矩阵
对角矩阵的数学描述
diag(a1,a2,⋯,an)=⎡⎣⎢⎢⎢⎢⎢a1a2⋱an⎤⎦⎥⎥⎥⎥⎥ d i a g ( a 1 , a 2 , ⋯ , a n ) = [ a 1 a 2 ⋱ a n ]
其中,所有的非对角元素都为0
diag()函数的使用
已知向量生成对角元素: A = diag(V)
已知矩阵提取对角元素列向量: V = diag(A)
生成主对角线上第k条对角线为v的矩阵: A = diag(v, k)
注意: k可为负整数
例4-2 diag()函数
diag()函数的不同调用格式
% 生成对角矩阵
C = [1 2 3];
V = diag(C)
% 对角元素提取
V1 = diag(V)
% 生成主对角线上第2条对角线为C的矩阵
C = [1 2 3];
V2 = diag(C, 2),
V3 = diag(C, -1)
Hankel矩阵
Hankel矩阵的一般形式
H=⎡⎣⎢⎢⎢⎢⎢c1c2⋮cnc2c3⋮cn+1⋯⋯⋱⋯cmcm+1⋮cn+m−1⎤⎦⎥⎥⎥⎥⎥ H = [ c 1 c 2 ⋯ c m c 2 c 3 ⋯ c m + 1 ⋮ ⋮ ⋱ ⋮ c n c n + 1 ⋯ c n + m − 1 ]
反对角线上元素相同
函数调用:
H = hankel(C)
H = hankel(C, R)
C(end) = R(1)
Vandermonde矩阵
Vandermonde矩阵的数学描述
V=⎡⎣⎢⎢⎢⎢⎢cn−11cn−12⋮cn−1ncn−22cn−22⋮cn−2n⋯⋯⋱⋯c1c2⋮cn11⋮1⎤⎦⎥⎥⎥⎥⎥ V = [ c 1 n − 1 c 2 n − 2 ⋯ c 1 1 c 2 n − 1 c 2 n − 2 ⋯ c 2 1 ⋮ ⋮ ⋱ ⋮ ⋮ c n n − 1 c n n − 2 ⋯ c n 1 ]
其中, vi,j=cn−ji,i,j=1,2,⋯,n v i , j = c i n − j , i , j = 1 , 2 , ⋯ , n
生成Vandermonde矩阵 V = vander(c)
相伴矩阵
一个首一化的多项式
P(s)=sn+a1sn−1+a2sn−2+⋯+an−1s+an P ( s ) = s n + a 1 s n − 1 + a 2 s n − 2 + ⋯ + a n − 1 s + a n
其相伴矩阵
Ac=⎡⎣⎢⎢⎢⎢⎢⎢⎢−a110⋮0−a201⋮0⋯⋯⋯⋱⋯−an−100⋮1−an00⋮0⎤⎦⎥⎥⎥⎥⎥⎥⎥ A c = [ − a 1 − a 2 ⋯ − a n − 1 − a n 1 0 ⋯ 0 0 0 1 ⋯ 0 0 ⋮ ⋮ ⋱ ⋮ ⋮ 0 0 ⋯ 1 0 ]
matlab函数: B = compan(p)
例4-5 由多项式构造相伴矩阵
考虑一个多项式 P(s)=2s4+4s2+5s+6 P ( s ) = 2 s 4 + 4 s 2 + 5 s + 6
求其相伴矩阵
非首一多项式,可以自动转换
P = [2 0 4 5 6];
A = compan(P)
符号矩阵输入
数值矩阵A转符号矩阵B: B = sym(A)
早期版本支持重载函数的方式,并置于目录@sym下,可编写compan, hankel, vander
最新版本这三个函数直接支持符号矩阵
任意矩阵输入
任意向量输入方法
行向量: A = sym(‘a%d’, [1, n])
列向量: A = sym(‘a%d’, [n, 1])
任意矩阵的输入方法
方阵输入: A = sym(‘a%d%d’, n)
任意矩阵输入: A = sym(‘a%d%d’, [n, m])
例4-7 任意矩阵的生成
输入如下任意矩阵
A=⎡⎣⎢⎢⎢a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44⎤⎦⎥⎥⎥ A = [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44 ]
B=⎡⎣⎢⎢⎢a11a21a31a41a12a22a32a42⎤⎦⎥⎥⎥ B = [ a 11 a 12 a 21 a 22 a 31 a 32 a 41 a 42 ]
C=⎡⎣⎢⎢⎢f11f21f31f41f12f22f32f42f13f23f33f43f14f24f34f44⎤⎦⎥⎥⎥ C = [ f 11 f 12 f 13 f 14 f 21 f 22 f 23 f 24 f 31 f 32 f 33 f 34 f 41 f 42 f 43 f 44 ]
A = sym('a%d%d', 4),
B = sym('a%d%d', [4,2]),
C = sym('f%d%d', [4, 4])
稀疏矩阵输入
稀疏矩阵:矩阵大部分元素为零,仅少部分元素非零.
稀疏矩阵输入: A = sparse(p, q, w)
稀疏矩阵与常规矩阵转换:B = full(A), A = sparse(B)
行列式
矩阵 A={aij} A = { a i j } 的行列式定义为
D=|A|=det(A)=∑(−1)ka1k1a2k2⋯ankn D = | A | = d e t ( A ) = ∑ ( − 1 ) k a 1 k 1 a 2 k 2 ⋯ a n k n
函数调用:
d = det(A), d = det(sym(A))
注意: 该函数可用于数值和符号运算,方法和A的类型一致
自动识别矩阵的形式,选择求解方法
例4-8 矩阵求行列式
A=⎡⎣⎢⎢⎢16594211714310615138121⎤⎦⎥⎥⎥ A = [ 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 ]
A = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1];
det(A)
det(sym(A))
例4-10 任意矩阵的行列式
任意4x4矩阵的行列式
A = sym('a%d%d', 4);
d = det(A)
代数余子式 A∗23 A 23 ∗
i = 2;
j = 3;
B = A;
B(i, :) = [];
B(:, j) = [];
A23 = (-1)^(i+j)*det(B)
% 下面语句也可求得代数余子式
syms a23;
A23_1 = simplify((d-subs(d, a23, 0))/a23)
矩阵的迹
假设一个方阵为 A={aij},i,j=1,2,⋯,n A = { a i j } , i , j = 1 , 2 , ⋯ , n
矩阵的迹定义为对角线元素之和:tr(A) = ∑i=1naij ∑ i = 1 n a i j
函数调用格式:t = trace(A)
迹也等于特征值的和:sum(diag(A))
矩阵的秩
矩阵A的秩:线性不相关的最大行(列)数
rank(A) =rc=rr = r c = r r
数值方法或符号方法: r = rank(A)
给定精度 ε ε 下求数值秩: r = rank(A, ε ε )
向量的范数
范数式测度 – 用一个值描述向量、矩阵的大小
函数ρ(x)为x向量的范数的条件: 函 数 ρ ( x ) 为 x 向 量 的 范 数 的 条 件 :
ρ(x)≥0且ρ(x)=0的充要条件是x=0 ρ ( x ) ≥ 0 且 ρ ( x ) = 0 的 充 要 条 件 是 x = 0
ρ(ax)=|a|ρ(x),a为任意标量 ρ ( a x ) = | a | ρ ( x ) , a 为 任 意 标 量
对向量x和y,有ρ(x+y)≤ρ(x)+ρ(y) 对 向 量 x 和 y , 有 ρ ( x + y ) ≤ ρ ( x ) + ρ ( y )
向量的p-范数
∥x∥∞=max1≤i≤n|xi| ‖ x ‖ ∞ = max 1 ≤ i ≤ n | x i |
∥x∥p=(∑i=1n|xi|p)1p,p=1,2,⋯, ‖ x ‖ p = ( ∑ i = 1 n | x i | p ) 1 p , p = 1 , 2 , ⋯ ,
矩阵的范数
对于任意非零向量x, 矩阵A的范数是
∥A∥=supx≠0∥Ax∥∥x∥ ‖ A ‖ = sup x ≠ 0 ‖ A x ‖ ‖ x ‖
其它常用范数
∥A∥1=max1≤j≤n∑i=1n|aij|,∥A∥2=smax(ATA)−−−−−−−−−√ ‖ A ‖ 1 = max 1 ≤ j ≤ n ∑ i = 1 n | a i j | , ‖ A ‖ 2 = s m a x ( A T A )
∥A∥∞=max1≤i≤n∑i=1n|aij|,∥A∥F=trace(ATA) ‖ A ‖ ∞ = max 1 ≤ i ≤ n ∑ i = 1 n | a i j | , ‖ A ‖ F = t r a c e ( A T A )
矩阵范数计算
s(X)为x矩阵的特征值, smax(ATA) s m a x ( A T A )
A矩阵的范数为矩阵AA^T其最大特征值
函数调用格式: ∥A∥2 ‖ A ‖ 2 N = norm(A)
选项可以是1,2, inf, ‘fro’: N = norm(A, opts)
注意: 早期版本norm()函数仅用于数值矩阵
矩阵特征多项式
由矩阵A的如下多项式:
c(s)=det(sI−A)=sn+c1sn−1+⋯+cn−1s+cn c ( s ) = d e t ( s I − A ) = s n + c 1 s n − 1 + ⋯ + c n − 1 s + c n
多项式c(s)是矩阵A的特征多项式
matlab下多项式由降幂排列的系数向量表示
c = poly(A)
c = charpoly(sym(A))
c = charpoly(sym(A), x)
矩阵多项式求解
矩阵多项式的数学表示:
B=a1An+a2An−1+⋯+anA+an+1I B = a 1 A n + a 2 A n − 1 + ⋯ + a n A + a n + 1 I
函数调用格式,A不能为符号矩阵
B = polyvalm(a, A)
其中,a = [ a1,a2,⋯,an,an+1 a 1 , a 2 , ⋯ , a n , a n + 1 ]是特征多项式的按降幂排列的系数
符号运算多项式求值
调用格式: B = polyvalmsym(p, A)
% 符号运算多项式求值
function B = polyvalmsym(p, A)
E = eye(size(A));
B = zeros(size(A));
n = length(A);
for i = n+1:-1:1
B = B + p(i)*E;
E = E*A;
end;
end
p为多项式系数向量
矩阵多项式点运算
点运算方式定义多项式运算
C = a1 a 1 x .^n + a2 a 2 x.^(n-1) + … + an+1 a n + 1
调用格式:C = polyval(a, x)
给出多项式p(符号运算工具箱):C = subs(p, s, x)
Cayley-Hamilton定理
若矩阵A的特征多项式为
f(x)=det(sI−A)=a1sn+a2sn−1+⋯+ans+an+1 f ( x ) = d e t ( s I − A ) = a 1 s n + a 2 s n − 1 + ⋯ + a n s + a n + 1
则 f(A)=0 f ( A ) = 0 , 即
a1An+a2An−1+⋯+anA+an+1I=0 a 1 A n + a 2 A n − 1 + ⋯ + a n A + a n + 1 I = 0
可以通过matlab验证任意低阶矩阵
例4-18 验证任意矩阵满足Cayley-Hamilton定理
验证一般5x5矩阵满足Cayley-Hamilton定理
A = sym('a%d%d', 5);
p = charpoly(A);
E = polyvalmsym(p, A);
norm(simplify(E))
矩阵的逆
逆矩阵数学描述 AC = CA = I
其中,A 是n x n 的非奇异方阵,那么 C=A−1 C = A − 1
函数表示: C = inv(A)
基本行变换(行阶梯型矩阵): H1=rref(H) H 1 = r r e f ( H )
例4-20 Hilbert矩阵的逆
% 求Hilbert矩阵的逆。
% 4 x4 Hilbert 矩阵数值解
H = hilb(4);
H1 = inv(H),
norm(H*H1 - eye(4))
% 13 x 13 Hilbert 矩阵
H = hilb(13);
H1 = inv(H);
n1 = norm(H*H1 - eye(size(H)))
H2 = invhilb(13);
n2 = norm(H*H2 - eye(size(H)))
% 警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND = 1.334996e-18。
符号运算
% 符号矩阵
% 7 x 7 Hilbert 矩阵
H = sym(hilb(7));
H1 = inv(H)
% 50 x 50 Hilbert 逆矩阵
H = sym(hilb(50));
norm(H*inv(H) - eye(size(H)))
例4-21 奇异矩阵的逆
求如下奇异矩阵的逆
A=⎡⎣⎢⎢⎢16594211714310615138121⎤⎦⎥⎥⎥ A = [ 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 ]
A = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1];
B = inv(A),
A*B
使用符号运算工具箱
A = sym(A);
inv(A)
% ans = FAIL
例4-22 符号矩阵的逆
推导如下 Hankel 矩阵的逆
A=⎡⎣⎢⎢⎢a1a2a3a4a2a3a40a3a400a4000⎤⎦⎥⎥⎥ A = [ a 1 a 2 a 3 a 4 a 2 a 3 a 4 0 a 3 a 4 0 0 a 4 0 0 0 ]
a = sym('a%d', [1, 4]);
H = hankel(a);
inv(H)
矩阵的广义逆
适用于奇异或矩形矩阵
如果存在ANA = A,则称 N为A矩阵的广义逆矩阵,记作: N=A− N = A −
不唯一
定义范数最小化指标
minN∥AN−I∥ min N ‖ A N − I ‖
Moore-Penrose广义逆
矩阵M为矩阵A的Moore-Penrose广义逆矩阵的条件:
(i) AMA = A
(ii) MAM = M
(iii) AM 和 MA 均为 Hermite 对称矩阵
记为 M=A+ M = A + , 又称 伪逆
Moore-Penrose 广义逆矩阵是唯一的
M = pinv(A), M = pinv(A, ϵ ϵ )
例4-24 奇异矩阵的伪逆
使用pinv()函数计算矩阵A的伪逆
A=⎡⎣⎢⎢⎢16594211714310615138121⎤⎦⎥⎥⎥ A = [ 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 ]
A = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1];
B = pinv(A),
A*B
伪逆检验
% 检验 Moore-Penrose 广义逆的三个条件
norm(A*B*A - A),
norm(B*A*B - B),
norm(A*B - (A*B)'),
norm(B*A - (B*A)')
% 检验 (A^+)^+ = A
pinv(pinv(A)), norm(ans - A)
长方形奇异矩阵的伪逆
A=⎡⎣⎢63−310−241−5248124⎤⎦⎥ A = [ 6 1 4 2 1 3 0 1 4 2 − 3 − 2 − 5 8 4 ]
% 求秩并求伪逆
A = [6, 1, 4, 2, 1; 3, 0, 1, 4, 2; -3, -2, -5, 8, 4];
rank(A)
iA = pinv(A),
norm(A*iA*A - A),
norm(iA*A - A'*iA')
norm(iA*A - A'*iA'),
norm(A*iA - iA'*A')
一般矩阵的特征值与特征向量
数学描述 Ax=λx A x = λ x
非零向量x是特征向量,数值 λ λ 是特征值
调用格式: d = eig(A) 或 [V, D] = eig(A)
例4-26 矩阵的特征值
计算下述矩阵的特征值与特征向量
A=⎡⎣⎢⎢⎢16594211714310615138121⎤⎦⎥⎥⎥ A = [ 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 ]
A = [16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1];
eig(A),
[v, d] = eig(A)
eig(sym(A)),
vpa(ans, 70),
[v, d] = eig(sym(A))
特征向量矩阵的应用
如果矩阵没有重复特征根,则 V−1AV=D V − 1 A V = D
特征向量矩阵可以将一般矩阵变换为对角矩阵
A = [16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1];
[v, d] = eig(sym(A))
s = inv(v)*A*v;
simplify(s)
特征向量不唯一
数值eig函数得出的特征向量是归一化的特征向量
符号矩阵特征值计算
假设已知向量 c=[1,c1,c2,c3] c = [ 1 , c 1 , c 2 , c 3 ]
可以构造出相伴矩阵
H=⎡⎣⎢−c110−c201−c300⎤⎦⎥ H = [ − c 1 − c 2 − c 3 1 0 0 0 1 0 ]
试求其特征值与特征向量矩阵
syms c1 c2 c3 real;
H = compan([1 c1 c2 c3]);
[V, D] = eig(H)
矩阵的广义特征向量问题
数学描述: Ax=λBx A x = λ B x
非零向量x是特征向量, 数值 λ λ 是特征值,
B 是正定对称矩阵
调用格式 d = eig(A, B)
或 [V, D] = eig(A, B)
例4-27 广义特征值
已知A, B,求广义特征值与特征向量矩阵
A=⎡⎣⎢⎢⎢5765710876810957910⎤⎦⎥⎥⎥,B=⎡⎣⎢⎢⎢25−356−1−4−2−121−3−23108⎤⎦⎥⎥⎥ A = [ 5 7 6 5 7 10 8 7 6 8 10 9 5 7 9 10 ] , B = [ 2 6 − 1 − 2 5 − 1 2 3 − 3 − 4 1 10 5 − 2 − 3 8 ]
B = [2, 6, -1, -2; 5, -1, 2, 3; -3, -4, 1, 10; 5, -2, -3, 8];
A = [5, 7, 6, 5; 7, 10, 8, 7; 6, 8, 10, 9; 5, 7, 9, 10];
[V, D] = eig(A, B),
norm(A*V - B*V*D)
矩阵相似变换与正交矩阵
矩阵的相似性的数学描述
相似变换不改变矩阵的特征值
X=B−1AB X = B − 1 A B
正交矩阵的数学描述
QHQ=I,QQH=I Q H Q = I , Q Q H = I
函数调用格式: Q = orth(A)
矩阵的三角分解
一般矩阵分解成下三角与上三角矩阵的积
数学描述: A = LU
其中
L=⎡⎣⎢⎢⎢⎢⎢1l21⋮ln11⋮ln2⋱⋯1⎤⎦⎥⎥⎥⎥⎥,U=⎡⎣⎢⎢⎢⎢⎢u11u12u22⋯⋯⋱u1nu2n⋮unn⎤⎦⎥⎥⎥⎥⎥ L = [ 1 l 21 1 ⋮ ⋮ ⋱ l n 1 l n 2 ⋯ 1 ] , U = [ u 11 u 12 ⋯ u 1 n u 22 ⋯ u 2 n ⋱ ⋮ u n n ]
三角分解的递推算法
递推初值
u1i=a1i,i=1,2,⋯,n u 1 i = a 1 i , i = 1 , 2 , ⋯ , n
递推计算公式
lij=aij−∑k=1j−1likukjujj,(j<i) l i j = a i j − ∑ k = 1 j − 1 l i k u k j u j j , ( j < i )
uij=aij−∑k=1i−1likukj,(j≥i) u i j = a i j − ∑ k = 1 i − 1 l i k u k j , ( j ≥ i )
三角分解的matlab求解
lu分解:
数学描述:A = LU
matlab求解: [L, U] = lu(A)
P为置换矩阵
数学表示: A=P−1LU A = P − 1 L U
matlab求解: [L, U, P] = lu(A)
例4-30 矩阵的三角分解
给定 A=⎡⎣⎢⎢⎢16594211714310615138121⎤⎦⎥⎥⎥ A = [ 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 ]
两种方法调用lu()函数
A = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1];
[L1, U1] = lu(A)
% 变换矩阵
[L2, U2, P2] = lu(A)
处理带有主元素的分解
A = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1];
% 有主元素和置换矩阵的
[L, U, P] = lu(A)
% 验证三角分解公式
inv(P)*L*U
% 三角分解的解析解
A = sym(A);
[L2, U2] = lu(A)
对称矩阵的三角矩阵–Cholesky分解
数学描述: A=LLT A = L L T
下三角矩阵:
L=⎡⎣⎢⎢⎢⎢⎢l11l21⋮ln1l22⋮ln2⋱⋯lnn⎤⎦⎥⎥⎥⎥⎥ L = [ l 11 l 21 l 22 ⋮ ⋮ ⋱ l n 1 l n 2 ⋯ l n n ]
其中 A 是对称矩阵
Cholesky分解的算法
对称矩阵的Cholesky分解算法
lii=aii−∑k=1i−1l2ik−−−−−−−−−√ l i i = a i i − ∑ k = 1 i − 1 l i k 2
lji=1ljj(aij−∑k=1j−1likljk),j<i l j i = 1 l j j ( a i j − ∑ k = 1 j − 1 l i k l j k ) , j < i
调用格式: D = chol(A)
例4-26 Cholesky分解
对如下A矩阵进行Cholesky分解
A=⎡⎣⎢⎢⎢9342360740602709⎤⎦⎥⎥⎥ A = [ 9 3 4 2 3 6 0 7 4 0 6 0 2 7 0 9 ]
A = [9, 3, 4, 2; 3, 6, 0, 7; 4, 0, 6, 0; 2, 7, 0, 9];
D = chol(A),
D1 = chol(sym(A))
一般矩阵变成相伴矩阵
如果找到一个列向量x
使得T为非奇异矩阵
T=[x,Ax,⋯,An−1x] T = [ x , A x , ⋯ , A n − 1 x ]
矩阵A可以转换成一个与类似相伴矩阵的形式
这样的x向量有无穷多个
例4-33 寻找变换矩阵
A=⎡⎣⎢⎢⎢5765710876810957910⎤⎦⎥⎥⎥ A = [ 5 7 6 5 7 10 8 7 6 8 10 9 5 7 9 10 ]
A = [5, 7, 6, 5; 7, 10, 8, 7; 6, 8, 10, 9; 5, 7, 9, 10];
while (1)
x = floor(2*rand(4, 1));
T = sym([x A*x A^2*x A^3*x]);
if rank(T) == 4
break;
end;
end;
T, A1 = inv(T)*A*T
矩阵对角化
矩阵A特征值互异,则特征向量矩阵T为非奇异矩阵,可将元矩阵变换成对角矩阵
含有复数特征根的矩阵能得出复数的对角矩阵和复数相似变换矩阵
如果含由共轭复数的特征值,则可以将其转换成带有复数块的实数矩阵
如果有复数特征值,则不能将其转换成对角矩阵,只能转换为Jordan矩阵
例4-34 矩阵对角化
试求出下述矩阵的对角矩阵及变换矩阵
A=⎡⎣⎢⎢⎢31−1022−212−2032−2−25⎤⎦⎥⎥⎥ A = [ 3 2 2 2 1 2 − 2 − 2 − 1 − 2 0 − 2 0 1 3 5 ]
A = [3, 2, 2, 2; 1, 2, -2, -2; -1, -2, 0, -2; 0, 1, 3, 5];
[v, d] = eig(sym(A));
A1 = inv(v)*A*v
矩阵Jordan变换
Jordan变换用于处理含由重特征值的矩阵
函数调用格式
只返回Jordan矩阵J: J = jordan(A)
返回Jordan矩阵J,和广义特征向量矩阵V
[V, J] = jordan(A)
如果矩阵的特征值互不相同,则函数返回的结果与eig()函数一致
例4-37 Jordan变换
求如下矩阵的Jordan分解
A=⎡⎣⎢⎢⎢−71750−67−65894−121−811178−173−46504−58⎤⎦⎥⎥⎥ A = [ − 71 − 65 − 81 − 46 75 89 117 50 0 4 8 4 − 67 − 121 − 173 − 58 ]
A = [-71, -65, -81, -46; 75, 89, 117, 50; 0, 4, 8, 4; -67, -121, -173, -58];
[V, J] = eig(sym(A))
[V1, J1] = jordan(sym(A))
矩阵的奇异值分解
数学描述: ATA≥0,AAT≥0 A T A ≥ 0 , A A T ≥ 0
理论上, rank(ATA)=rank(AAT)=rank(A) r a n k ( A T A ) = r a n k ( A A T ) = r a n k ( A )
奇异值定义: σi(A)=λi(ATA)−−−−−−−√ σ i ( A ) = λ i ( A T A )
其中, σi σ i 是非负特征值
例4-40 奇异值实例
A=⎡⎣⎢1μ010μ⎤⎦⎥μ=10−15 A = [ 1 1 μ 0 0 μ ] μ = 10 − 15
求矩阵的秩
ATA=[1+μ2111+μ2] A T A = [ 1 + μ 2 1 1 1 + μ 2 ]
A = [1, 1; 5*eps, 0; 0, 5*eps];
rank(A)
奇异值分解
奇异值分解 Singular value decomposition(SVD)
A=LA1M A = L A 1 M
A – n x m 矩阵
L 和 M 为正交矩阵
分解出对角矩阵 A1=diag(σ1,⋯,σn) A 1 = d i a g ( σ 1 , ⋯ , σ n )
对角元素满足: σ1≥σ2≥⋯≥σn≥0 σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0
求解: S = svd(A)
[L, A1 A 1 , M] = svd(A)
矩阵的条件数
矩阵的条件数
cond(A)=σmaxσmin=σ¯(A)σ––(A) c o n d ( A ) = σ max σ min = σ ¯ ( A ) σ _ ( A )
matlab求解: c = cond(A)
条件数过大,说明矩阵接近奇异值
坏条件矩阵
处理时应该慎重(建议用符号运算)
例4-40 奇异值分解
对下列矩阵进行奇异值分解
A=⎡⎣⎢⎢⎢16594211714310615138121⎤⎦⎥⎥⎥ A = [ 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 ]
A = [16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1];
[L, A1, M] = svd(A)
% 条件数
cond(A)
例4-41 长方形矩阵分解
对下面的矩阵进行奇异值分解,并验证结果
A=[12345678] A = [ 1 3 5 7 2 4 6 8 ]
A = [1, 3, 5, 7; 2, 4, 6, 8];
[L, A1, M] = svd(A)
A2 = L*A1 * M',
norm(A-A2)
线性方程组求解
数学描述: Ax = B
其中,A和B是给定矩阵
A=⎡⎣⎢⎢⎢⎢⎢a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn⎤⎦⎥⎥⎥⎥⎥,B=⎡⎣⎢⎢⎢⎢⎢b11b21⋮bm1b12b22⋮bm2⋯⋯⋱⋯b1pb2p⋮bmp⎤⎦⎥⎥⎥⎥⎥ A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] , B = [ b 11 b 12 ⋯ b 1 p b 21 b 22 ⋯ b 2 p ⋮ ⋮ ⋱ ⋮ b m 1 b m 2 ⋯ b m p ]
线性代数课程:解的三种情况
I.唯一解
唯一解存在条件
当 m = n,且 rank(A) = n, 则唯一解存在
X=A−1B X = A − 1 B
函数调用格式:
X = inv(A)*B
X = A \ B
注意: 推荐使用符号运算方法
例4-42 解方程
求解线性方程组
⎡⎣⎢⎢⎢1414233132234142⎤⎦⎥⎥⎥X=⎡⎣⎢⎢⎢54321234⎤⎦⎥⎥⎥ [ 1 2 3 4 4 3 2 1 1 3 2 4 4 1 3 2 ] X = [ 5 1 4 2 3 3 2 4 ]
求解与检验
A = [1 2 3 4; 4 3 2 1; 1 3 2 4; 4 1 3 2];
B = [5 1; 4 2; 3 3; 2 4];
x = inv(A) * B, % 数值解
e1 = norm(A*x - B),
x1 = inv(sym(A))*B, % 解析解
e2 = norm(A*x1 - B)
II. 方程组有无穷多解
解的判定矩阵
C=⎡⎣⎢⎢⎢⎢⎢a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amnb11b21⋮bm1b12b22⋮bm2⋯⋯⋱⋯b1pb2p⋮bmp⎤⎦⎥⎥⎥⎥⎥ C = [ a 11 a 12 ⋯ a 1 n b 11 b 12 ⋯ b 1 p a 21 a 22 ⋯ a 2 n b 21 b 22 ⋯ b 2 p ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n b m 1 b m 2 ⋯ b m p ]
当rank(A) = rank(B) = r < n,方程组有无穷多解
通解: x=a1x1+a2x2+⋯+an−rxn−r+x0 x = a 1 x 1 + a 2 x 2 + ⋯ + a n − r x n − r + x 0
线性方程组的matlab求解
齐次方程组的通解
x^=a1x1+a2x2+⋯+an−rxn−r x ^ = a 1 x 1 + a 2 x 2 + ⋯ + a n − r x n − r
求解A矩阵的化零矩阵, 使得 AZ = 0
Z = null(A)
特解: x_0 = pinv(A)*B
例4-43 方程求解
求解下列方程组的解
⎡⎣⎢⎢⎢120−1480−40−122−13−3409−487−1312−31−97−837⎤⎦⎥⎥⎥x=⎡⎣⎢⎢⎢3914⎤⎦⎥⎥⎥ [ 1 4 0 − 1 0 7 − 9 2 8 − 1 3 9 − 13 7 0 0 2 − 3 − 4 12 − 8 − 1 − 4 2 4 8 − 31 37 ] x = [ 3 9 1 4 ]
判定矩阵方程的可解性
A = [1, 4, 0, -1, 0, 7, -9; 2, 8, -1, 3, 9, -13, 7; 0, 0, 2, -3, -4, 12, -8; -1, -4, 2, 4, 8, -31, 37];
B = [3;9;1;4];
C = [A B];
ra = rank(A);
rc = rank(C);
ra, rc
两种解法
% 方法1:通解与检验
Z = null(sym(A)),
x0 = sym(pinv(A)*B)
syms a1 a2 a3 a4;
x = Z*[a1;a2;a3;a4] + x0,
E = A*x -B
% 方法2:基本行变换方法
C = [A B];
D = rref(C)
自变量x2,x5,x6,x7,记作b1,b2,b3,b4 自 变 量 x 2 , x 5 , x 6 , x 7 , 记 作 b 1 , b 2 , b 3 , b 4
方程的解
⎧⎩⎨⎪⎪