MATLAB中的*(乘)和.*(点乘)傻傻分不清?!
作者:互联网
MATLAB中点乘和乘的运算
0、 问题场景
最近,学校开始有MATLAB计算的课开课啦。很多小朋友都来问我为什么他们的程序无缘无故报错,答案基本都是没有分清*和.*。那么我这里就来讲一讲这俩运算的区别。
1、定义
*
:这个运算是矩阵乘法运算。MATLAB中默认的数据类型为矩阵。.*
:在运算符和前加一个点.
,将该运算转换为数量乘法,矩阵对应位置元素相乘。
2、概述
MATLAB,我习惯把它称为matrix laboratory,矩阵实验室。在MATLAB中,除了符号变量和一些特殊的变量(如结构体、类)外,数据都是以矩阵来存放的。而学过线性代数的同学都知道,矩阵是一个二维的运算单元。矩阵的乘法、除法等是非线性运算
,要求两个矩阵维度要满足转置后相同。
在MATLAB中输入
x=5
在右侧变量区双击变量x后,你会发现,显示的是1x1 double类型。意思是,x是一个1x1的矩阵,5是双精度浮点值,也就是说,x=[5]。
一个例子
现有矩阵x如下:
⎡1 2 3⎤
⎪4 5 6⎪
⎣7 8 9⎦ %机读格式为[1,2,3;4,5,6;7,8,9]
和矩阵y如下:
⎡1 0 0⎤
⎪0 1 0⎪
⎣0 0 1⎦ %机读格式为[1,0,0;0,1,0;0,0,1]
1、计算矩阵相乘(矩阵乘法):
x*y %乘,意味着矩阵乘法
结果为:
2、计算每个元素相乘(数量乘法):
x.*y %点乘,意味着矩阵元素对应位置相乘
结果为:
现在同学们大概能过体会这个差别了。
我们再看一个例子,这是一个求定积分的题目。用这个例子,我将告诉你报错的原因。
另一个例子
我们在做函数题的时候,变量都是符号型(symbols,syms)的。这些变量的赋值由一个一维向量(一行n列矩阵)来完成,运算结果也是使用一维向量来完成。
例题:求定积分:
我们这里使用quad()函数来求:
假如我们把机读格式公式中的.*(数量乘法)用、*(矩阵乘法)代替,会怎么样呢?
错误是:内部矩阵维度不匹配。
Q:哪里有矩阵?
A:请你细细解读公式。这个解析式包含两部分:一部分是x的三次项;一部分是e^x。在符号类型(symbol)表达的一个式子中,符号变量每出现一次,该变量就会联合系数、指数成为一个单独的运算单元,即一个矩阵。所以这个解析式可以看作是2x^3、e^x两个矩阵之间的操作。
在我们高数的函数求导求积分中,我们使用的运算都是数量运算(一维),而这里我们错误地使用了*(矩阵乘法,二维)。由于两个运算单元得出的矩阵维度不一致(每个单元的值域包含的元素个数不同),或者说得出的矩阵是一个无限集,那肯定是会报错的。
Eric__Chu 发布了3 篇原创文章 · 获赞 1 · 访问量 47 私信 关注标签:运算,傻傻,矩阵,相乘,MATLAB,分不清,变量,乘法 来源: https://blog.csdn.net/qq_40625251/article/details/104594337