(转载)从0开始学matlab(第11天)—关系运算符和逻辑运算符

选择结构的运算由一个表达式控制的,这个表达式的结果只有 true(1)和 false(0)。有两种形式的运算符可以在 MATLAB 中关系得到 true/false:关系运算符和逻辑运算符。跟 C 语言一样,MATLAB 没有布尔型和逻辑数据类型。MATLAB 把 0 值作为结果false,把所有的非 0 值作为结果 ture。

1 关系运算符

关系运算符是指两数值或字符操作数的运算符,这种运算将会根椐两操作数的关系产生结果 true 或 false。关系运算的基本形式如下
a1 op a2

        其中 a1a2是算术表达式,变量或字符串,op 代表关系运算符中的一个,如表1所示。如果两者的关系为真(true)时,那么这个运算将会返回 1 值;否则将会返回 0 值。

表1 关系运算符

e5843fb5ef5645368af53a0678964ebd.png

514d25a61c514505a245b30386e78558.png        最后一个运算得到的结果为 1,是因为字符之间的求值要按照子母表的顺序。关系运算符也可用于标量与数组的比较。例如,如果a=[1 0;-2 1]和 b=0,那么表达式 a>b 将会产生结果[1 0; 1 0]例如a=[1 0;-2 1],b=[0 2;-2 -1],表达式 a>=b 将会产生结果[1 0;1 1].如果这个数组具有不同的大小,那么将会产生运行时错误。注意因为字符串实际上是字符的数组,关系运算符也比较两个相同长度的字符串。如果它们有不同的长度,比较运算将会产生一个错误。在第六章中我们将会学到一个更普遍的方法。等于关系运算符由两个等号组成,而赋值运算符只有一个等号。它们是完全不同 的两个符号,初学者极易混淆。符号==是一个比较运算符,返回一个逻辑数,而符号=是将等号右边的表达式的值赋给左边的变量。当进行比较运算的时候,初学者经常用误用符号=。

常见编程错误
小心谨慎不要混淆了等于关系运算符(==)和赋值运算符(=)。
在运算的层次中,关系运算在所有数学运算的之后进行。所以下面两个表达式是等价的,均产生结果 1。
7 + 3 < 2 + 11
(7 + 3)< (2 + 11)
        等于运算符(==)如果两变量值相同将会返回变量值 1,如果不同将返回 0。
        不等运算符(~=)如果两变量值不同则返回 1,相则返回 0。
用这两个运算符比较两个字符串他是安全的,不会出现错误。但对两个数字数据的比较,将可能产生异想不到的错误。两个理论上相等的数不能有一丝一毫的差别,而在计算机计算的过程中出现了近似的现象,从而可能在判断相等与不相等的过程中产生错误,这种错误叫做 round off 错误。例如,考虑下面的两个数,两者均应等于 0。
a = 0; 
b = sin(pi);
因为这两个数在理论上相等的,所以关系式 a==b 应当返回值 1。但在事实上,MATLAB 计算所产生的结果的却是
ans = 0

        MATLAB 报告了 a 和 b 不同因为他产生了一个 round off 错误,在计算中 sin(pi)产生了结果 1.2246×10^(-16) 而不是 0。两个理论上相等的值因为 round off 错误而失之发生了细微的差别。我们可以通过检测两数之间在一定的范围内是不是近似相等,在这个精确范围内可能会产生 round off 错误。例如测试

abs(a - b) < 1.0E-14 

        结果就是ans=1

将会产生正确的结果,不管在 a 与 b 的计算中产不产生的 round off 错误。
好的编程习惯
在我们检测两数值是否相等时一定要小心,因为 round off 错误可能会使两个本来应该相等的值不相等了。这时你可以在 round off 错误的范围内它是不是近似相等。

2 逻辑运算符

逻辑运算符是联系一个或二个逻辑操作数并能产生一个逻辑结果的运算符。有三个二元运算符:分别为 AND,OR 和异或运算符,还有一个一元运算符 NOT。二元逻辑运算的基本形式
a1 op a2
一元逻辑运算的基本形式为
op a1
        a1 a2代表表达式或变量,op 代表逻辑运算符,如表2所示。如果 l 1 l 2 的逻辑运算关系为 true,那么运算将会返回值 1,否则将会产生 0。

 表2 逻辑运算符

080fd7a531f7484685e8026ea76a4e60.png

运算的结果总结在表3 中,它向我们展示每一种运算所有可能的结果。如果一个数的值不为 0,那么 MATLAB 将把看作 true,如果它为 0,则其为 false。所以~5 的结果为 0,~0 的结果为 1。
表3 逻辑真值表
b60c9cb47d384b53aec6d047ebf5cd4c.png

dcaaff9dee094bd49e477894941a024a.png

        在运算的顺序中,逻辑运算在所有的数学运算和关系运算之后进行。

表达式中的运算顺序如下:
1.所有的数学运算按照前面描述的顺序的进行。
2.从左向右依次进行关系运算
3.执行所有~运算
4.从左向右依次进行&运算
5.从左向右依次进行|运算和数学运算一样,括号能够改变括号的默认顺序。
下面是关于逻辑运算的一些例子。

