MATLAB系列04:循环结构

news2024/11/15 18:04:30

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 = expr
    Statement 1
    ...
    Statement n
end

其中 index 是循环变量(就是我们所熟知的循环次数), exp 是循环控制表达式。变量 index 读取的是数组 expr 的行数,然后程序执行循环体(loopbody),所以 expr 有多少列,循环体就循环多少次。 expr 经常用捷径表达式的方式,即 first:incr:last。

4.2.1 运算的细节

  1. 不是必须缩进 for 循环的循环体。即使所有语句都左对齐, MATLAB 程序也会识别出这个循环。但缩进循环体能增强代码的可读性。

  2. 在 for 循环中,我们不能随意修改循环变量。 循环变量常被用作计数器。

  3. 在循环前最好预分配数组大小。因为在循环中每拓展一次数组,都要经历以下步骤:第一步,创建一个新数组。 第二步,把旧数组的元素复制到新数组当中。第三步,把31 扩展的元素写入新数组。 第四步, 删除旧数组。 比较耗费时间。

  4. 用 for 循环和向量计算是非常常见的。在 MATLAB 中,用向量算法代替循环的算法的过程称之为向量化(vectorization)。向量化能够改进许多的 MATLAB 程序。示例:

    1. for循环

      for ii = 1:100
          square(ii) = ii ^2;
          square_root(ii) = ii ^ (1/2);
          cube_root(ii) = ii ^ (1/3);
      end
      
    2. 向量计算

      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   0
   0   0   1
   1   1   1

  Name      Size            Bytes  Class      Attributes

  a         3x3                72  double               
  b         3x3                 9  logical 

我们还可以用 logical 函数给一个数组加上一个逻辑属性。如:

>> c=logical(a)

c =

  3×3 logical 数组

   1   1   1
   1   1   1
   1   1   1

一个数组的逻辑属性可以通过任何的数学运算去除。

>> c=c+0

c =

     1     1     1
     1     1     1
     1     1     1

>> whos c
  Name      Size            Bytes  Class     Attributes

  c         3x3                72  double     

4.3.1 逻辑数组的重要性

逻辑数组有一个重要的属性——它在算术运算中能提供一个屏蔽(mask)。屏蔽(mask)是指一个数组,它从另一个数组选择所需的元素参与运算。指定的运算只在选择的元素上执行,而不执行余下的元素。 例如,假设数组 a 和 b 的定义如上节所示。那么语句 a(b)=sqrt(a(b))会计算 a 中相应的元素的平方根,相应的元素是指与 b 数组中的非零元素相对应的数组 a 中的元素。其他元素保持不变。

>> a

a =

     1     2     3
     4     5     6
     7     8     9

>> b

b =

  3×3 logical 数组

   0   0   0
   0   0   1
   1   1   1

>> a(b)=sqrt(a(b))

a =

    1.0000    2.0000    3.0000
    4.0000    5.0000    2.4495
    2.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) > 5
            a(ii,jj) = sqrt(a(ii,jj));
        else
            a(ii,jj) = a(ii,jj)^2;
        end
    end
end

用逻辑数组运算的代码如下:

b = a > 5;
a(b) = sqrt(a(b));
a(~b) = a(~b) .^2;

4.4 总结

image-20240916110407385

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识Linux · 进程(4)

目录 前言: 进程的状态 直接谈论进程的状态 僵尸进程和孤儿进程 纯理论部分 运行态: 阻塞态: 挂起态: 进程的优先级以及切换问题 切换: 优先级: 前言: 承接上文,进程1到…

CPU 和 GPU:为什么GPU更适合深度学习?

目录 什么是 CPU ? 什么是 GPU ? GPU vs CPU 差异性对比分析 GPU 是如何工作的 ? GPU 与 CPU 是如何协同工作的 ? GPU vs CPU 类型解析 GPU 应用于深度学习 什么是 CPU ? CPU(中央处理器)…

二叉树链式结构遍历(指针、递归)

当二叉树不使用数组实现,而是使用链式结构,用指针将节点相连时, 二叉树便会衍生出很多问题,如前序遍历、中序遍历、后序遍历、层序遍历。 下面我将用递归的方法完成二叉树的遍历。 但在这之前,我们还得构造链式结构…

深入解析 Apache Ranger

一. 概述 1.什么是 Apache Ranger? Apache Ranger 是一个为大数据平台提供集中化安全管理的开源框架,专门用于确保 Hadoop 生态系统中的数据安全。Ranger 通过提供细粒度的访问控制和监控,帮助组织实现对数据的全面安全管理,确保…

第四天旅游线路预览——从换乘中心到观鱼台

