1. 范数分析 (norm, normest) 常用于误差估计
对于线性空间中某个向量 x = { x1, x2, ..., xn}, 其对应的p级范数定义为 abs(x)_p =
(sum(abs(xi)^p),i=1,n)^(1/p), 而 +Inf 范数值 abs(x)_+Inf =
max(abs(xi)), -Inf 为 abs(x)_-Inf = min(abs(xi));
对于矩阵
abs(A) = max(abs((A*x))/abs(x)), 常用 1、2和Inf阶范数
abs(A)_1
= max(sum(aij,i=1,n),1<=j<=n),
abs(A)_2 = sqrt(Smax{AT A}) abs(A)_Inf =
max(sum(aij,j=1,n),1<=i<=n),
式中Smax{AT A} 是矩阵A最大奇异值的平方。
使用方法: norm(A), norm(A,p); 默认2阶
对于矩阵较大时或处理稀疏矩阵时,可采用
normest函数求解
使用方法:
normest(S), normest(S,tol); 2阶范数
2. 条件数分析(cond)
描述线性方程Ax
= b的解对b的误差或不确定性的敏感度的度量 就是矩阵的条件数
k =
abs(1/A)*abs(A)
矩阵的条件数总是大于等于1 正交矩阵条件数为1,奇异阵为Inf,病态矩阵条件数非常大。
使用方法 c =
cond(A)
3. 求解非奇异线性方程组
对于恰定方程组(方程组个数==未知量个数)可以用左除命令 ""
注:对于恰定非奇异,左除得到 精确解; 恰定奇异,则提示警告并解出NaN
使用方法: A *
x = b 则 x = A b;
同时
对于条件数很大的矩阵求解, 使用左除求解会更好。
4. 求解奇异线性方程组
对于恰定方程组,如果有数值解,则可将A转化为伪逆矩阵
进行求解
使用方法: x = pinv(A) * b;
5. 求解欠定线性方程组
这类问题,解不是唯一的,求解方法可以使用
左除 或者 QR分解
使用方法: [Q, R] = qr(A);
y
= Q' * b;
xqr = R y;
或 x = A b;
6. 求解超定线性方程组
这类问题 可使用 左除 或 伪逆矩阵 进行求解
但是使用 伪逆矩阵 得到的数值解 范数要小;
使用方法: x = pinv(A) * b;
x = A b;
7. 矩阵分解
为了提高求解速度,常采用矩阵分解的方法,通常有
Cholesky分解,LU分解,QR分解,SVD分解等等。
7.1 Cholesky分解、不完全Cholesky分解
把一个对称正定矩阵A分解为一个 上三角矩阵R
与其转置矩阵的 乘积 即 A = R'R;
对于稀疏矩阵,用cholinc命令进行不完全Cholesky分解,而该命令还可以求解实数半正定矩阵的Cholesky分解。
使用方法: R = chol(A)
如果A是非正定矩阵,则返回错误信息
[R, p] = chol(A) 返回两个参数,不返回错误信息。
当A
正定时 返回 R 为 上三角矩阵 p = 0;当非正定时 返回 p为正整数 R为 三角矩阵
且矩阵阶数为 p-1 满足 A(1:p-1,1:p-1) = R'R
R = cholinc(A,droptol) droptol为丢失容限,为0时属于完全Cholesky分解
[R, p] = cholinc(A, '0') 同chol(A)
[R,
p] = cholinc(A, 'inf') 采用Cholesky-Infinity方法分解,可处理实半正定矩阵
求解方法: R =
chol(A);
Rt = transpose(R);
xr
= R (Rtb);
7.2 LU分解(高斯消元法)、不完全LU分解
将任意一个方阵A分解为一个 下三角L 和一个 上三角U 的乘积,即 A = L * U 或 PA = L * U
对于稀疏矩阵用luinc进行不完全LU分解
使用方法: [L, U] = lu(A)
[L, U, P] = lu(A)
Y
= lu(A) 满足 Y = L + U - I
[L, U] = luinc(A,droptol)
[L, U] = luinc(A,'0')
...
方阵的LU分解
满足: A = LU, inv(U)*inv(L) = inv(A), det(A) =
det(L)*det(U)
求解方法: [L,
U] = lu(A)
y
= L b;
x = U y;
7.3 QR分解
正交分解,将一个m*n的矩阵A 分解为一个正交矩阵Q 和一个 上三角矩阵 R 的乘积 ,即 A = Q*R
使用方法: [Q, R] = qr(A)
[Q,
R] = qr(A,0)
[Q, R, E] =
qr(A) A * E = Q * R
[Q1,
R1] = qrdelete(Q, R, j) A = Q * R, 删除j列 返回 A1 = Q1 * R1
[Q1,
R1] = qrdelete(Q, R, j, 'col')
[Q1, R1] = qrdelete(Q, R, j, 'row')
此外
还有 qrinsert 进行插入运算
求解方法: [Q, R] = qr(A)
y
= Q' * b;
x = R y;
7.4 SVD 奇异值分解
A 为 m * n
阶矩阵 存在:
U
= [u1, u2, ...,un] V = [v1, v2, ..., vn]
U'
* A * V = diag(sigma1, sigma2, ... sigmap)
sigma1
>= sigma2 >= ...
>=sigmap, p = min{m, n}
使用方法: [U, S, V] = svd(A)
[U, S, V] = svd(A,0)
s
= svds(A, k, 0) 向量s中包含矩阵A分解得到的k个最小奇异值
[U, S, V] = svds(A, k, 0)
8. 以后补充
mxio
2013.4.8