第3章_Matlab程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[例] 在命令窗口输入以下语句,分析执行结果: A=[4,-5,0,0,4; -5,0,7,-6,0] x1=find(A) A(x1) x2=find(A>0) y=A(x2) sum(y) %或直接写成 sum(A(x2)) x3=find( rem(A,2)~=0 ) %等价于x3=find( rem(A,2) ) A(x3) x4=find(A>0,2) A(x4) x5=find(A>0,2, 'last') A(x5) [I,J]=find(A>0) , [I,J,V]=find(A>0) , A(I,J)
方法2:利用逻辑数组下标 A=[4,-5,0,0,4; -5,0,7,-6,0] Lp = A>0 & rem(A,2)==0 yp=A(Lp) %A中的正偶数,也可直接写成 yp=A(A>0 & rem(A,2)==0) N=length(yp) sum(yp)
3.2.2 逻辑函数
[例4] 产生5阶随机方阵A,其元素为[10,90]区间 的随机整数,然后判断A的元素是否能被3整除。 (1) 生成5阶随机方阵A。 A=fix((90-10)*rand(5)+10) (2) 判断A的元素是否可以被3整除。 P=rem(A,3)==0 其中,rem(A,3)是矩阵A的每个元素除以3的余数 矩阵。
(2) 逻辑数组作为下标 关系表达式及逻辑表达式 的运算结果为逻辑数组。 此外,还可以用logical函数将数值数组转换为逻 辑数组。 格式:logical(X) 功能:将数值数组X转换为逻辑数组 例如:X=2*eye(3); L=logical(X)
[例] 用逻辑数组下标提取子数组 A=[1 2;3 4;5 6] L1=logical([1 0 1]) L2=logical([1 1]); A(L1,L2) %全下标 A(L1) %单下标 说明: 用A(L1,L2)表示子数组,其中,L1,L2为逻 辑向量,当L1,L2的元素为零,则不取该位置的 元素,反之则取该位置的元素。单下标的情况与 此类似。
Matlab的逻辑函数有:关系逻辑函数、工作状态 判断函数(一般为Matlab软件的版本、安装系统 等信息,此处略)、特殊数据判断函数和数据类 型函数。
1. 关系逻辑函数
Matlab的ops函数库提供了两个关系逻辑函数any和all 格式:any(x) 功能:1)若x是一个向量,如果x中存在非零元素, 则返回1;否则,返回0。2)若x为矩阵,则分别对矩 阵的每一列进行判断,最后返回一个由元素0和1组成 的行向量。 格式:all(x) 功能:1)若x是一个向量,如果x中所有元素都非0, 则返回1;否则,返回0。2)若x为矩阵,则分别对矩 阵的每一列进行判断,最后返回一个由元素0和1组成 的行向量。
其它格式: 格式:[I, J]=find(X), X是矩阵 功能:返回矩阵X中非零元素的行号和列号。 格式:[I, J,V]=find(X), X是矩阵 功能:返回矩阵X中非零元素的行号、列号及值。
此外,还可以用下列格式找出前k个和最后 k个非零元素。 […]=find(X,k,’first’) […]=find(X,k,’last’) find(X,k,’first’) 也可以写为find(X,k)。
a && b (先决与):当a为0时,则结果为0,而不去 计算&&右边表达式的值(只有当该逻辑运算符的 左边非零时,才继续执行该符号右边的运算)。 a || b (先决或):当a为1时,则结果为1,而不去 计算||右边表达式的值(只有当该逻辑运算的左 边为零时,才继续执行该符号右边的运算)。 注意: 只有当a和b为标量时,a && b (先决与)和a || b (先决或)才有意义。
[例3-9] 设A=[-6,NaN,Inf,5; -Inf, -pi, eps, 0],分析以 下语句的执行结果 all(A) all(all(A)) % 或all(A(:)) any(A) any(any(A)) 或 any(A(:)) isnan(A) isinf(A) isfinite(A)
X=isnan(A) 判断数组A的元素是否为NaN,返回一个与A
同型的数组。如果A(i)是NaN,则X(i)取1,否则X(i)取0。
X=isfinite(A) 判断数组A的元素是否为有限值,返回一
个与A同型的数组。如果A(i)是有限值,则X(i)取1;否则X(i)取0 [例] 当A=[pi NaN Inf -Inf]时,分析isinf(A),isnan(A)和 isfinite(A)的运算结果
方法2:应用逻辑数组下标 A=[1 2 3;2 10 -1;-3 -10 7] x=abs(A)>3 A(x) %或直接 A(abs(A)>3) A(A>3)=4 A(A<-3)=-4
[例]执行语句A=reshape(1:100,10,10),然后修改 矩阵A的元素:将大于25的元素修改为其平方根 方法1:利用find函数 A=reshape(1:100,10,10); x=find(A>25); A(x)=sqrt(A(x)) 方法2:利用逻辑数组下标 A=reshape(1:100,10,10); L=(A>25); A(L)=sqrt(A(L)) [练习] 修改5阶魔方矩阵A的元素值,将其中小于 或等于5的元素修改为其平方,大于5的元素修改 为其平方根,显示修改后的矩阵A。
2. 特殊数据判断函数
Matlab的特殊数据一般是指无穷大(inf)、非数 (NaN)和有限值(finite)等。elmat函数库中的几个特殊 数据判断函数: X=isinf(A) 判断数组A的元素是否为无穷大,返回一个
与A同型的数组。如果A(i)是无穷大, 则X(i)取1;否则,X(i)取0
elmat库中的一个函数: isequal(A,B) 如果A和B是同型的,并且数 组的元素也相同,则返回1,否则返回0
3.1.3 关系运算的一个应用 ——提取子数组
(1) find 函数(在elmat函数库中) : 基本格式:indexes=find(X) 功能:返回数组X中非零元素的序号(单下标), 如无非零元素,则返回空数组。
运算规则: (1)Matlab中约定:一个数值型变量或常量作为逻辑表 达式使用或参与逻辑运算时,任何非0的数都被看作 是逻辑“真”,而0被认为是逻辑“假”; 关系运算和 逻辑运算的结果都是由0和1组成的逻辑数组。 (2) 设a和b是标量,则 a&b 当 a和b都非零时,运算结果为1;只要a和b中 有一个为零,则结果为0. a|b 只要a和b中有一个非零,则结果为1 (只有当a和 b 都为零时,运算结果为0,否则为1) ~a 当a是零时,运算结果为1;当a非零时,运算结 果为0 xor(a,b) 当a和b中恰好一个为0,另一个不为0时运算 结果为1,否则为0
3.2 逻辑运算
3.2.1. 逻辑运算符和运算法则 逻辑操作的引入,将使复杂的关系运算成为可能。 逻辑操作运算符: 数组逻辑操作(Element-Wise logical operation) 运算符:~ (not), & (and), | (or), xor 先决逻辑操作(Short-Circuit logical operation) 运算符:&& ||
3.1.2 关系运算符的运算法则
Biblioteka Baidu
1)当两个比较量是标量时,直接比较两数的大小。 若关系成立,关系表达式结果为1,否则为0。 2)当参与比较的量是两个同型的矩阵时,比较是 对两矩阵相同位置的元素按标量关系运算规则逐 个进行,并给出元素比较结果。最终的关系运算 的结果是一个维数与原矩阵相同的矩阵,它的元 素由0或1组成。 3)当参与比较的一个是标量,而另一个是矩阵 时,则把标量与矩阵的每一个元素按标量关系运 算规则逐个比较,并给出元素比较结果。最终的 关系运算的结果是一个维数与原矩阵相同的矩阵, 它的元素由0或1组成。
另外几个特殊数据判断函数
isempty(A) 如果A是空数组,则返回1,否则返回0 isscalar(A) 如果A是1x1 的矩阵(标量),则返回1;否
则返回0
isvector(A) 如果A是行向量或列向量,则返回1;否则返
回0
3. 数据类型判断函数
数据类型判断函数可以对数组的类型做出判断, 如逻辑数组、稀疏数组、实数数组、标量数组、 向量数组等,还可以判断数组中数值型数据的类 型,如数值型的数据类型有双精度型(默认)、 单精度、带符号整数型(int8,int16,int32,int64)和 无符号整数型(uint8,uint16,uint32,uint64) 常用的数据类型判断函数有:
[例] 已知A=[1 2 3;2 10 -1;-3 -10 7],1) 找出A中绝 对值大于3的元素;2) 将A中所有大于3的元素修 改为4,小于-3的元素修改为-4。 方法1:应用find函数 A=[1 2 3;2 10 -1;-3 -10 7] x=find(abs(A)>3) A(x) x1=find(A>3); A(x1)=4; x2=find(A<-3); A(x2)=-4;
3.1 关系运算
Matlab中除了可以进行矩阵和数组的算术运算外, 还可以进行关系和逻辑运算。 Matlab中约定: 所有关系表达式的计算结果,即输出,是一个由0 或1组成的逻辑数组(logical array)。在此数组中, 1表示真,0表示假。 逻辑数组是数值类的子类。它继承了“数值数组” 的全部属性,有不同于普通“数值”的“个性”。 3.1.1 关系运算符 MATLAB提供了6种关系运算符: ==(eq)、~=(ne) 、 <(lt)、<=(le)、>(gt)、>=(ge) 。
[例1] 已知A=[4,-5,0,0,4; -5,0,7,-6,0],找出A的元 素中的正偶数,统计个数、并求和。 方法1:利用find函数 A=[4,-5,0,0,4; -5,0,7,-6,0] xp=find(A>0 & rem(A,2)==0) %A中正偶数的序号 yp=A(xp) %A中的正偶数 N=length(xp) % A中正偶数的个数 sum(yp) %A中正偶数之和
关系运算符的运算法则(cont)
4) 对于复数,<, <=, >, >=四种运算,仅对参加比 较变量的实部进行比较;==和~=则对实部和虚部 都进行比较。
[例1] 分析语句a=2+2==4 的执行结果 [例2] 分析语句a='fate',b='cake',result=a==b的执 行结果 [例3] 已知a=[1 2 3 4],b1=3,b2=[0.1 2.1 2.9 4.1], 分析a与b1以及a与b2的6种关系运算的结果。
第三章 Matlab程序设计
主要内容
关系运算和逻辑运算 主要的逻辑函数 函数的定义及调用 流程控制-分支、循环 数据文件的读写
在程序流程控制中,在逻辑、模糊推理中,都需 要对一类是非问题做出“是”或“否”的判断。 为此,Matlab设计了关系操作、逻辑操作和一些 相关函数。虽在其它程序设计语言中也有类似的 关系、逻辑运算,但是Matlab作为一种比较完善 的科学计算环境,有其自身的特点。
(3) 若参与逻辑运算的是两个同型矩阵,则对两个 矩阵相同位置的元素逐对按标量规则进行逻辑运 算。 最终运算结果是一个与原矩阵同型的逻辑矩 阵。 (4)若参与逻辑运算的一个是标量,一个是矩阵, 则分别用矩阵的每个元素和标量进行逻辑运算。 最终运算结果是一个与原矩阵同型的逻辑矩阵。 (5) 逻辑非(~)是一个单目运算。若A是一个数组, ~A对矩阵A的每个元素进行逻辑非运算,得到的结 果是一个与A同型的逻辑矩阵。