对于x = A\b,反斜杠运算符包含许多算法来处理不同种类的输入矩阵。因此,对矩阵A进行诊断,并根据其特性选择执行路径。

以下页面以伪代码描述何时A为完整矩阵:

if size(A,1) == size(A,2)         % A is square

if isequal(A,tril(A))         % A is lower triangular

x = A \ b;                % This is a simple forward substitution on b

elseif isequal(A,triu(A))     % A is upper triangular

x = A \ b;                % This is a simple backward substitution on b

else

if isequal(A,A')          % A is symmetric

[R,p] = chol(A);

if (p == 0)           % A is symmetric positive definite

x = R \ (R' \ b); % a forward and a backward substitution

return

end

end

[L,U,P] = lu(A);          % general, square A

x = U \ (L \ (P*b));      % a forward and a backward substitution

end

else                              % A is rectangular

[Q,R] = qr(A);

x = R \ (Q' * b);

end

对于非平方矩阵,使用QR分解。对于正方形三角形矩阵,它执行简单的前向/后向替换。对于正方形对称正定矩阵,使用Cholesky分解。否则,LU分解将用于一般平方矩阵。

更新: MathWorks 通过一些不错的流程图更新了文档页面中的“ 算法”部分mldivide。请参见此处和此处(完整和稀疏案例)。

mldivide_full

所有这些算法在LAPACK中都有相应的方法,实际上,这可能就是MATLAB所做的(请注意,最新版本的MATLAB附带了经过优化的Intel MKL实现)。

之所以采用不同的方法,是因为它试图使用最特定的算法来求解利用系数矩阵所有特征的方程组(或者因为它更快或更数值上更稳定)。因此,您当然可以使用通用的求解器,但它不是最有效的。

实际上,如果您A事先知道什么,可以linsolve直接调用并指定选项来跳过额外的测试过程。

如果A是矩形或单数,则还可以使用PINV查找最小范数最小二乘解(使用SVD分解实现):

x = pinv(A)*b

以上所有内容都适用于密集矩阵,而稀疏矩阵则完全不同。通常在这种情况下使用迭代求解器。我相信MATLAB将SuiteSpase软件包中的UMFPACK和其他相关库用于直接求解器。

使用稀疏矩阵时,您可以打开诊断信息,并使用以下命令查看执行的测试和选择的算法spparms:

spparms('spumoni',2)

x = A\b;

而且,反斜杠运算符还可以在gpuArray上工作,在这种情况下,它依赖cuBLAS和MAGMA在GPU上执行。

它还适用于在分布式计算环境中工作的分布式阵列(工作分散在计算机集群中,其中每个工作人员仅拥有阵列的一部分,可能其中整个矩阵无法一次存储在内存中)。底层实现使用ScaLAPACK。

如果您想自己实现所有这些,那就太高了:)

matlab怎么输入斜杠,如何实现Matlab的mldivide(又称反斜杠运算符“ \”)相关推荐

  1. php 去掉转义引号的反斜杠,PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠...

    PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠 通过AJAX传到PHP的json字符串有时候加上反斜杠"\"来转义,PHP处理时需要先去掉反斜杠,然后再json_dec ...

  2. net mysql反斜杠怎么入库_MySQL中如何插入反斜杠,反斜杠被吃掉,反斜杠转义

    问题描述: mysql中带有反斜杠的内容入库后,发现反斜杠无故失踪了(俗话说被吃掉了) 例:插入insert into tb('url') values('absc\eeee'); 结果数据库里的内容 ...

  3. 在c语言中 反斜杠符是,[转载]C语言中反斜杠的使用

    问题1: #define f(z) (z<2)?(((2-z)*(2-z))*((2-z)*(2-z)))* (((2-z)*(2-z))*((2-z)*(2-z)))/560:0; 上面这个* ...

  4. c语言中双反斜杠的作用,[转载]C语言中反斜杠的使用

    问题1: #define f(z) (z<2)?(((2-z)*(2-z))*((2-z)*(2-z)))* (((2-z)*(2-z))*((2-z)*(2-z)))/560:0; 上面这个* ...

  5. 反斜杠转义mysql java_mysql数据库中的反斜杠”\“怎么使用Java进行转义

    mysql数据库中的反斜杠"\"怎么使用Java进行转义 发布时间:2020-11-24 15:15:12 来源:亿速云 阅读:88 作者:Leah 这期内容当中小编将会给大家带来 ...

  6. java 路径中代替斜杠_老生常谈java路径中的反斜杠和斜杠的区别

    JAVA中的斜杠 有正斜杠与反斜杠之分,正斜杠,一般就叫做斜杠,符号为"/":反斜杠的符号为"\". 斜杠(/)在JAVA中没有什么特别的意义,就是代表一个字符 ...

  7. php 重命名中有斜杠,php如何去除转义字符中的反斜杠

    php去除转义字符中的反斜杠的方法:使用函数stripslashes去掉转义后字符串中的反斜杠,代码为[if (is_string($v)) {$array[$k] = stripslashes($v ...

  8. java反斜杠_如何在字符串中使用反斜杠(\)?

    (请参阅答案末尾的ES2015更新.) 您已经标记的问题都string和regex. 在JavaScript中,反斜杠在字符串文字和正则表达式中都有特殊含义.如果你想在字符串或正则表达式中使用实际的反 ...

  9. java中斜杠的用法_java培训学习中反斜杠“\”的用法

    java反斜杠\的用法比较怪异,分为两种场景: 1. 正则表达式 匹配点(.) 或 {.[.(.?.$.^ .+和 * 这些特殊符号要要前加双斜框,表示字符类的时候也是用双斜杠譬如(\\s[空白符], ...

最新文章

  1. [转]如何借助 TLS/SSL 确保套接字连接的安全(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)...
  2. C++ Primer 5th笔记(7)chapter7 类:编译相关
  3. bootstrap 之下拉多选
  4. 部署LAMP论坛平台(Linux,Apache,MySQL,PHP)
  5. 让UITableView的section header view不悬停的方法
  6. solr 5.3.1 使用java_Apache Solr 5.3.1 发布下载,Java 全文搜索服务器
  7. c语言混响,混响也是大学问,c与数字混响的区别-文章-数字音视工程网DAV01.COM...
  8. c语言读取excel表格_利用pandas处理excel表格
  9. idea zookeeper插件使用_zookeeper的Java客户端操作
  10. PostgreSQL在何处处理 sql查询之五十四
  11. volatile和synchronized关键字
  12. DBCC--SHOWCONTIG
  13. 在inDesign软件中如何覆盖母版页项目?
  14. 原来Android还可以这样通过反射,获取jar包属性及方法
  15. 本地事务和分布式事务区别
  16. easyui 中iframe嵌套页面,提示弹窗遮罩的解决方法,parent.$.messager.alert和parent.$.messager.confirm...
  17. JDBC部署到Tomcat驱动加载失败
  18. SpringBoot Banner 图片定制修改
  19. 将雅虎《心香一脉》每天推荐的文章发到咱邮箱(Java版)
  20. signature=5a537e48de3abe15561f136edabc54dc,Visual Signatures in Video Visualization

热门文章

  1. 那时候写计算机毕业论文,必用神器!
  2. java swing(GUI) MySQL实现的学生选课签到考勤系统源码开发教程
  3. 反弹socks代理。
  4. eclipse新建项目没有src解决办法
  5. 计算机与代数---如何计算sqrt---方法和实现
  6. 音频特征提取——常用音频特征
  7. linux的cut命令详解
  8. java简单的增删改查项目 ATM机
  9. scrum立会报告+燃尽图(第三周第四次)
  10. 漂亮的title提示信息