Raj*_*aju 3 matlab operator-precedence
MATLAB
ones(2,2)*2.*ones(2,2)
ans =
2 2
2 2
ones(2,2).*2*ones(2,2)
ans =
4 4
4 4
Run Code Online (Sandbox Code Playgroud)
.*并且*是相同的优先级,因此您从左到右阅读表达式.
第一个创建2 x 2所有1 的矩阵,将元素按比例缩放2然后逐个元素地.*将矩阵乘以所有相同大小的另一个矩阵,从而得到所有2的结果.请注意,执行2 * ones(2, 2)并2 .* ones(2, 2)给出与创建2 x 2所有2 的大小矩阵完全相同的结果.这是MATLAB的一些很好的语法糖.还要注意的是扭转操作数的顺序给出相同的结果,所以ones(2, 2) * 2并ones(2, 2) .* 2给出了相同的结果.
第二个创建2 x 2所有1 的矩阵,将元素按比例缩放2然后矩阵乘以(即*)矩阵与所有1的另一个矩阵,从而得到所有4的结果.
元素乘法和矩阵乘法是两个完全不同的东西.前者确保两个矩阵的大小相同,除了其中一个操作数是标量,并创建一个与操作数大小相同的矩阵,输出中的每个元素乘以两个矩阵之间的相应位置.具体地说,假设这C(i, j)是C位置的输出矩阵(i, j),C(i, j) = A(i, j) * B(i, j).矩阵乘法是使用线性代数定律的两个矩阵的乘法.我不会侮辱你的智慧,并解释那些是你的个人资料所暗示的那样.
这并不神秘.如果你想说服自己,请从左到右输入表达式的每个部分,将以前的结果链接在一起,你会发现它是正确的:
>> A = ones(2, 2)
A =
1.00 1.00
1.00 1.00
>> A = A * 2
A =
2.00 2.00
2.00 2.00
>> A = A .* ones(2, 2)
A =
2.00 2.00
2.00 2.00
>> B = ones(2, 2)
B =
1.00 1.00
1.00 1.00
>> B = B .* 2
B =
2.00 2.00
2.00 2.00
>> B = B * ones(2, 2)
B =
4.00 4.00
4.00 4.00
Run Code Online (Sandbox Code Playgroud)
我还鼓励阅读有关两者之间差异的文档:https://www.mathworks.com/help/matlab/ref/times.html,https://www.mathworks.com/help/matlab/ref/mtimes .html.