第四天:从贾登峪到喀纳斯风景区入口,晚上住宿贾登峪; 换乘中心有4 路车,喀纳斯②号车,去观鱼台,路程时长约20分钟; 将上面的的行程安排进行动态展示,具体步骤见”Google earth stu…

7.Jmeter数据驱动(csv数据文件设置)+Jmeter数据库操作

一、Jmeter数据驱动 因为:工作中,有些公司一个接口就是一个吻用例,另外一些公司一个接口有几十个用例,就需要用到数据驱动。 特别注意:断言,如果有共同字段,那么就用json断言,如果没…

文档管理系统Mayan EDMS的安装

今天台风 “贝碧嘉” 在上海登陆,这名字起的那叫一个绝,听起来像是 卑鄙家, 说的就是这台风 卑鄙到家了 什么是 EDMS? EDMS 代表电子文档管理系统,它是 DMS 的更现代版本。DMS 是文档管理系统。一种用于存储、排序和分…

二叉树的前中后序遍历(非递归迭代实现)

1.二叉树的前序遍历 1.1 思路分析 前序遍历的顺序是根-左子树-右子树,所以首先从根节点开始,顺着访问左子树:1、2、4。此时,还剩下节点1、节点2、节点3的右子树没有访问。后面倒着访问节点1、2、4的右子树就行了。所以非递归的前…

解决跨境电商平台账号无法访问的常见问题

跨境电商的迅猛发展,越来越多的卖家选择在全球各大电商平台如亚马逊、eBay等进行商品销售。然而,在实际运营过程中,卖家经常会遇到账号无法访问、应用打不开等问题,导致业务受阻。本文将针对这些问题进行详细分析,并提…

【医疗影像】THE BEER-LAMBERT LAW

吸光度 A l o g 10 ( I 0 I ) A log_{10}(\frac{I_0} I) Alog10​(II0​​) 如果您了解光谱仪如何工作,您就会知道它使一系列波长的光穿过物质溶液(样品cell),同样地,也会穿过溶剂(参考cell) …

信息安全工程师(5)域名与域名解析

一、域名 1. 定义与功能 域名(Domain Name)是互联网上用于标识网站或服务器地址的名称,由一串由点分隔的字符组成,如“example.com”。域名的主要功能是提供一种便于记忆和输入的地址形式,以代替难以记忆的IP地址。域名…

【Axure原型】B端系统登录注册页设计成这样,就不用跟小孩一桌了

前言 在B端后台中,登录注册页这个东西,因为感觉很简单,所以经常不被产品经理们重视。但是登录注册页作为一个后台系统的门面,直接影响用户第一印象,又是非常重要的存在。 登录注册页的价值 B端系统登录注册页是用户…

浸没边界法空间精度相关的论文的阅读笔记

Convergence proof of the velocity field for a stokes flow immersed boundary method https://doi.org/10.1002/cpa.20233 研究对象的选取 他这里为什么能够选取一个周期性边界的流场啊?为什么不是狄利克雷边界或者诺伊曼边界? 方形流场的边界值 …

【Linux】精通GDB:打造你的Linux调试超能力

🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 一: 🔥 什么是GDB / CGDB 二: 🔥 CGDB的安装 🍊 Linux-centos 三: 🔥 cgdb的使用背景 &#…

vmware,centos8(虚拟机) 的安装

安装vmware 点击下方网址 虚拟机安装地址https://www1.msc23.cn/vm/?bd_vid8829610582362807097选择VMware17 打开文件所在地,双击安装 同意条款 选择安装位置 不将VMware配置到环境变量path 不检查更新,不加入客户体验 创建桌面快捷方式 开始安装 安装完成…

47.面向对象综合训练-汽车

//题目需求:定义数组存储3个汽车对象 //汽车的属性:品牌,价格,颜色 //创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数组当中 1.标准的JavaBean类 public class Car {private String brand;//品…

基于yolov8的谢韦尔钢材缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的谢韦尔钢材缺陷检测系统,充分利用了YOLOv8算法的高效性和准确性,为钢材表面缺陷检测提供了先进的解决方案。该系统通过深度学习技术,特别是YOLOv8这一实时目标检测算法,能够快速、准确地识别钢材表面的…

【Linux进程】Linux Shell编程实战:构建简易脚本示例与技巧详解

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:Linux “ 登神长阶 ” 🤡往期回顾🤡:暂无 🌹🌹期待您的关注 🌹🌹 ❀Linux进程 📒1. 获取输入&…

《Nginx核心技术》第17章:使用自签CA配置HTTPS加密反向代理访问

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

事务方法中存在远程调用

1. 背景 在实现下单的方法中,首先通过远程调用查询了地址簿信息和服务信息等,然后将这些信息和前端传入的预约时间、服务项等信息封装到order实体类,然后调用Mybatis-Plus提供的ServiceImpl类的save方法,向数据库表中插入数据。 …