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

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

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

MATLAB中, *矩阵法运算符,而 .*矩阵对应位置元素相的运算符。 当使用 * 运算符时,MATLAB会按矩阵法的规则进行计算,即要求两个矩阵的维度满足转置后相同。这意味着矩阵的行数第二个矩阵的列数必须相等才能进行矩阵法运算。 而当使用 .* 运算符时,MATLAB会将该运算转换为数量法,即对应位置的元素相。这意味着两个矩阵的大小可以不一致,只要它们的行数列数相同,就可以使用 .* 运算符进行对应位置元素的相。 举个例子来说,假设有两个矩阵 A B,它们的维度分别为 m × n p × q。那么 A * B 只有在 n 等于 p 时才能进行矩阵法运算,而 A .* B 只要 m、n、p、q 相等,即使维度不同也可以进行对应位置元素的相。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [历年真题Matlab编程数学建模工具箱重要算法](https://download.csdn.net/download/m0_58719994/88269408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MATLAB中的*.*傻傻分不清?!](https://blog.csdn.net/qq_40625251/article/details/104594337)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值