MATLAB知识点:逻辑运算函数

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili


节选自第3章 3.4.4 逻辑运算

3.4.4.1     逻辑运算函数

在上一节介绍关系运算时,我们提到过:MATLAB中使用逻辑值表示布尔变量,逻辑值1代表真(true),逻辑值0代表假(false)。而逻辑运算就是对逻辑值进行的运算。大部分的编程语言都会涵盖四个最基本的逻辑运算方法:逻辑与、逻辑或、逻辑非和逻辑异或。

下表给出了MATLAB中的定义(注意:下表中的1和0是逻辑值1和0):

注意,上表中函数名和对应的运算符可以执行相同的功能,除了“逻辑异或”没有相应的运算符外,剩下三个运算方法都有对应的运算符。

这四个运算方法的使用方法较为相似,以“逻辑与”为例,大家可以查看“逻辑与”的帮助文档:A & B 对数组 A 和 B 执行逻辑 AND 操作,并返回包含设置为逻辑值 1 (true) 或逻辑值 0 (false) 的元素的数组。如果 A 和 B 在相同的数组位置都包含非零元素,则返回的数组中对应位置的元素将设置为逻辑值 1 (true)。如果不是,则将数组元素设置为 0。and(A,B) 是执行 A & B 的替代方法,但很少使用。(注:该帮助文档来自于MATLAB2023之前的版本,新版本增加对表格类型数据的计算)

从帮助文档可以得知:(1)MATLAB推荐大家直接使用运算符进行计算,因此&、|和~这三个符号的功能大家要牢记,我们主要使用这三个符号而不是对应的函数进行计算。(2)“逻辑与&”是对数组A和B进行计算的,计算时会比较A和B对应位置的元素。数组A和B的大小不一定要完全相同,只需要符合算术运算中介绍的五种兼容模式即可。(3)“逻辑与&”不仅可以作用在逻辑值0和1上,还可以用于普通的数值上,这时候,MATLAB会将非零数值视为逻辑1,将数值零视为逻辑0进行运算。例如:3&5返回逻辑值1,-4&0返回逻辑值0。我们来看两个例子:

有同学可能会有疑问,为什么MATLAB会将非零数值视为逻辑1,将数值零视为逻辑0?这是因为MATLAB在进行逻辑运算之前,在计算机内部自动将数值转换成了逻辑值。我们也可以使用logical函数手动进行转换:

L = logical(A) 将 A 转换为一个逻辑值数组。A 中的任意非零元素都将转换为逻辑值 1 (true),零则转换为逻辑值 0 (false)。复数值和 NaN 不能转换为逻辑值。

举个例子,我们随机生成一个4行3列的矩阵,将矩阵中非0位置的元素转换成逻辑值1,等于0的位置的元素转换成逻辑值0:

特别地,我们还可以使用true和false函数分别创建全为逻辑1和逻辑0的逻辑矩阵。以true函数为例,它的主要用法有两种:(1)true(n)可以生成一个n行n列全为逻辑值1的方阵,特别地,当n等于1时可以简写为true,此时表示一个常量;(2)true(m,n)可以生成一个m行n列全为逻辑值1的矩阵。

除了“逻辑与&”外,剩下的三个逻辑运算函数也可以用于普通的数值上,MATLAB也会将非零数值视为逻辑1,将数值零视为逻辑0进行运算,下面我们举几个例子:

另外,我们有时候也会使用“逻辑与 &”和“逻辑或 |”进行连续运算,例如1 & 2 & 3和0 | 3 | 0的结果都是逻辑1,下面我们再看几个例子:

下面我们再次谈谈运算优先级的问题,MATLAB中的运算符有不同的计算优先级,优先级高的先进行计算,例如3+4*2等于11而不是14,这是因为乘法的优先级高于加法。类似的,关系运算符(例如>、==、~=)的优先级要高于逻辑运算符&和|,例如3 > 4 & 2 > -1的返回结果是逻辑0。大家可以去MATLAB官网查看运算符优先级的帮助文档,但没有必要刻意去记,我们只需要养成一个好的习惯:使用小括号来指定计算的先后顺序,例如我们可以将上面的代码改成(3 > 4) & (2 > -1),这样计算的先后顺序看起来会清楚很多。另外有一个特殊的优先级顺序需要大家了解, & 运算符的优先级要高于 | 运算符。尽管 MATLAB 通常按从左到右的顺序计算表达式,但表达式 a|b&c 按 a|(b&c) 形式计算,因此,对于同时包含 & 和 | 的语句,比较好的做法是使用小括号显式地指定期望的语句优先级。

