python调用matlab函数_MATLAB中的mrdivide函数:它在做什么,以及如何在Python中执行它?...

MRDIVIDE或/操作符实际上解决了xb = a线性系统,而MLDIVIDE或\操作符则解决了系统bx = a。

为了求解具有非对称,不可逆矩阵b的系统xb = a,可以依赖mridivide(),该PLACEHOLDER_FOR_CODE_8通过分解具有高斯消除的b或通过奇异值分解完成的pinv()来完成,并且归零的奇异值低于(默认)公差水平。

以下是差异(对于mldivide的情况):What is the difference between PINV and MLDIVIDE when I solve A*x=b?

When the system is overdetermined, both algorithms provide the

same answer. When the system is underdetermined, PINV will return the

solution x, that has the minimum norm (min NORM(x)). MLDIVIDE will

pick the solution with least number of non-zero elements.

在你的例子中:

% solve xb = a

a = [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9];

b = ones(25, 18);该系统是欠定的,两种不同的解决方案将是:

x1 = a/b; % MRDIVIDE: sparsest solution (min L0 norm)

x2 = a*pinv(b); % PINV: minimum norm solution (min L2)

>> x1 = a/b

Warning: Rank deficient, rank = 1, tol = 2.3551e-014.

ans =

5.0000 0 0 ... 0

>> x2 = a*pinv(b)

ans =

0.2 0.2 0.2 ... 0.2在这两种情况下,xb-a的近似误差都是不可忽略的(非精确解),并且相同,即norm(x1*b-a)和norm(x2*b-a)将返回相同的结果。

MATLAB在做什么?

根据矩阵b的结构,'\'运算符调用的算法(以及属性检查)的一个很好的细分在scicomp.stackexchange.com的这篇文章中给出。我假设类似的选项适用于/运营商。

对于你的例子,MATLAB很可能是在做一个高斯消元,给最稀疏的解决方案之间的无限(这是5来自哪里)。

Python在做什么?

Python,linalg.lstsq使用伪逆/ SVD,如上所示(这就是为什么你得到0.2的向量)。实际上,以下内容将给出与MATLAB的pinv()相同的结果:

from numpy import *

a = array([1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9])

b = ones((25, 18))

# xb = a: solve b.T x.T = a.T instead

x2 = linalg.lstsq(b.T, a.T)[0]

x2 = dot(a, linalg.pinv(b))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值