在Matlab中,*代表的是矩阵乘法,即两个矩阵相乘时,对应位置上的元素分别相乘,然后将相乘的结果累加得到新的矩阵元素。例如:
A=[1 2;3 4];
B=[5 6;7 8];
C=A*B;
上面的代码运行后,C的结果为:
19 22
43 50
而.*代表的是矩阵点乘,即两个矩阵对应的位置上的元素相乘得到新的矩阵。
D=[1 2;3 4];
E=[5 6;7 8];
F=D.*E;
上面的代码运行后,F的结果为:
5 12
21 32
矩阵乘法中,两个矩阵的行列数必须满足乘法规则,否则会导致矩阵维数不匹配的错误。同时,在矩阵乘法中,元素相乘之后需要相加,计算量大,速度慢。例如,下面的代码运行会报错:
G=[1 2];
H=[5 6;7 8];
I=G*H;
在矩阵点乘中,两个矩阵的维数可以不相同,只要对应位置的元素相乘即可。另外,在矩阵点乘中,元素相乘不需要相加,计算速度快。例如,下面的代码不会报错:
J=[1 2];
K=[5 6;7 8];
L=J.*K;
在向量运算中,采用*进行乘法运算的话,得到的结果是一个数,这个数是两个向量内积的结果。因此,两个向量的长度必须相等,否则会导致矩阵维数不匹配的错误。如下面的代码运行结果是9:
M=[1 2 3];
N=[2 3 1];
O=M*N';
而用.*进行乘法运算,得到的结果是一个向量,向量中的元素是对应位置上两个向量间的元素相乘得到的结果。因此,两个向量的长度必须相等,否则会导致矩阵维数不匹配的错误。如下面的代码运行结果是[2 6 3]:
P=[1 2 3];
Q=[2 3 1];
R=P.*Q;
在矩阵和向量共同运算中,一般采用点乘的方式进行计算。例如,下面的代码实现了向量和矩阵的点乘操作:
S=[1 2];
T=[5 6;7 8];
U=S*T;
上面的代码会得到结果[19 22],这个结果是由向量S和矩阵T的每一列向量做点乘得到。而若使用*运算符,则会得到错误结果:
S=[1 2];
T=[5 6;7 8];
U=S*T';
上面的代码会得到矩阵维度错误的提示。