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两个矩阵之间的操作。

在我们高数的函数求导求积分中,我们使用的运算都是数量运算(一维),而这里我们错误地使用了*(矩阵乘法,二维)。由于两个运算单元得出的矩阵维度不一致(每个单元的值域包含的元素个数不同),或者说得出的矩阵是一个无限集,那肯定是会报错的。

那么类似地,./、.^都是同样的道理。

发布了3 篇原创文章 · 获赞 1 · 访问量 101

猜你喜欢

转载自blog.csdn.net/qq_40625251/article/details/104594337