我们来做一个小练习:随机生成一个具有20个元素的向量,用来表示20名同学的成绩(假设成绩为满分100分的整数制)。请通过代码计算得到一个具有20个元素的逻辑向量,向量中对应位置的元素为逻辑值1时表示该同学的成绩在区间[60,80)内,为逻辑值0时表示成绩在区间[60,80)外。

答案如下:

A = randi([0,100],1,20)res = (A >= 60) & (A < 80)% 一定要注意:不能写成:60 <= A < 80哦!

如果要找出[0 , 60) ∪ [80 , 100]分的同学呢?

答案如下(下面两种方法都可以):

方法1:(A < 60) | (A >= 80)方法2:~((A >= 60) & (A < 80))

下面我们再来介绍MATLAB中另外两个使用频率很高的逻辑运算符:&&||.

这两个运算符和“逻辑与&”和“逻辑或|”作用相同,但它们有两个非常重要的区别:

(1)&&和||只能对标量(只有一个元素)进行逻辑运算,不能对有多个元素的向量或者矩阵进行运算,而&和|可以。比如我们上面那个练习题,你只能使用&和|进行运算。

(2)&&和||进行逻辑运算时具有短路功能,可以提高运行效率:

  • 计算A && B时,如果A为逻辑0,则B不会被判断,因为最后的结果一定是逻辑0;
  • 计算A || B时,如果A为逻辑1,则B不会被判断,因为最后的结果一定是逻辑1。

          

举个例子:假设a等于10,b等于3,现在要计算:(a+b < 10) && (a/b > 1),那么MATLAB首先会判断前面一项:(a+b < 10),因为这一项计算的结果为逻辑0,所以后面的(a/b > 1)这一项不会被计算,MATLAB会直接返回逻辑0;如果你使用的是:(a+b < 10) & (a/b > 1),那么这两项都会被计算,这样的话效率会低一点。在下一章中,我们会介绍if判断语句和while循环语句,和&、|相比,&&和||在if和while语句中使用频率更高。

思考题:前面我们介绍过logical函数,它能将数值转换为逻辑值,但如果输入的是NaN,那么MATLAB会报错,请大家思考:分别运行(10 > 3) | logical(NaN)和(10 > 3) || logical(NaN)的结果是什么?

答案如下:

运行 (10 > 3) | logical(NaN) 会报错,因为前后两项都会被计算,所以当MATLAB运行到后面的logical(NaN)时会报错;运行 (10 > 3) || logical(NaN) 会返回逻辑1,因为前面一项(10>3)返回逻辑1,此时会触发||的短路机制,这时候就会直接返回逻辑1。

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

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

相关文章

springboo冬奥会科普平台源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理平台应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

AD域国产替代方案,助力某金融企业麒麟信创电脑实现“真替真用”

近期收到不少企业客户反馈采购的信创PC电脑用不起来&#xff0c;影响信创改造的进度。例如&#xff0c;某金融企业积极响应国产化信创替代战略&#xff0c;购置了一批麒麟操作系统电脑。分发使用中发现了如下问题&#xff1a; • 当前麒麟操作系统电脑无法做到统一身份认证&…

Flutter组件 StatefulWidget、StatelessWidget 可继承写法

前言 学过Java的同学&#xff0c;应该都知道面向对象语言的三大特征&#xff0c;封装、继承、多态&#xff1b; Dart也是面向对象的语言&#xff0c;但是在Flutter中的很多组件都被下划线 _ 标记为私有&#xff0c;导致无法继承&#xff0c;本文将介绍一种非私有的创建组件写…

@PostMapping/ @GetMapping等请求格式

目录 1.只传一个参数的 第一种 第二种 第三种:表单 2.传整个对象的 2.1修改实体类就是传整个对象过来 2.2新增实体类就是传整个对象过来新增 1.只传一个参数的 第一种 PostMapping("/add/{newsId}")public Result addOne(PathVariable Integer newsId) {}pos…

Python爬虫之文件存储#5

爬虫专栏&#xff1a;http://t.csdnimg.cn/WfCSx 文件存储形式多种多样&#xff0c;比如可以保存成 TXT 纯文本形式&#xff0c;也可以保存为 JSON 格式、CSV 格式等&#xff0c;本节就来了解一下文本文件的存储方式。 TXT 文本存储 将数据保存到 TXT 文本的操作非常简单&am…