1

假设下面有三个变量被初始和一些表达式及其运算结果。
        value1 = 1value2 = 0value3 = -10

9c02163eecbc478e8c1af7f3bf959544.png

        因为~运算在其它的逻辑运算之前进行,那么(f)中的括号是必须的。如果去掉括号的话,(f)表达式将等价于(~value1)&value3。

        MATLAB 中有大量的逻辑函数,在条件满足时,函数返回 1。条件不满足时,返回0。这些函数和逻辑运算与关系联合在组成选择结构和循环结构。表 4列出了一系列的逻辑函数。

表 4 MATLAB 逻辑函数

54261cd6dba940248f603475b674ece4.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22557.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android JSBridge的加载时机问题

https://github.com/lzyzsd/JsBridge 也算是比较悠久和使用了。 可供参考的android和IOS&#xff0c;以及前端的使用 https://segmentfault.com/a/1190000018208609 遇到的问题&#xff1a; 比如&#xff1a; 从前端在加载WebView的时候&#xff0c;执行了某些动作&#xff0c…

FreeRTOS 低功耗模式设计 STM32平台

1. STM32F105RBT6 的三种低功耗模式 1.1 sleep睡眠模式、stop停机模式、standby 待机模式 1.2 STM32中文参考手册有介绍STM32 低功耗模式的介绍 2. FreeRTOS 采用的是时间片轮转的抢占式任务调度机制&#xff0c;其低功耗设计思路一般是&#xff1a; ① 当运行空闲任务&#…

【UE4 C++】08-生成抛射物来模拟攻击效果

步骤 新建一个C类&#xff0c;父类为Actor&#xff0c;命名为“ASMagicProjectile” 在“ASMagicProjectile.h”中添加如下代码&#xff1a; 在“ASMagicProjectile.cpp”中添加如下代码&#xff1a; 编译后在虚幻编辑器中新建一个蓝图&#xff0c;选择父类为我们刚创建的C类…

Java设计模式之行为型-迭代器模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 迭代器模式是一种常用的设计模式&#xff0c;它主要用于遍历集合对象&#xff0c;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露该对象的内部表示。 举个简单的…

分布式微服务架构下网络通信的底层实现原理

在分布式架构中&#xff0c;网络通信是底层基础&#xff0c;没有网络&#xff0c;也就没有所谓的分布式架构。只有通过网络才能使得一大片机器互相协作&#xff0c;共同完成一件事情。 同样&#xff0c;在大规模的系统架构中&#xff0c;应用吞吐量上不去、网络存在通信延迟、…

Android Framework岗位面试真题分享

Handler是Android中的消息处理机制&#xff0c;是一种线程间通信的解决方案&#xff0c;同时你也可以理解为它天然的为我们在主线程创建一个队列&#xff0c;队列中的消息顺序就是我们设置的延迟的时间&#xff0c;如果你想在Android中实现一个队列的功能&#xff0c;不妨第一时…

【UE】运行游戏时就获取鼠标控制

问题描述 我们经常在点击运行游戏后运行再在视口界面点击一下才能让游戏获取鼠标控制。其实只需做一个设置就可以在游戏运行后自动获取鼠标控制。 解决步骤 点击编辑器偏好设置 如下图&#xff0c;点击“播放”&#xff0c;再勾选“游戏获取鼠标控制” 这样当你运行游戏后直…

shardingsphere mybatisplus properties和yml配置实现

shardingsphere mybatisplus properties和yml配置实现 目录结构 model package com.oujiong.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date;/*** user表*/ TableName("user") Data public class Use…

开发工具VSCODE的使用记录

vscode简介 Visual Studio Code&#xff08;简称“VS Code” [1] &#xff09;是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代Web和云应用的跨平台源代码编辑器&#xff0c; [2] 可在桌面上运行…

python详解(8)——进阶(2):初步算法

目录 &#x1f3c6;一、前言 &#x1f3c6;二、时间复杂度 &#x1f3c6;三、递推 &#x1f6a9;1.简介 &#x1f6a9;2.爬楼梯 &#x1f6a9;3、猴子吃桃 &#x1f3c6;四、递归 &#x1f6a9;1、简介 &#x1f6a9;2、递归求斐波那契数列 &#x1f6a9;3、递归求阶乘 &#x…

“开放合作 共享未来”华秋联手伙伴共创硬件生态,助力物联网硬件加速创新

2023年7月11日&#xff0c;华秋携产品与方案亮相慕尼黑上海电子展&#xff08;electronica China&#xff09;&#xff0c;并与5家生态伙伴签署硬件生态共创战略协议&#xff0c;通过“硬件软件供应链”的合作模式&#xff0c;发挥各自行业优势&#xff0c;共同推动电子产业的创…

springboot时间管理系统

通过前面的功能分析可以将时间管理系统的功能分为管理员&#xff0c;用户两个部门&#xff0c;系统的主要功能包括首页&#xff0c;个人中心&#xff0c;系统公告管理&#xff0c;用户管理&#xff0c;时间分类管理&#xff0c;事件数据管理&#xff0c;目标数据管理&#xff0…