关于matlab中矩阵运算A/B的疑问

A/B按我的解释应该是A乘以B的逆矩阵,这样的话B必须是一个方阵才可逆呀!
可是我运行时出现:
>> a=[1;2;3;4;5;6];
>> b=a;
>> a/b

ans =

0 0 0 0 0 0.1667
0 0 0 0 0 0.3333
0 0 0 0 0 0.5000
0 0 0 0 0 0.6667
0 0 0 0 0 0.8333
0 0 0 0 0 1.0000
运算的结果是6维的矩阵,这并不是什么点除呀!!再者:
>> a=[1;2;3;4;5;6];
>> b=[4;2;6;4;5;6];
>> a/b

ans =

0 0 0.1667 0 0 0
0 0 0.3333 0 0 0
0 0 0.5000 0 0 0
0 0 0.6667 0 0 0
0 0 0.8333 0 0 0
0 0 1.0000 0 0 0
>> a=[1;2;3;4;5;6];
>> b=[4;2;6;4;5;6];
>> a/b

ans =

0 0 0.1667 0 0 0
0 0 0.3333 0 0 0
0 0 0.5000 0 0 0
0 0 0.6667 0 0 0
0 0 0.8333 0 0 0
0 0 1.0000 0 0 0
还有行向量的运算:
>> a=[1 2 3 4 5 6];
>> b=[4 5 5 4 5 6];
>> b/a

ans =

1.1978
看不懂,就是不清楚这些结果如何算出来的,请高手解释一下吧. 拒绝无意义的回答!

matlab里的'/'不完全等于矩阵除法。
你可以用help mrdivide看一下'/'的帮助:
>> help mrdivide

/ Slash or right matrix divide.
A/B is the matrix division of B into A, which is roughly the
same as A*INV(B) , except it is computed in a different way.
More precisely, A/B = (B'\A')'. See MLDIVIDE for details.

就是说A/B可以大致看成A*inv(B),但用的是另一种方法。更确切的讲A/B = (B'\A')'。

那再看看'\'(左除或者反除)是什么东东。
>> help mldivide

\ Backslash or left matrix divide.
A\B is the matrix division of A into B, which is roughly the
same as INV(A)*B , except it is computed in a different way.
If A is an N-by-N matrix and B is a column vector with N
components, or a matrix with several such columns, then
X = A\B is the solution to the equation A*X = B computed by
Gaussian elimination. A warning message is printed if A is
badly scaled or nearly singular. A\EYE(SIZE(A)) produces the
inverse of A.

If A is an M-by-N matrix with M < or > N and B is a column
vector with M components, or a matrix with several such columns,
then X = A\B is the solution in the least squares sense to the
under- or overdetermined system of equations A*X = B. The
effective rank, K, of A is determined from the QR decomposition
with pivoting. A solution X is computed which has at most K
nonzero components per column. If K < N this will usually not
be the same solution as PINV(A)*B. A\EYE(SIZE(A)) produces a
generalized inverse of A.

就是说当A是N阶方阵B为N行的列向量时,X=A\B就是线性方程组A*X=B的解,算法是用高斯消去法。A\EYE(SIZE(A))产生的是方阵A的逆矩阵。

如果A是M*N的矩阵且M≠N,B是跟A行数(M行)相同的列向量时,X=A\B是非满秩的线性方程组A*X=B的解系,A的秩K由QR分解得出。如果K<N通常结果与PINV(A)*B不等(PINV(A)是求A的广义逆矩阵)。 A\EYE(SIZE(A))得到的是A的广义逆矩阵。

总而言之,A\B就是求A*X=B的解,你可以看作是A的逆矩阵,只不过是广义逆矩阵,这样A不是方阵也可以计算的。

至于A/B,在解线性方程组上比\少用一些,因为通常都把B写成列向量,所以用反除\就可以了。用/的话,B通常是行向量。
可以把B/A看作是X*A=B的解,这里B的列数等于A的列数。

A\B=pinv(A)*B
A/B=A*pinv(B)

举个例子:
>> A=pascal(3) %A赋值为3*3的方阵。

A =

1 1 1
1 2 3
1 3 6

>> b=[1:3]' % b是3*1的列向量。

b =

1
2
3

>> x=A\b % 用反除求Ax=b的解,结果x是个列向量,注意是A\b不是b\A

x =

0
1
0

>> A*x % 验证一下A*x刚好等于b

ans =

1
2
3

>> x=b'/A' % 这回是正除了,不过b'是行向量,A'也倒一下,正除的时候就是b'/A'了,不是A'/b'了,结果x是个行向量

x =

0 1 0

>> x*A' % 验证一下,跟b'一样。

ans =

1 2 3

>> A=rand(3,4) % 这回重新赋值,A不是方阵了,是3*4的矩阵

A =

0.5298 0.3798 0.4611 0.0592
0.6405 0.7833 0.5678 0.6029
0.2091 0.6808 0.7942 0.0503

