matlab 线性方程组 限定解的个数,[转载]Matlab解线性方程组笔记

本文介绍了线性空间中的范数分析、条件数评估及非奇异/奇异/欠定/超定线性方程组求解方法,重点讲解了Cholesky分解、LU分解、QR分解和SVD奇异值分解,以及如何利用这些技术优化编程中的矩阵运算效率。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值