之前一直觉得使用pinv进行矩阵求逆是有效方便的,但是一直不明白pinv和inv函数的区别,此外matlab有时会显示警告信息,指出计算不需要求逆,使用符号“/”或“\”会避免求逆,加速运算效率。

在做Sacchi课程geoph431的assignment 1的时候,碰到求逆问题,发现矩阵使用inv求逆得到的结果很差,而使用pinv得到的结果很好。因此开始想到底两者有什么区别。

经查证,inv是matlab的built-in函数,使用whichinv可以查询到inv.m的位置,但其实里面什么都没有。built-in函数好像是查询不到源码的。而pinv则可以看到其源码,不长,其实就是调用另外一个built-in函数SVD进行奇异值分解,再截断奇异值进行求解而已。所以pinv实际上就是截断奇异值求逆。

另外,在浏览网页的时候看到一个帖子很有典型性,网址是:

http://blog.csdn.net/lsg32/article/details/7194298

帖子题目是:《Matlab中的\和/和pinv的关系以及运算》。文中提到:使用各类优化算法求逆都得不到好的结果,结果一个“\”运算居然很快就得到了很精确的解。这是个很奇妙的事情。因此,追求“\”的运算原理是很必要的。

matlab的help中写道:(根据上述博客)

inv:Y=inv(X)返回方阵X的逆矩阵,如果X病态或者高度奇异,则会显示警告信息。实际上,很少需要真的把矩阵的逆求出来,常见的使用失误主要出现在求解线性方程组AX=b。一种求解方法为x=inv(A)*b,但如要达到更快,更稳定,就得用X=A\b。这个算法使用高斯消去法,因此不产生逆矩阵。

“\”:反斜线符号,矩阵左除。如果A是方阵,A\B近似等于inv(A)*B,只是他们的算法不一样。如果A是n*n的方阵,B是n*1的列向量,或n*?的矩阵,那么X=A\B是AX=B的解。如果A很病态或者很奇异,很会显示警告信息。A\EYE(SIZE(A))计算A的逆,参见mldivide可得到更多信息。如果A是m*n的矩阵,m!=n,B是m*1或m*?的列向量,那么X=A\B就是线性方程组AX=B(超定或者欠定)的最小二乘解。A的有效秩(effective rank)k有选主元的QR分解决定。Asolution X is computed that has at most k nonzero componentspercolumn。如果K<N,结果通常和pinv(A)*B不一样,后者是最小范数解。A\EYE(SIZE(A))用来求解A的广义逆。

mldivide(A,B):等价于A\B,A和B必须有一样多的行,除非A是个标量(这时就等于.\)。如果A是个方阵,A\B近似等于inv(A)*B,只是两者算法不一样。如果A是m*n的矩阵,那么X=A\B求解AX=B(超定或欠定)的最小二乘解,即(AX-B)的范数极小。

此外,博文还叙述了matlab对矩阵的一些其他优化措施。

疑问:

为什么采用高斯消去能达到比inv更好的效果?

matlab矩阵求逆:inv pinv \ / 斜线运算符的选择相关推荐

  1. MATLAB矩阵求逆剖析

    MATLAB矩阵求逆剖析 其实说是MATLAB矩阵求逆剖析,还是需要回归到矩阵求逆的解法中去,因为在进行求逆计算中,使用不同的求逆方法,最后得到的结果似乎不一定一样,甚至很多情况说\形式求逆会更好但是 ...

  2. matlab实现三维表面拟合griffit参数选择

    matlab实现三维表面拟合griffit参数选择 输入参数 x,y,z x,y,z分别为等长度向量,且大于3,对x和y的唯一约束是它们不能都落在x-y平面上的一条直线上 向量长度不等时,报错,输出: ...

  3. matlab 连续两个if,求大神解答一个matlab中的for循环嵌套if选择语句

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:求大神解答一个matlab中的for循环嵌套if选择语句回答:1.最后缺少一个end;2.这句输出没什么意义:disp A(i)=A ...

  4. C语言设计一个简单的计算器,完成两个数的加、减、乘、除、取余。(根据输入的运算符,选择相应的运算,用switch语句实现。

    设计一个简单的计算器,完成两个数的加.减.乘.除.取余.(根据输入的运算符,选择相应的运算,用switch语句实现. 实验代码: #include <stdio.h> #include & ...

  5. Javs运算符及选择语句结构

    Javs运算符及选择语句结构 运算符: 逻辑运算符:&&.||为二目运算符,!为单目运算符 注意:(逻辑运算符的操作数必须是布尔型数据) 例如:2>8&&9> ...

  6. matlab:inv,pinv逆与伪逆

    对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A) 对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆 inv: inv(A)*B 实际上可以写成A\B B*inv(A) 实 ...

  7. Matlab中的pinv和inv

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

  8. matlab的常量和变量运算符

    1.变量的命名规则: 只能是数字,字母和"-",且变量开头字母不能是数字. 2.matlab是弱类型语言 c语言是强类型语言,意思是定义变量时不用强调类型,赋得值是什么类型变量就是 ...

  9. Matlab编程与数据类型 -- 多分支条件选择语句if/elseif/…/else/end

    本微信图文详细介绍了Matlab中if/elseif/-/else/end多分支条件选择语句.

最新文章

  1. Go - interface
  2. 【小白学PyTorch】3.浅谈Dataset和Dataloader
  3. window安装swagger editor
  4. Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
  5. 简单shell:删除五日之前的日志文件
  6. 程序员的算法课(19)-常用的图算法:最短路径(Shortest Path)
  7. C++总结:static_cast ,reinterpret_cast
  8. VB API教程 王国荣
  9. 克就克嘛!哪个怕哪个
  10. Java的第20年:Java和我的故事
  11. android客户端功能,人人网Android版手机客户端功能详解
  12. ATTCK随笔系列之二:偷天陷阱
  13. workerman执行busy,http请求不返回导致阻塞
  14. ppt中流程图旁边怎么添加_word中流程图怎么导入到ppt ppt流程图导入word
  15. c语言程序设计对角矩阵,从键盘输入一个4*4矩阵,并求这个4*4矩阵主对角线元素之和,并输出.球C语言程式设计...
  16. 所有计算机专业的学生应该认识到的
  17. 数字图像处理之灰度化
  18. 马自达CX-5,中控台的点烟器没电
  19. ElasticSearch 之 文本搜索
  20. 导入fbx不显示_全新包身礼盒、可爱家具,不进来看看么?

热门文章

  1. Ubuntu 重装显卡驱动
  2. 【带头结点的单链表】
  3. Pytorch安装CV2
  4. 在线文档查看方案- 易度云查看
  5. 腾讯云新加坡服务器架设BLE控制页面总结
  6. 闲话----梦里的故事《少林故事新编》
  7. 《加州消费者隐私法案》(CCPA)解读四:违反CCPA,企业会面临什么处罚?
  8. 超详细的 Vagrant 上手指南,搭建Linux虚拟机别再用VMware Workstation了!
  9. 苹果计划明年在印度开设iOS应用设计和开发加速器
  10. Make工程管理器(读书笔记)