当前位置:网站首页>MATLAB程序设计与应用 2.5 MATLAB运算
MATLAB程序设计与应用 2.5 MATLAB运算
2022-08-01 06:23:00 【Ding Jiaxiong】
MATLAB程序设计与应用
2. 第2章 MATLAB数据及其运算
2.5 MATLAB运算
MATLAB的运算都是针对矩阵而言的,既有矩阵意义下的运算,也有针对矩阵元素的运算。就运算的性质而言,有算术运算、关系运算和逻辑运算。
2.5.1 算术运算
基本算术运算
MATLAB的基本算术运算有+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)。
矩阵加减运算
若A和B同型,则可以执行矩阵的加减运算,A和B的相应元素相加减。如果A与B不同型,则MATLAB将给出错误信息,提示用户两个矩阵的维数或大小不匹配。
一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。
>> x = [2,-1,0;3,2,-4]; >> y = x - 1 y = 1 -2 -1 2 1 -5
矩阵乘法
假定有两个矩阵A和B,若A为mxn矩阵,B为nxp矩阵,则C=A×B为mxp矩阵,其各个元素为:
>> A = [1,2,3;4,5,6]; >> B = [1,2;3,0;7,4]; >> C = A * B C = 28 14 61 32
矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时则称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容。如果两者的维数或大小不相容,则将给出错误信息,提示用户两个矩阵是不可乘的。
在 MATLAB中,还可以进行矩阵和标量相乘运算,标量可以是乘数也可以是被乘数。矩阵和标量相乘是矩阵中的每个元素与此标量相乘。
矩阵除法
在MATLAB中,有两种矩阵除法运算:\和/,分别表示左除和右除。如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。A\B等效于A的逆左乘B矩阵,也就是inv(A)*B;而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。
对于含有标量的运算,两种除法运算的结果相同,对于矩阵运算,一般 A\B≠B/A。
>> A = [1,2,3;4,2,6;7,4,9]; >> B = [4,3,2;7,5,1;12,7,92]; >> C1 = A \ B C1 = 0.5000 -0.5000 44.5000 1.0000 0.0000 46.0000 0.5000 1.1667 -44.8333 >> C2 = B / A C2 = -0.1667 -3.3333 2.5000 -0.8333 -7.6667 5.5000 12.8333 63.6667 -36.5000 >> C3 = A / B C3 = 7.9623 -4.2453 -0.0943 -4.5472 2.9434 0.1321 -5.1321 3.6415 0.1698 >> C4 = B \ A C4 = 6.0755 -3.3396 2.6038 -7.6792 5.0566 -2.4340 -0.1321 0.0943 -0.0566
矩阵的乘方
一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。
>> A = [1,2,3;4,5,6;7,8,0]; >> A ^ 2 ans = 30 36 15 66 81 42 39 54 69 A ^ 2 = A * A
矩阵的开方
>> A = [1,2,3;4,5,6;7,8,0]; >> A ^ 0.1 ans = 0.9750 + 0.2452i 0.1254 - 0.0493i 0.0059 - 0.0604i 0.2227 - 0.0965i 1.1276 + 0.1539i 0.0678 - 0.1249i 0.0324 - 0.1423i 0.0811 - 0.1659i 1.1786 + 0.2500i
点运算
在 MATLAB 中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.*、./、.\和.^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型。
>> A = [1,2,3;4,5,6;7,8,9]; >> B = [-1,0,1;1,-1,0;0,1,1]; >> C = A .* B C = -1 0 3 4 -5 0 0 8 9
A.*B表示A和B单个元素之间对应相乘,显然与A*B的结果不同。
如果A、B两矩阵同型,则A./B表示A矩阵除以B矩阵的对应元素。B.\A 等价于A./B。
>> A = [1,2,3;4,5,6]; >> B = [-2,1,3;-1,1,4]; >> C1 = A ./ B C1 = -0.5000 2.0000 1.0000 -4.0000 5.0000 1.5000 >> C2 = B .\ A C2 = -0.5000 2.0000 1.0000 -4.0000 5.0000 1.5000
显然,A./B和B.\A值相等。这与矩阵的左除、右除是不一样的。
若两个矩阵同型,则A.^B表示两矩阵对应元素进行乘方运算。
>> A = [1,2,3]; >> B = [4,5,6]; >> C = A .^ B C = 1 32 729
指数可以是标量
>> A = [1,2,3]; >> C = A .^ 2 C = 1 4 9
底数也可以是标量
>> A = [1,2,3]; >> B = [4,5,6]; >> C = 2 .^ [A B] C = 2 4 8 16 32 64
点运算是MATLAB很有特色的一个运算符,在实际应用中起着很重要的作用。
当x=0.1、0.4、0.7、1时,分别求y=sinxcosx的值。
>> x = 0.1:0.3:1; >> y = sin(x) .* cos(x) y = 0.0993 0.3587 0.4927 0.4546 >> y = sin(x) * cos(x) 错误使用 * 用于矩阵乘法的维度不正确。请检查并确保第一个矩阵中的列数与第二个矩阵中的行数匹配。要单独对矩阵的每个元素进行运算,请使 用 TIMES (.*)执行按元素相乘。
如果x只有一个值,才能直接用乘法
2.5.2 关系运算
MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、=(等于)、~=(不等于)。它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。MATLAB还提供了与6种关系运算符对应的函数lt、le、gt、ge、eq、ne。
当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0
>> 12 > 3 ans = logical 1 >> eq(2,3) ans = logical 0
当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
【产生5阶随机方阵A,其元素为[10,90]区间的随机整数,然后判断A的元素是否能被3整除。】
>> A = fix((90 - 10 + 1) * rand(5) + 10)
A =
75 17 22 21 63
83 32 88 44 12
20 54 87 84 78
83 87 49 74 85
61 88 74 87 64
>> P = rem(A , 3) == 0
P =
5×5 logical 数组
1 0 0 1 1
0 0 0 0 1
0 1 1 1 1
0 1 0 0 0
0 0 0 1 0
关系运算函数
函数名 | 含义 |
---|---|
all | 若向量的所有元素非零,则结果为1,否则为0 |
any | 若向量中任何一个元素非零,则结果为1,否则为0 |
exist | 检查变量在工作空间中是否存在,若存在,则结果为1,否则为0 |
find | 找出向量或矩阵中非零元素的位置 |
isempty | 若被查变量是空矩阵,则结果为1,否则为0 |
isinf | 若元素是+(-)inf,则结果矩阵相应位置元素取1,否则取0 |
isnan | 若元素是 nan,则结果矩阵相应位置元素取否则取0 |
isfinite | 若元素值大小有限,则结果矩阵相应位置元素取1,否则取0 |
isinteger | 若被查变量是整型,则取1,否则取0 |
isnumeric | 若被查变量是数值型,则取1,否则取0 |
isreal | 若被查变量是实数,则取1,否则取0 |
isfloat | 若被查变量是浮点型,则取1,否则取0 |
【建立矩阵A,然后找出大于4的元素的位置,并输出相应位置的元素。】
>> A = [4,-65,-54,0,6;56,0,67,-45,0]
A =
4 -65 -54 0 6
56 0 67 -45 0
>> k = find(A > 4)
k =
2
6
9
>> A(k)
ans =
56
67
6
find 函数得到的矩阵元素的位置是以相应元素的序号来表示的。
2.5.3 逻辑运算
MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非)。此外,还提供了4个逻辑运算函数:and(a,b)、or(a,b)、not(a)和 xor(a,b),分别代表与、或、非、异或运算。
在逻辑运算中,非零元素为真,用1表示;零元素为假,用0表示。设参与逻辑运算的是两个标量a和b,那么,逻辑运算的含义:
- a&b或函数and(a, b):当a、b全为非零时,结果为1,a、b只要有一个为零则结果为0。
- a|b或函数or(a, b):当a、b中只要有一个非零,结果为1,a、b全为零时结果为0。
- ~a和函数not(a):当α是零时,结果为1:当α非零时,结果为0。
- 函数xor(a, b):当a、b的值不同时,结果为1;当a、b的值相同时,结果为0。
运算法则:
- 若参与逻辑运算的是两个同型矩阵,那么运算将对矩阵相同位上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。
- 若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同型的矩阵,其元素由1或0组成。
- 逻辑非是单目运算符,也服从矩阵运算规则。
>> A = [4,65,-54,0,-6];
>> B = [0,5,3,2,-6];
>> A & B
ans =
1×5 logical 数组
0 1 1 0 1
>> xor(A > 10 , B < 10)
ans =
1×5 logical 数组
1 0 1 1 1
在算术运算、关系运算和逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
边栏推荐
猜你喜欢
随机推荐
CSP-S2019 Day1
对话MySQL之父:一个优秀程序员可抵5个普通程序员
return;代表含义
曲柄滑块机构运动分析和参数优化
Dart exception details
matplotlib pyplot
Windows taskbar icon abnormal solution
Dialogue with the father of MySQL: One excellent programmer is worth 5 ordinary programmers
dbeaver连接MySQL数据库及错误Connection refusedconnect处理
深度比较两个对象是否相同
leetcode43 string multiplication
微信小程序获取手机号phonenumber.getPhoneNumber接口开发
matlab 风速模型 小波滤波
leetcode125 验证回文串
2022.7.27好题选讲
mysql中添加字段的相关问题
Robot growth in China
Why is the lightweight VsCode used more and more?Why eat my C drive 10G?How to Painlessly Clean VsCode Cache?Teach you how to lose weight for C drive
uva10825
AspNet.WebApi.Owin 自定义Token请求参数