博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚反矩阵指令pinv之应用
阅读量:6932 次
发布时间:2019-06-27

本文共 1164 字,大约阅读时间需要 3 分钟。

pinv指令

     在多数解的例子中,有时并不是仅要将其中一变数设定为零之解。为使整个系统得到最佳化,亦可利用pinv指令求得最小模组之合理解。pinv(A)又称为虚反矩阵(pseudoinverse),其功能与反矩阵之计算相同,但它会基于svd(A)函数(或称奇异值分解函数)之计算方式,求得一个不是属于全阶之矩阵A之反矩阵。这是长方形矩阵求解时,在多重解中求其反矩阵之折衷方式。故若矩阵A为方矩阵或非零矩阵,则其结果应与inv(A)相同。只是在这样的状况,宁可使用inv(A)较为省事。处理这些长方矩阵或特异矩阵时,使用pinv(A)会有意想不到的效果。其解法是根据反矩阵法:
A=[3 2 1; 10 -25 5];

C=[5000 2000]';

>> T=inv(A)*C

Error using inv

inv Matrix must be square.

>> T=pinv(A)*C

 

T =

 

   1.0e+03 *

 

    1.2039

    0.4852

    0.4180

  上面之例因为A不是方形矩阵,故求其反矩阵时会有错误的信息,但若用虚反矩阵指令pinv,反而相安无事,这是将T1、T2以其馀一变数T3表示之情况下,求得其最小平方之组合。其结果是否合用则端视问题之限制与应用而定。 PINV(A,TOL) 之指令後面另有参数TOL,可以输入容许值。其预设值为MAX(SIZE(A)) * NORM(A) * EPS(class(A)),读者可参考手册之说明,以了解其使用方法。

 

对于非奇异且不接近奇异的方阵两个命令输出结果相同,但是对于接近奇异的矩阵使用两个命令结果却不同,

1.对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)

2.对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆

 

  当A是N阶方阵B为N行的列向量时,X=A\B就是线性方程组A*X=B的解,算法是用高斯消去法。A\EYE(SIZE(A))产生的是方阵A的逆矩阵。

  如果A是M*N的矩阵且M≠N,B是跟A行数(M行)相同的列向量时,X=A\B是非满秩的线性方程组A*X=B的解系,A的秩K由QR分解得出。如果K<N通常结果与PINV(A)*B不等(PINV(A)是求A的广义逆矩阵)。 A\EYE(SIZE(A))得到的是A的广义逆矩阵。

 

  总而言之,A\B就是求A*X=B的解,你可以看作是A的逆矩阵,只不过是广义逆矩阵,这样A不是方阵也可以计算的。

 

  至于A/B,在解线性方程组上比\少用一些,因为通常都把B写成列向量,所以用反除\就可以了。用/的话,B通常是行向量。

可以把B/A看作是X*A=B的解,这里B的列数等于A的列数。

 

A\B=pinv(A)*B 

A/B=A*pinv(B)

可见,'\'用的是高斯消元法。

转载地址:http://iymjl.baihongyu.com/

你可能感兴趣的文章
在window平台下模拟Liunx使用GCC环境进行编译C的SO库。
查看>>
原来一直纠结MQ的用法,今天看到了一个最经典的例子。
查看>>
向量空间
查看>>
[日推荐]『共享记账』你的私人会计师!
查看>>
Resource is out of sync with the file system的解决办法
查看>>
交叉编译openssl不修改Makefile的方法
查看>>
linux 常用流量查看命令
查看>>
【React Native开发】React Native库版本升级(Upgrading)与降级讲解
查看>>
关于MPAndroidChart柱状图左右滑动
查看>>
linux安装tomcat
查看>>
VMware ESXi Windows虚拟机磁盘扩展小结
查看>>
Linux常用命令
查看>>
ios自动打包脚本,融合xctool、xcodebuild、xcrun
查看>>
关于Android调用安装的各种技巧
查看>>
方便的将数字转成字符串类型并在前面补0
查看>>
mysql主从复制
查看>>
struts2到底集成了sturts1和webwork它们的那些优点?
查看>>
iptables 使用
查看>>
Java在Windows 下使用命令行启动应用程序
查看>>
LVS+keepalived+Nginx(前后端故障处理)全自动化负载均衡配置
查看>>