matlab中用左除和逆矩阵法 求方程 为啥答案不一样?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中用左除和逆矩阵法 求方程 为啥答案不一样?相关的知识,希望对你有一定的参考价值。

a=[2,1;1,2]
cc=[0.5;0.5]
y=[3;3]
c=y\a
c1=inv(a)*y
如题,c为0.5,0.5 而c1 为1,1 为什么呢?

参考技术A c=a\y,得到的结果就与inv(a)*y结果一致 了。
因为y\a表示a乘以y的左逆,也就是表示a除以y了。而你要求的是y除以a结果,应该写为a\y。
你前后两次把除数与被除数反过来了,当然结果不一样了。
也就是说,'\'表示左除——左边为除数,右边为被除数。
c=pinv(y)*a的结果和c=y\a一致。
c1=inv(a)*y的结果和c1=a\y一致。

PS: '/'刚好相反,表示右除——右边为除数,左边为被除数。而你这里不能用右除,因为这里直接右除的话表示y乘以a的逆,矩阵维数不相符,不能进行乘法运算。

参考资料:Matlab help

本回答被提问者和网友采纳

Matlab + Armadillo 和逆矩阵崩溃

【中文标题】Matlab + Armadillo 和逆矩阵崩溃【英文标题】:Matlab + Armadillo and the inverse matrix crashes 【发布时间】:2016-09-16 03:55:59 【问题描述】:

我正在尝试使用 Armadillo lib 从 Matlab 计算逆矩阵。为此,我正在使用 Mex。不幸的是,当我调用该函数时,Matlab 崩溃了。看看我的代码,有人可以帮忙看看我哪里错了?

#include "armaMex.hpp"

void mexFunction(int nlhs, mxArray *plhs[],
             int nrhs, const mxArray *prhs[]) 
   
    mat A = armaGetPr(prhs[0]);
    plhs[0] = armaCreateMxMatrix(A.n_rows,A.n_cols);
    armaSetPr(plhs[0],inv(A)); 

它编译没有错误。

【问题讨论】:

您可以编辑以显示 Matlab 崩溃时看到的错误消息吗?无法判断问题是数字还是代码。 【参考方案1】:

试试这个:

#include "armaMex.hpp"

void mexFunction(int nlhs, mxArray *plhs[],
         int nrhs, const mxArray *prhs[]) 
   
    mat A =  conv_to<mat>::from(armaGetPr(prhs[0],true));

    plhs[0] = armaCreateMxMatrix(A.n_rows,A.n_cols, mxDOUBLE_CLASS, mxREAL);
    armaSetPr(plhs[0],conv_to<mat>::from(inv(A))); 


【讨论】:

以上是关于matlab中用左除和逆矩阵法 求方程 为啥答案不一样?的主要内容,如果未能解决你的问题,请参考以下文章

关于MATLAB中 左除与右初的区别

Matlab随笔之求解线性方程

左除和右除

matlab中牛顿法编程

如何用matlab解方程组

matlab中如何求解齐次线性方程组(代数矩阵)的非零解