>> x=A\b % 实际上方程组没有唯一确定的解,而是无数解,所以解出来的是一个特解

x =

-1.5132
4.9856
0
-1.5528

>> A*x % 验证,跟b相等。

ans =

1.0000
2.0000
3.0000

>> A=rand(3,2) % 再看看3*2的矩阵,行数>列数的情况

A =

0.4154 0.0150
0.3050 0.7680
0.8744 0.9708

>> x=A\b

x =

1.8603
1.5902

>> A*x % 验证一下,嗯?怎么不等于b了?

ans =

0.7966
1.7886
3.1704

% 为什么呢?因为方程数(行数)太多,未知数(列数)个数太少,2个未知数,用2个线性无关的方程就可以求确定的解了,现在方程多了,不能同时满足所有方程,所以实际上是无解,只不过matlab里用的是一个最小二乘意义上的近似解,所以验证时不等,只是尽可能近似的满足所有方程。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-06
这是 X*A=B 方程组
第2个回答  2009-05-06
a./b是数组相除

>> a=[1;2;3]

a =

1
2
3

>> b=[1;2;3]

b =

1
2
3

>> a/b

ans =

0 0 0.3333
0 0 0.6667
0 0 1.0000

>> a./b

ans =

1
1
1

关于matlab中矩阵运算A\/B的疑问
总而言之,A\\B就是求A*X=B的解,你可以看作是A的逆矩阵,只不过是广义逆矩阵,这样A不是方阵也可以计算的。至于A\/B,在解线性方程组上比\\少用一些,因为通常都把B写成列向量,所以用反除\\就可以了。用\/的话,B通常是行向量。可以把B\/A看作是X*A=B的解,这里B的列数等于A的列数。A\\...

matlab A\/B为什么等于A矩阵的逆左乘B矩阵,B\\A为什么等于A矩阵的逆右乘...
A\\B 就是反过来,用A左除B,就是A的逆乘以B,(注意矩阵构成的群不是交换的,所以左乘和右乘是不同的)一个东西乘以另一个东西的乘法逆本身就是除法的定义,MATLAB估计是根据这种东西自己约定了这样比较好记简单的符号。

matlab两个矩阵相除原理是什么?
在Matlab中有两种矩阵除法符号:“\”即左除和“/”即右除.如果A矩阵是非奇异方阵,则A\\B是A的逆矩阵乘B,即inv(A)*B;而B\/A是B乘A的逆矩阵,即B*inv(A).具体计算时可不用逆矩阵而直接计算.通常:x=A\\B就是A*x=B的解;x=B\/A就是x*A=B的解.当B与A矩阵行数相等可进行左除....

matlab中a.\/b那个点什么意思?还有 a'*b这个'什么意思
a'*b:a'表示转置矩阵,a是一行五列,a'就是五行一列,而b是一行五列,所以根据矩阵乘法,结果就是五行五列了

matlab左除运算符A\\B求线性方程组的解,有个疑惑?
由于你最后给出的线性方程组(是超定方程组)的系数矩阵不是满方矩阵,所以用左除运算符会得到其近似解。x1=1.2791 x2=0.1834

关于MATLAB中矩阵相除的问题。。。郁闷中。。。
你是要用MATLAB求解矩阵方程吧。你这里B和A是同一个矩阵,要是要相除的话应该是点除,即A.\/B ,得到的应该是一个单位矩阵。

matlab中\/与\\的区别
b\\a 相当于b除a,或者是(b的倒数)乘以a 看上去就像,在斜杠的下方的那个数做分母,在斜杠上方的数做分子 对于矩阵运算来说,一个矩阵的逆矩阵,相当于普通运算的倒数,所以 a\/b 相当于a乘以(b的逆)b\\a 相当于(b的逆)乘以a 由于一般标量乘法运算是满足交换率的,如果以(1\/b)表示b的倒数,...

matlab中a.\/b是什么意思
a.\/b的意思是矩阵a中的元素分别对应除以矩阵b中的元素。

matlab除法怎么除
matlab左除和右除的区别 对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵关系,先定义两个矩阵a和矩阵b。由于矩阵的特殊性,A*B通常不等于B*A,除法也一样。所以要区分左右。右除式A\/B,相当于A*inv(B)对于,左除式A\\B,则相当于inv(A)*B,意思就是A右除B,相当于A右乘B的逆...

MATLAB中的左除\\和右除\/
MATLAB中矩阵的左除形式为:A\\B MATLAB中矩阵的右除形式为:B\/A 左除操作A\\B表示求解关于x的线性方程组Ax=B,即x等于A的逆乘以B,以A作为除数,B作为被除数。右除操作B\/A表示求解关于x的线性方程组xA=B,即x等于B乘以A的逆,以B作为除数,A作为被除数。在理解上,左除操作类似于从左边去除A的...

相似回答