MATLAB系列04:循环结构
MATLAB系列04:循环结构
- 4. 循环结构
- 4.1 while循环
- 4.2 for循环
- 4.2.1 运算的细节
- 4.2.2 break语句和continue语句
- 4.2.3 嵌套循环
- 4.3 逻辑数组和向量化
- 4.3.1 逻辑数组的重要性
- 4.3.2 用 if/else 结构和逻辑数组创建等式
- 4.4 总结
4. 循环结构
循环(loop)是一种 MATLAB 结构,它允许我们多次执行一系列的语句。循环结构有两种基本形式:while 循环和 for 循环。while的循环次数是不能确定的,for的循环次数是确定的。
4.1 while循环
while循环语句的基本形式:
while expression.........
end
如果 expression 的值非零(true),程序将执行代码块,然后返回到 while 语句执行。如果 expression 的值仍然非零,那么程序将会再次执行代码。直到 expression 的值变为 0,这个重复过程结束。
4.2 for循环
for 循环结构是另一种循环结构,它以指定的数目重复地执行特定的语句块。 For 循环的形式如下
for index = exprStatement 1...Statement n
end
其中 index 是循环变量(就是我们所熟知的循环次数), exp 是循环控制表达式。变量 index 读取的是数组 expr 的行数,然后程序执行循环体(loopbody),所以 expr 有多少列,循环体就循环多少次。 expr 经常用捷径表达式的方式,即 first:incr:last。
4.2.1 运算的细节
-
不是必须缩进 for 循环的循环体。即使所有语句都左对齐, MATLAB 程序也会识别出这个循环。但缩进循环体能增强代码的可读性。
-
在 for 循环中,我们不能随意修改循环变量。 循环变量常被用作计数器。
-
在循环前最好预分配数组大小。因为在循环中每拓展一次数组,都要经历以下步骤:第一步,创建一个新数组。 第二步,把旧数组的元素复制到新数组当中。第三步,把31 扩展的元素写入新数组。 第四步, 删除旧数组。 比较耗费时间。
-
用 for 循环和向量计算是非常常见的。在 MATLAB 中,用向量算法代替循环的算法的过程称之为向量化(vectorization)。向量化能够改进许多的 MATLAB 程序。示例:
-
for循环
for ii = 1:100square(ii) = ii ^2;square_root(ii) = ii ^ (1/2);cube_root(ii) = ii ^ (1/3); end -
向量计算
ii = 1:100; square = ii .^2;
-
4.2.2 break语句和continue语句
有两个附加语句可以控制 while 和 for 循环:break 和 continue 语句。 break 语句可以中止循环的执行和跳到 end 后面的第一句执行,而 continue 只中止本次循环,然后返回循环的顶部。
4.2.3 嵌套循环
一个循环完全出现在另一个循环当中,这种情况经常发生。如果一个循环完全出现在另一个循环当中,我们称这两个循环为带嵌套的循环。
4.3 逻辑数组和向量化
除了字符型和数字型的数据类型,还有第三种数据类型:逻辑型。示例:
a = [1 2 3; 4 5 6; 7 8 9];
b = a > 5
whos
b =3×3 logical 数组0 0 00 0 11 1 1Name Size Bytes Class Attributesa 3x3 72 double b 3x3 9 logical
我们还可以用 logical 函数给一个数组加上一个逻辑属性。如:
>> c=logical(a)c =3×3 logical 数组1 1 11 1 11 1 1
一个数组的逻辑属性可以通过任何的数学运算去除。
>> c=c+0c =1 1 11 1 11 1 1>> whos cName Size Bytes Class Attributesc 3x3 72 double
4.3.1 逻辑数组的重要性
逻辑数组有一个重要的属性——它在算术运算中能提供一个屏蔽(mask)。屏蔽(mask)是指一个数组,它从另一个数组选择所需的元素参与运算。指定的运算只在选择的元素上执行,而不执行余下的元素。 例如,假设数组 a 和 b 的定义如上节所示。那么语句 a(b)=sqrt(a(b))会计算 a 中相应的元素的平方根,相应的元素是指与 b 数组中的非零元素相对应的数组 a 中的元素。其他元素保持不变。
>> aa =1 2 34 5 67 8 9>> bb =3×3 logical 数组0 0 00 0 11 1 1>> a(b)=sqrt(a(b))a =1.0000 2.0000 3.00004.0000 5.0000 2.44952.6458 2.8284 3.0000
4.3.2 用 if/else 结构和逻辑数组创建等式
逻辑数组经常被用来替代 for 循环中的 if/else 结构。例如,假设我们要计算一个二维数组中所有的大于 5 的元素的平方根,然后其余的数的平方。利用循环和选择结构的代码如下:
for ii = 1:size(a,1)for jj = 1:size(a,2)if a(ii,jj) > 5a(ii,jj) = sqrt(a(ii,jj));elsea(ii,jj) = a(ii,jj)^2;endend
end
用逻辑数组运算的代码如下:
b = a > 5;
a(b) = sqrt(a(b));
a(~b) = a(~b) .^2;
4.4 总结

