You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MATLAB代码中的inv()替换为反斜杠运算符并简化?

问题描述

能否有人协助我将以下MATLAB代码转换为使用反斜杠运算符,替代当前使用的inv()函数:

n = 6; m = 18;
R = diag( rand(1,n) );
A = rand(m,n);
b = rand(m,1);

X = inv(R) * A' * inv(A * inv(R) * A') * b;

(我知晓此示例中结果可能存在数学奇异性,因我仅创建随机矩阵展示各矩阵维度。我仅需转换为反斜杠用法的合适语法,甚至可对其简化。)

补充说明
这段代码源自求解二次规划问题的拉格朗日条件,消去λ后整理得到对应的表达式。


转换方案

MATLAB中反斜杠运算符\和斜杠/是求解线性方程组的高效方式,比inv()数值稳定性更好、计算效率更高,对应替换逻辑如下:

  • inv(M) * x 等价于 M \ x(本质是求解线性方程组M*y=x得到y)
  • x * inv(M) 等价于 x / M(本质是求解线性方程组y*M=x得到y)

针对你的代码,我们可以逐步替换inv():

  1. inv(R)*A' 等价于 R \ A'(因为R是对角矩阵,该运算会高效地对A'的每一行除以R的对应对角元素)
  2. inv(A*inv(R)*A')*b 等价于 (A*(R \ A')) \ b(先计算A*inv(R)*A'的等价形式,再用反斜杠求解对应的线性方程组)

最终转换后的代码为:

n = 6; m = 18;
R = diag( rand(1,n) );
A = rand(m,n);
b = rand(m,1);

% 用反斜杠替换inv()的版本
X = (R \ A') * ((A * (R \ A')) \ b);

额外优化建议

由于R是对角矩阵,我们还可以进一步简化计算:先取出R的对角元素,用点运算实现R^{-1}的效果,再结合反斜杠,计算效率会更高:

r_diag = diag(R);
% 等价于 inv(R)*A',点运算更适配对角矩阵特性
A_Rinv = A' ./ r_diag;
% 求解 (A*A_Rinv)y = b,再计算X = A_Rinv*y
X = A_Rinv * ((A * A_Rinv) \ b);

内容的提问来源于stack exchange,提问作者teeeeee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:25:17