找回密码
 注册
关于网站域名变更的通知
查看: 3314|回复: 2
打印 上一主题 下一主题

Moore-Penrose广义逆:可解决MATLAB报错“矩阵接近奇异值,或者缩放错误。结果可能...

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-5 15:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
上一篇讲到:方程AX=b的解的讨论(特解、通解、零空间向量等概念)及其MATLAB实现,程序中用到的是mldivide或者A\b的方法(二者相同)来解方程。9 u  ]9 c; p9 b  ^

9 W# W7 X: M: }; w但实际上运行过程中我们会遇到:当AX=b线性方程组是一个病态方程组;或者A是奇异矩阵(即det(A)=0,不可逆),没法求逆,用不了inv(A)方法只能用A\b,此时MATLAB会报错“矩阵接近奇异值,或者缩放错误。结果可能不准确”…网络上很多人问这个问题怎么解决,其实不是MATLAB的问题,而是MATLAB内置算法的鲁棒性问题,直接用A\b方法无法处理这个棘手的问题。如果没有矩阵论或数值计算方法基础的同学可能会一头雾水。本文借用Moore-Penrose广义逆来解决这个问题,帮助大家理解带奇异矩阵的病态方程组如何解决。8 U: s! q; ~) S& C8 g: e' q! N$ T
. C( s  y) F% z" r
首先我们先来看下mldivide, \在MATLAB中的含义:
4 d- h- ~4 R- Y9 g% y, T  z
- |/ Z4 W% Z- q. j8 J  W6 |
8 d+ P6 r& j$ f/ a0 \7 Q* r/ ^  ^  L; p. c1 q
0 m2 w7 Q' t6 @: c# o
& Q/ D% v& M; Y

% x( N+ Q0 P! N& ~- e6 z! y1 Q+ I
也就是说,A\b的方法是可以求包含奇异矩阵的方程组的,但是可能会出错。而且错误可能非常离谱。(这个例子告诫我们,不要以为MATLAB算出来的结果都是准确的,MATLAB也不过是调用一些算法进行运算,每个算法都可能存在一些缺陷,无法处理某些极端的情况)。
* E# g' H3 j4 D7 W5 V, h# g* u4 ?! N" M! t0 c7 x
% w: C" [+ b, x$ w+ B$ n& @
这里就涉及到数值计算方法领域矩阵的性态的问题了。我们可以直观来感受一下:1 s6 j5 u; k$ H+ z5 x0 S
. a+ ?0 O( q- j+ \: O; |
假设如下方程组:
, y2 }. [: c* y; x. S5 ~2 _6 ~  c) j; r& f; Q! `2 s5 q4 B
. z: I$ E( w/ W+ N5 @6 W9 y) f8 m6 I

7 L. R8 u0 c: U! q5 v9 V其精确解是(1,1)。. W/ n' L3 e! N4 F
' P, Q6 _; w0 g# w
若对左右边都做一些非常非常微小的变化:% y5 k( I( [9 q7 [  g9 R3 _
+ O1 a# a/ Q) F/ O7 D  L2 G- F

# @8 ~2 d  y" _1 q" _. R: g! G2 g5 f  y6 [, H
其精确解变为:(10,-2)。
1 {0 L6 g* u; I! g+ |# t$ e6 T9 V! u
一个非常非常微小的扰动就让方程的解产生巨大的变动,我们称上述方程组是病态方程组,系数矩阵A是病态矩阵。
# I+ Q( [2 R; A! T7 C! F1 b! Z, X" }$ R) r/ X. I
如果我们遇到不是方阵的矩阵,或者不能求逆的方阵,要想求解AX=b,避免奇异值导致MATLAB产生错误的情况,我们可以采用“伪逆”来帮助我们解决这个问题。
7 W7 s3 M1 b; R' E
7 Q6 u( @$ a/ ^$ x. q广义逆矩阵:
, ~; }7 O. }7 p# l$ X2 }) Y6 D
# O( k/ j* S+ j0 Q, y# ^/ F+ m" J对任意一个矩阵A,提出四个条件:
6 `* |9 b0 P  D" S& g
4 j: y: n( @- O3 E
4 O/ m6 L* i0 n1 T
" k3 ~( s  X9 f& X: y& n* `; E+ }如果存在矩阵G满足上述的一部分或全部条件,G就可以称为A的广义逆矩阵。最常用的四种广义逆矩阵定义如下:$ A0 b: S4 A7 I8 t

3 c* C3 [+ F8 ]) D. M3 h - t; u+ L( g0 T+ {9 X) q2 i. D

" ]$ @+ k; l" g: wMATLAB中自带的pinv方法,就可以求矩阵的M-P广义逆,即A+矩阵。
2 n1 }# p) }2 `. @3 s/ O8 z/ P) s4 K2 t
大家可以查阅官方文档看具体应用实例。
# _" V2 f) l& x/ ^/ P% A# e8 `8 m. r( L, K3 o# T7 F

9 D. c9 L5 r2 m( b% `2 h% @: [7 j
如果我们求出A+,就可以有另一种思路来解AX=b了:
) C& [  e# |! v) W; C& D6 z* a8 g9 o+ u" o. r9 k* G
7 B/ I. a5 t3 D! c6 |* W4 {/ C

* b/ a, `: A7 [4 O2 q这里,通解的表达式还是类似于X=X*+X0的形式,A+b相当于是特解,后面那一项就是带系数的自由解,y可以取任意数,注意维度匹配即可。. _$ H0 [1 o' l0 V! f! h3 L2 ~
* n( g7 S! P7 |7 D( n7 P
所以,大家调用pinv求出M-P广义逆,然后用x=A+b + (I-A+A)y这个式子构造出通解就可以啦!+ p3 B$ u. p2 m8 U0 f7 q
$ `+ u1 n# W+ K& X: E- o, F4 o

8 T0 i% b# M. {- `6 `  ]
& [& X2 @. [$ ~4 U# F2 |* W. p7 n! o8 A
3 _$ F- G6 t$ [6 ~- Z4 U/ v7 O
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2020-6-8 17:03 | 只看该作者
    可解决MATLAB报错“矩阵接近奇异值,或者缩放错误
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-5 16:40 , Processed in 0.156250 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表