matlab输出斜杠,如何实现Matlab的mldivide(又称反斜杠运算符“ \”)

7e203afef790cfdf8dc776a1c543f5ba.png

阿波罗的战车

对于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    endelse                              % 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。如果您想自己实现所有这些,那就太高了:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值