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 为什么呢?
因为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中用左除和逆矩阵法 求方程 为啥答案不一样?的主要内容,如果未能解决你的问题,请参考以下文章