相关文章:
MATLAB系列04:循环结构
MATLAB系列04:循环结构 4. 循环结构4.1 while循环4.2 for循环4.2.1 运算的细节4.2.2 break语句和continue语句4.2.3 嵌套循环 4.3 逻辑数组和向量化4.3.1 逻辑数组的重要性4.3.2 用 if/else 结构和逻辑数组创建等式 4.4 总结 4. 循环结构 循环(loop)是一种 MATLAB …...
虹科方案 | 精准零部件测试!多路汽车开关按键功能检测系统
欢迎关注虹科,为您提供最新资讯! #LIN/CAN总线 #零部件测试 #CAN数据 导读 在汽车制造业中,零部件的安全性、功能性和可靠性是确保车辆整体性能的关键。虹科针对车辆零部件的LIN/CAN总线仿真测试,提出了基于虹科Baby-LIN系列产…...
【加密算法基础——AES CBC模式代码解密实践】
AES 解密实践之代码实现 AES 解密使用python脚本比较灵活,但是一定要保证脚本是调试过的,才能在找到正确的密文,密钥,初始向量的情况下,解出正确的明文。但是对于AES解密,命令行无法处理key截断的问题。 实…...
【ViT+Dis】Deepfake Detection Scheme Based on Vision Transformer and Distillation
文章目录 Deepfake Detection Scheme Based on Vision Transformer and Distillationkey points深伪检测检测算法蒸馏法与教师网络实验训练:参数总结Deepfake Detection Scheme Based on Vision Transformer and Distillation 会议:2021 作者: key points 以往基于CNN结…...
maya-vray渲染蒙版
要用一个叫vrayMulWrapper的材质球,把alpha Conterbution调到-1,勾选matte surface启用蒙版物体。...
计网简简单单复习一下
文章目录 基础体系结构(分层模型)为什么要分层?OSI 七层模型?每一层的作用?TCP/IP 四层模型是什么?每一层的作用是什么?五层体系结构以及对应的协议每一层常见协议有哪些?从输入 URL 到页面展示到底发生了什么?URI和URL的区别;forward和redirect的区别DNS作用是什么?D…...
PyQt5-loading-圆环加载效果
效果预览 代码实现 from PyQt5.QtCore import QSize, pyqtProperty, QTimer, Qt, QThread, pyqtSignal from PyQt5.QtGui import QColor, QPainter from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QVBoxLayout, QLabel, QGridLayoutclass Cir…...
RabbitMQ Spring客户端使用
注解声明式队列和交换机 java自带序列化工具类,将java对象序列化为字节数组,用于网络传输。 jdk序列号存在缺陷,(不安全,占用空间大等) 推荐使用JSON的序列化: springboot扫描包使配置生效&…...
Arduino IDE离线配置第三方库文件-ESP32开发板
简洁版可以使用uget等,将文件下载到对应文件夹下,然后安装。 esp32之arduino配置下载提速 录屏 Arduino IDE离线配置第三方库文件ESP32 资源 Linux https://download.csdn.net/download/ZhangRelay/89749063 第三方开发板 非默认支持的开发板 linu…...
Node.js 安装及项目实践
node.js安装 node安装,选择版本 一直next,或者自己修改路径,添加两个包 选择自己的安装的node的路径,cmd或者winr cmd 显示node与npm的版本号 node -vnpm -v可以跟着这个博客将node安装 2024最新版Node.js下载安装及环境配…...
如何从混合信号中剔除某一信号——Schmidt正交化的使用(信号互相关)
本文仅用作方法记录,不讲详细原理和底层逻辑。 在面对混合的接收信号的情况下,例如接收信号: Y a 1 X 1 a 2 X 2 a 3 X 3 N Ya_1X_1a_2X_2a_3X_3N Ya1X1a2X2a3X3N 假设信号 X 1 X_1 X1、 X 2 X_2 X2、 X 3 X_3 X3在时域和频域上…...
I2C/IIC学习笔记
I2C/IIC 有些同学I2C和IIC分不清,I2C和IIC实际上是指同一种通信协议。I2C是Inter-Integrated Circuit的缩写,而IIC是它的另一种表述方式,代表的是同一个意思,即“集成电路间总线”。I2C是一种由飞利浦公司(现恩智浦半…...
Servlet学习详解--基本涵盖所有Servlet知识点
目录 一、Servlet二、 Servlet入门2.1. 执行原理2.2. 实现Servlet接口重写其五个方法及其生命周期 三、Request请求对象3.1. 获取请求消息数据3.2. 获取请求头数据3.3. 获取请求体数据3.4. 设置编码3.5. 其他通用功能3.6. 请求转发(Forward)3.7. 转发共享数据 四、Response对象…...
LabVIEW机械手视觉引导系统
开发了LabVIEW软件和硬件工具开发的高精度机械手视觉引导系统。系统通过高效的视觉识别和精确的机械操作,提升工业自动化领域的生产效率和操作精度。 项目背景: 随着工业自动化的不断发展,对生产效率和精确度的要求也日益增高。传统的机械手…...
rabbitmq容器化部署
需求 容器化部署rabbitmq服务 部署服务 找到如下官网信息版本 官网版本发布信息 这里看到最新版本是3.13版本,这里在3.13中找一个版本下载容器镜像即可。 找到dockrhub.com中 找到3.13.2版本镜像。 容器服务安装此处省略 现在下载容器镜像需要配置容器代理 ~#…...
如何用 Helm Chart 安装指定版本的 GitLab Runner?
本分分享如何使用 Helm 来在 Kubernetes 集群上安装极狐GitLab Runner。整体步骤分为:Helm 的安装、vaules.yaml 文件的配置、Runner 的安装、Runner 的测试。 极狐GitLab 为 GitLab 在中国的发行版,中文版本对中国用户更友好。极狐GitLab 支持一键私有…...
el-table使用合计和固定列时,滚动条被覆盖区域无法拖拽问题
pointer-events文档 解决思路为通过pointer-events实现事件穿透,不响应固定列的拖拽,而是响应其子元素的拖拽事件 /deep/.el-table__fixed, /deep/.el-table__fixed-right {pointer-events: none; } /deep/.el-table__fixed *, /deep/.el-table__fixed-…...
【疑难杂症2024-005】docker-compose中设置容器的ip为固定ip后,服务无法启动
本文由Markdown语法编辑器编辑完成。 1.背景: 我们的产品是通过docker image的方式发布,并且编排在docker-compose.yml中发布。在同一个docker-compose.yml中的服务,相互之间,可以通过对方的服务名和端口,来直接访问…...
uView使用心得
说实话我不爱用这个库,感觉很鸡肋,坑很多,可能没用习惯 picker选择器 绑定默认值是通过设置index,并且这个index需要通过api设置进去,设置defalutindex绑定值无效(只有初始化可以,后面动态改变…...
RabbitMQ(高阶使用)死信队列
文章内容是学习过程中的知识总结,如有纰漏,欢迎指正 文章目录 一、什么是死信队列? 二、死信队列使用场景 三、死信队列如何使用 四、打车超时处理 1.打车超时实现 以下是本篇文章正文内容 一、什么是死信队列? 先从概念解释上搞…...
OpenClaw配置备份:Kimi-VL-A3B-Thinking模型参数迁移技巧
OpenClaw配置备份:Kimi-VL-A3B-Thinking模型参数迁移技巧 1. 为什么需要备份OpenClaw配置? 上周我的主力开发机突然硬盘故障,导致所有数据丢失。最让我痛心的不是代码——它们都有Git托管,而是花了两周精心调校的OpenClaw工作环…...
74HC595移位寄存器驱动原理与CrazyHC595库深度解析
1. CrazyHC595库概述:面向嵌入式工程师的74HC595移位寄存器驱动深度解析74HC595是工业界最经典、应用最广泛的8位串行输入/并行输出移位寄存器芯片之一。其核心价值在于以3根GPIO线(数据、时钟、锁存)扩展出8个可独立控制的数字输出通道&…...
硬件电路设计方法论与实战技巧
1. 硬件电路设计系统方法论作为一名从业十年的硬件工程师,我深知从理论到实践的鸿沟有多大。很多新手工程师在掌握了基础电路知识后,面对实际项目时仍然手足无措。硬件设计不是简单的元器件堆砌,而是一个系统工程,需要建立完整的设…...
基于Matlab的路面裂缝检测识别系统:实现精准路面“体检”
基于Matlab的路面裂缝检测识别系统设计,载入待识别图片,对目标图像进行直方图均衡化、中值滤波去噪、对比度增强、二值化处理、二值化滤波、裂缝识别、裂缝判断、裂分拼接、裂缝投影及标记等一系列操作,完成路面识别的准确识别 程序已调通&am…...
LeRobot数据采集全流程解析:从环境配置到动作回放(SO-100实战)
LeRobot数据采集全流程实战:从环境搭建到动作复现的SO-100深度指南 当我们需要让机器人学会新技能时,数据采集是构建智能系统的第一步。LeRobot作为Hugging Face推出的机器人学习平台,通过标准化流程降低了开发门槛。本文将带你完整走通SO-10…...
104人重写底层,OpenClaw装上「任务大脑」,连QQ机器人都能管
104位开发者联手,全球最火开源AI助手OpenClaw再出重磅更新,第一次给AI Agent装上「操作系统」级的任务控制面板:让AI能够自己管理自己,会排任务也会说不:Agent竞赛的下半场来了。一个月前,网络安全公司eSen…...
【WRF-Chem工具】grid_finn_fire_emis_v2020 工具官方用户指南解析
目录 1. 工具概述 (General Introduction)2. 针对 WRF 用户的特别说明 (SPECIAL NOTES FOR WRF)A. 输出文件与烟羽抬升 (Plume Rise)B. 变量、单位与植被类型C. 运行前提条件(非常重要)D. 时间分辨率与日变化E. WRF namelist.input 配置要求 3. fire_emi…...
Nunchaku FLUX.1-dev效果展示:4步生成惊艳图片案例分享
Nunchaku FLUX.1-dev效果展示:4步生成惊艳图片案例分享 你是否曾经被AI生成图片的漫长等待时间所困扰?传统文生图模型往往需要20步以上的推理才能获得理想效果,而今天我要展示的Nunchaku FLUX.1-dev模型,仅需4步就能生成令人惊艳…...
Linux日志高效搜索:从基础grep到journalctl实战技巧
1. Linux日志搜索:运维工程师的必备技能 每次服务器出现异常,第一反应是什么?没错,就是查日志。作为在Linux系统摸爬滚打多年的老运维,我见过太多新手面对海量日志时的手足无措。其实日志排查就像破案,关键…...
Java编程避坑指南:九大类常见陷阱与解决方案,助你写出高质量代码
文章目录 基础类 类、继承与内存 继承特性与注意事项 内存管理 现代 Java 特性 记录类与密封类常见陷阱 集合与遍历 相等性约定 集合常见陷阱 并发与同步 并发 异常处理 泛型与类型擦除 泛型陷阱 泛型与类型擦除 泛型陷阱 JVM、垃圾回收与模块系统 JVM/GC 常见陷阱 模块系统(J…...
