热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MATLAB学习笔记—循环结构

循环(Loops)循环,顾名思义,将一件事重复执行。我们之前已经不知不觉用到了循环。当然,是MATLAB内建的函数使用到了循环的思想。比如:n1:5totalsum(n)f
循环(Loops)

循环,顾名思义,将一件事重复执行。

我们之前已经不知不觉用到了循环。当然,是MATLAB内建的函数使用到了循环的思想。
比如:

>> n = 1:5

>> total = sum(n)

for循环(for-loop)

下面来看一下MATLAB中是如何使用for循环的;

function suminput(n)
total = 0
for n = 1:5 %控制语句
total = total + n %循环主体
end
fprint('total equals %d\n',total);

控制语句n = 1:5并非一定要用克隆运算符。看下面这个例子

list = rand(1,5);
for x = list
if x > 0.5
fprint('Random number %f is large.\n',x)
else
fprint('Random number %f is small.\n',x)
end
end

当然,也可以不用list,直接for x = rand(1,5)

注意:循环中使用到的序列不一定要是整数、或是有固定间隔、或是严格增长。

while循环(while-loop)

当我们并不知道循环要执行多久,需要用while循环结构。

function [n total] = possum(limit)
total = 0;
n = 0;
while total <= limit
n = n + 1;
total = total + n;
end
fprintf('sum: %d count : %d\n, total, n);

与for循环的区别:循环体和判断都要重复执行。

如果遇到死循环,或是想快点结束的话:Ctrl+C

break语句

跳出当前循环,通常用来提前中断循环结构。

注:break只能跳出一层循环。

要跳出整个循环,需要用到一个变量来进行判断,内循环跳出之前改变其值,外循环判断,跳出。

分块(Section)

在脚本中可以将代码分块,来执行不同的功能。分块的标记是%%。两个标记中间为一个可执行的区域。

逻辑索引(Logical indexing)

将v阵中大于等于0的元素取出,放到w中:

w = v(v >= 0)

逻辑数列(logical arrays)

[4 -1 7 5 3] > [5 -9 6 5 -3]
ans=
0 1 1 0 1
c = [2>1, 2<1, ~(3>2 && 4>5)]
c = 1 0 1
holmes = logical([1 -2 0 0 9.12 -2])
holmes = 1 1 0 0 1 1

会发现真为1,假为0。其中1和0被称作逻辑变量。

a = 1 2 3
c = 1 0 1 %之前生成的
a(c) = 1 3

从上面可以看出来,a(c)输出的是索引c中为真的元素。

所以就可以有很多种玩法:

v_10 = v(confidence >= 10)confidence中大于等于10的元素建立索引,然后v按照此索引输出v_10

v_bigger = v(v > v0)取出v中元素比v0对应元素大的

v(v<0) = 0 将v中的负数替换为0

v(v<0) = [100 200] 将v中的第一个负数替换为100,第二个替换为200

v(v<0) = v(v<0) + 100将v中负数加100

那么如果是数阵呢?

A = [1 2 3;4 5 6];
A = 1 2 3
4 5 6
B = A(A > 2)
B =
4
5
3
6

最后输出的是一个列矩阵。

因为矩阵是按列从上到下索引的,譬如1是1号,4是2号,2是3号,以此类推。

例子:

A(A >= 0) = 100:108,前提是A中大于等于0的个数要和后面的个数相等

A(A>B) = A(A>B) - B(A>B)

预先配置(Preallocation)

计时

tic; sum(1:1e3); toc

可以计算tick tock中间函数运行的时间

预配置

function noprealloc
N = 5000
for ii = 1:N
for jj = 1:N
A(ii,jj) = ii*jj;
end
end

上面这个函数运行时间会非常的久。

function prealloc
N = 5000;
A = zeros(N,N);
for ii = 1:N
for jj = 1:N
A(ii,jj) = ii*jj;
end
end

但如果我们加一句,函数运行所需时间就会大大减少,这是为什么呢?

原因就在下面的函数多了一句初始化A的语句。这样一来MATLAB不用每次执行循环都重新改变矩阵的大小,从而缩短了运行时间(原理和内存的操作有关)


推荐阅读
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
author-avatar
是你让我变得冷漠涡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有