排序算法---插入排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 插入排序是一种简单直观的排序算法&#xff0c;它的基本思想是将待排序的元素分为已排序和未排序两部分&#xff0c;每次从未排序部分中选择一个元素插入到已排序部分的合适位置&#xff0c;直到所有元素都插入到已排序部分…

navigator.mediaDevices.getUserMedia获取本地音频/麦克权限并提示用户

navigator.mediaDevices.getUserMedia获取本地音频/麦克权限并提示用户 效果获取权限NotFoundErrorNotAllowedError 代码 效果 获取权限 NotFoundError NotAllowedError 代码 // 调用 captureLocalMedia()// 方法 function captureLocalMedia() {console.warn(Requesting lo…

rem基础+媒体查询+Less基础

一&#xff0c;rem基础 二&#xff0c;媒体查询 2.1什么是媒体查询 2.2语法规范 2.3媒体查询rem实现元素动态大小的变化 2.4 引入资源&#xff08;理解&#xff09; 三&#xff0c;Less基础 1 维护css的弊端 2 Less介绍 3 Less变量 变量命名规范 4 Less嵌套 5 Less…

Mysql用户权限角色访问控制

写在开头 有些权限由于mysql版本不同 root用户本身可能没有某些权限 GRANT SYSTEM_USER ON *.* TO root%; (root用户 mysql8.0.27版本确实没有这个权限 可以一开始加上) 记得是 with grant option 权限给其他用户的时候碰到这个问题 如果按照这个文档测试的话 遇到了再把…

Android13多媒体框架概览

Android13多媒体框架概览 Android 多媒体框架 Android 多媒体框架旨在为 Java 服务提供可靠的接口。它是一个系统&#xff0c;包括多媒体应用程序、框架、OpenCore 引擎、音频/视频/输入的硬件设备&#xff0c;输出设备以及一些核心动态库&#xff0c;比如 libmedia、libmedi…

DC-7靶机渗透详细流程

信息收集&#xff1a; 1.存活扫描&#xff1a; 由于靶机和kali都是nat的网卡&#xff0c;都在一个网段&#xff0c;我们用arp-scan会快一点&#xff1a; arp-scan arp-scan -I eth0 -l └─# arp-scan -I eth0 -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:dd:ee:6…

基于微信小程序的校园二手交易平台

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Springboot+vue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的社区智慧养老监护管理平台设计与实现&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的社区智慧养老监护管理平台设…

【Linux】SystemV IPC

进程间通信 一、SystemV 共享内存1. 共享内存原理2. 系统调用接口&#xff08;1&#xff09;创建共享内存&#xff08;2&#xff09;形成 key&#xff08;3&#xff09;测试接口&#xff08;4&#xff09;关联进程&#xff08;5&#xff09;取消关联&#xff08;6&#xff09;释…

Android:Volley框架使用

3.15 Volley框架使用 Volley框架主要作为网络请求,图片加载工具。当应用数据量小、网络请求频繁,可以使用Volley框架。 框架Github地址:https://github.com/google/volley Volley框架的简单使用,创建项目Pro_VolleyDemo。将Github上下载Volley框架源代码,volley-master.zi…

无心剑汉英双语诗《龙年大吉》

七绝龙年大吉 Great Luck in the Dragon Year 龙腾五岳九州圆 年吼佳音万里传 大漠苍鹰华夏梦 吉人天相铸奇缘 Dragon flies over five peaks watching the divine land so great and round, New Year’s call sends joyous tidal waves far across the world’s bound. The…

SQL注入(SQL Injection)从注入到拖库 —— 简单的手工注入实战指南精讲

基本SQL注入步骤&#xff1a; 识别目标&#xff1a;确定目标网站或应用程序存在潜在的SQL注入漏洞。收集信息&#xff1a;通过查看页面源代码、URL参数和可能的错误信息等&#xff0c;搜集与注入有关的信息。判断注入点&#xff1a;确定可以注入的位置&#xff0c;比如输入框、…

红队渗透靶机:TIKI: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、dirsearch 2、gobuster WEB web信息收集 searchsploit cms信息收集 ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:2…

Blender_查看版本

Blender_查看版本 烦人的烦恼&#xff0c;没找见哪儿可以查看版本&#xff1f; 算是个隐蔽的角落&#xff01;

华清作业day56

SQLite特性&#xff1a; 零配置一无需安装和管理配置&#xff1b;储存在单一磁盘文件中的一个完整的数据库&#xff1b;数据库文件可以在不同字节顺序的机器间自由共享&#xff1b;支持数据库大小至2TB&#xff1b;足够小&#xff0c;全部源码大致3万行c代码&#xff0c;250KB…