matlab使用教程(9)—matlab基本语句

1.条件控制 - if、else、switch

条件语句可用于在运行时选择要执行的代码块。最简单的条件语句为 if 语句。例如:
% Generate a random number
a = randi(100, 1);
% If it is even, divide by 2
if rem(a, 2) == 0
disp('a is even')
b = a/2;
end
通过使用可选关键字 elseif else if 语句可以包含备用选项。例如:
a = randi(100, 1);
if a < 30
disp('small')
elseif a < 80
disp('medium')
else
disp('large')
end
再者,当您希望针对一组已知值测试相等性时,请使用 switch 语句。例如:
[dayNum, dayString] = weekday(date, 'long', 'en_US');
switch dayString
case 'Monday'
disp('Start of the work week')
case 'Tuesday'
disp('Day 2')
case 'Wednesday'
disp('Day 3')
case 'Thursday'
disp('Day 4')
case 'Friday'
disp('Last day of the work week')
otherwise
disp('Weekend!')
end
对于 if switch,MATLAB 执行与第一个 true 条件相对应的代码,然后退出该代码块。每个条件语句都需要 end 关键字。一般而言,如果您具有多个可能的离散已知值,读取 switch 语句比读取 if 语句更容易。但是,无法测试switch case 值之间的不相等性。例如,无法使用 switch 实现以下类型的条件:
yourNumber = input('Enter a number: ');
if yourNumber < 0
disp('Negative')
elseif yourNumber > 0
disp('Positive')
else
disp('Zero')
end

1.1条件语句中的数组比较

        了解如何将关系运算符和 if 语句用于矩阵非常重要。如果您希望检查两个变量之间的相等性,您可以使用if A == B, ...
这是有效的 MATLAB 代码,并且当 A B 为标量时,此代码会如期运行。但是,当 A B 为矩阵时,用 A == B 不会测试二者是否相等,而会测试二者相等的位置;结果会生成另一个由 0 和 1 构成的矩阵,并显示元素与元素的相等性。
A = magic(4);
B = A;
B(1,1) = 0;
A == B
ans =
4×4 logical array
0 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
检查两个变量之间的相等性的正确方法是使用 isequal 函数:
if isequal(A, B), ...
isequal 返回 1 (表示 true )或 0 (表示 false )的标量逻辑值,而不会返回矩阵,因此能被用于 if 函数
计算表达式。通过使用上面的 A B 矩阵,您可以获得
isequal(A,B)
ans =
logical
0
下面给出另一示例来重点介绍这一点。如果 A B 为标量,下面的程序永远不会出现“意外状态”。但是对于大多数矩阵对(包括交换列的幻方矩阵),所有元素均不满足任何矩阵条件 A > B A < B A == B ,因此将执行 else 子句:
if A > B
'greater'
elseif A < B
'less'
elseif A == B
'equal'
else
error('Unexpected situation')
end
有几个函数对减少标量条件的矩阵比较结果以便用于 if 非常有用,这些函数包括
isequal
isempty
all
any

2.循环控制 - for、while、continue、break

        此部分涵盖为程序循环提供控制的 MATLAB 函数。

2.1 for

for 循环按预先确定的固定次数重复一组语句。匹配的 end 用于界定语句结尾:
for n = 3:32
r(n) = rank(magic(n));
end
r
内部语句的终止分号禁止了循环中的重复输出,循环后的 r 显示最终结果。最好对循环进行缩进处理以便于阅读,特别是使用嵌套循环时:
for i = 1:mfor j = 1:nH(i,j) = 1/(i+j);end
end

2.2 while

while 在逻辑条件的控制下将一组语句重复无限次。匹配的 end 用于界定语句结尾。下面是一个完整的程序,用于演示如何使用 while if else end 来寻找区间对分法求多项式的零。
a = 0; fa = -Inf;
b = 3; fb = Inf;
while b-a > eps*bx = (a+b)/2;fx = x^3-2*x-5;if sign(fx) == sign(fa)a = x; fa = fx;elseb = x; fb = fx;end
end
x
结果生成多项式 x ³  - 2x - 5 的根,即
x =
2.09455148154233
if 语句部分中讨论的与矩阵比较相关的注意事项同样适用于 while 语句。

2.3 continue

continue 语句将控制传递给它所在的 for 循环或 while 循环的下一迭代,并跳过循环体中的任何其余语句。此道理同样适用于嵌套循环中的 continue 语句。也就是说,执行会从遇到 continue 语句的循环开头继续。
下面的示例演示的 magic.m 循环计算文件中的代码行数目的 continue 循环,并跳过所有空行和注释。
continue 语句用于前进到 magic.m 中的下一行,而不会在遇到空行或注释行时增加行计数:
fid = fopen('magic.m','r');
count = 0;
while ~feof(fid)
line = fgetl(fid);
if isempty(line) || strncmp(line,'%',1) || ~ischar(line)
continue
end
count = count + 1;
end
fprintf('%d lines\n',count);
fclose(fid);

2.4 break

break 语句用于提前从 for 循环或 while 循环中退出。在嵌套循环中, break 仅从最里面的循环退出。下面对前述部分中的示例进行了改进。使用此 break 的优点是什么?
a = 0; fa = -Inf;
b = 3; fb = Inf;
while b-a > eps*b
x = (a+b)/2;
fx = x^3-2*x-5;
if fx == 0
break
elseif sign(fx) == sign(fa)
a = x; fa = fx;
else
b = x; fb = fx;
end
end
x

3.程序终止 - return

此部分包含用于在程序运行完成之前终止程序的 MATLAB return 函数。
return
return 终止当前命令序列,并将控制权返回给调用函数或键盘。此外, return 还用于终止 keyboard 模式。被调用的函数通常在到达函数末尾时将控制权转交给调用它的函数。您可以在被调用的函数中插入 一个 return 语句,以便强制提前终止并将控制权转交给调用函数。

4.向量化

提高 MATLAB 程序的运行速度的一种方法是向量化构造程序时所使用的算法。其他编程语言可使用 for 循环或 DO 循环,而 MATLAB 可使用向量或矩阵运算。下面提供了一个与创建算法表相关的简单示例:
x = 0.01;
y = log10(x);
for k = 1:999
x(k+1) = x(k) + 0.01;
y(k+1) = log10(x(k+1));
end
相同代码段的向量化版本为
x = .01:.01:10;
y = log10(x);
对于更复杂的代码,向量化选项并不总是这么明显。

5.预分配

如果无法向量化某段代码,可以通过预分配存储输出结果的任何向量或数组来提高 for 循环的运行速度。例如,此代码使用函数 zeros 来预分配在 for 循环中创建的向量。这显著提高了 for 循环的执行速度:
r = zeros(32,1);
for n = 1:32
r(n) = rank(magic(n));
end
如果未经过上述示例中的预分配,MATLAB 解释器会在每次遍历循环时将 r 向量增大一个元素。向量预分配避免了此步骤,并提高了执行速度。

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

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

相关文章

fishing之第四篇使用案例一模拟登陆口

文章目录 一、访问钓鱼平台二、Sending Profiles(发件人邮箱配置)三、User&Groups(接收人邮件列表)四、Landing Pags(钓鱼页面配置)五、Email Templates(邮件内容配置)六、Campaigns七、攻击结果查看免责声明一、访问钓鱼平台 详细查看第二篇的gophish的搭建 二…

WebRTC 之音视频同步

在网络视频会议中&#xff0c; 我们常会遇到音视频不同步的问题&#xff0c; 我们有一个专有名词 lip-sync 唇同步来描述这类问题&#xff0c;当我们看到人的嘴唇动作与听到的声音对不上的时候&#xff0c;不同步的问题就出现了 而在线会议中&#xff0c; 听见清晰的声音是优先…

Java窗体应用程序人事管理系统web人资招聘员工劳资jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 Java窗体应用程序人事管理系统 注意&#xff1a;此项…

Python 开发工具 Pycharm —— 使用技巧Lv.1

Basic code completion Ctrl空格 is available in the search field when you search for text in the current file CtrlF, so there is no need to type the entire string 基本代码完成Ctrl 空格可在搜索领域当你搜索文本在当前文件Ctrl F,所以没有必要整个字符串类型 To m…

迅为全国产龙芯3A5000电脑运行统信UOS、银河麒麟、loongnix系统

iTOP-3A5000开发板采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch) 的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。在与龙芯3A4000处理器保持引脚兼容的基础上&#xff0c;频率提升至2.5GHZ&#xff0c;功耗降…

自然语言处理学习笔记(三)————HanLP安装与使用

目录 1.HanLP安装 2.HanLP使用 &#xff08;1&#xff09;预下载 &#xff08;2&#xff09;测试 &#xff08;3&#xff09;命令行 &#xff08;4&#xff09;测试样例 3.pyhanlp可视化 4. HanLP词性表 1.HanLP安装 HanLP的 Python接口由 pyhanlp包提供&#xff0c;其安装…

STL容器适配器 -- priority_queue(使用+实现)(C++)

priority_queue priority_queue 简单介绍priority_queue 使用内置类型测试自定义类型测试 priority_queue 模拟实现仿函数&#xff08;less、greater&#xff09; priority_queue 简单介绍 优先级队列是一种容器适配器。类似于堆&#xff0c;可以随时插入元素&#xff0c;只能…

Docker环境下MySQL备份恢复工具XtraBackup使用详解 | Spring Cloud 62

一、XtraBackup 简介 Percona XtraBackup是一个开源的MySQL和MariaDB数据库备份工具&#xff0c;它能够创建高性能、一致性的备份&#xff0c;并且对生产环境的影响很小。Percona XtraBackup通过在不停止MySQL服务器的情况下&#xff0c;复制InnoDB存储引擎的数据文件和事务日…

应用Numpy实现对数据的处理

创建简单的数组 主要使用np.array()函数&#xff0c;语法如下 import numpy as np np.array(object,dtypeNone,copyTrue,orderK,subokFalse,ndmin0) 主要参数&#xff1a; Object&#xff1a;任何具有数组接口方法的对象 dtype&#xff1a;数据类型 ndmin:指定生成数组的最…

Apache Thrift C++库的TThreadPoolServer模式的完整示例

1. 本程序功能 1) 要有完整的request 和 response; 2) 支持多进程并行处理任务&#xff1b; 3)子进程任务结束后无僵尸进程 2.Apache Thrift C库的编译和安装 见 步步详解&#xff1a;Apache Thrift C库从编译到工作模式DEMO_北雨南萍的博客-CSDN博客 3.框架生成 数据字…

简述静态网页和动态网页的区别。简述 Webl.0 和 Web2.0 的区别。安装tomcat8,配置服务启动脚本,部署jpress应用

静态网页和动态网页区别 静态网页和动态网页是两种常见的网页类型&#xff0c;它们在内容生成和交互方式上存在不同。 静态网页是在服务器上提前生成好的网页&#xff0c;它的内容在访问时不会发生变化。静态网页通常由HTML、CSS和JavaScript等静态文件组成&#xff0c;这些文…

【css问题】flex布局中,子标签宽度超出父标签宽度,导致布局出现问题

场景&#xff1a;文章标题过长时&#xff0c;只显示一行&#xff0c;且多余的部分用省略号显示。 最终效果图&#xff1a; 实现时&#xff0c;flex布局&#xff0c;出现问题&#xff1a; 发现text-overflow: ellipsis不生效&#xff0c;省略符根本没有出现。 而且因为设置了 …

《MySQL高级篇》十五、其他数据库日志

文章目录 1. MySQL支持的日志1.1 日志类型1.2 日志的弊端 2. 慢查询日志(slow query log)3. 通用查询日志3.1 问题场景3.2 查看当前状态3.3 启动日志3.4 查看日志3.5 停止日志3.6 删除\刷新日志 4. 错误日志(error log)4.1 启动日志4.2 查看日志4.3 删除\刷新日志4.4 MySQL8.0新…

ThreadLocal有内存泄漏问题吗

对于ThreadLocal的原理不了解或者连Java中的引用类型都不了解的可以看一下我的之前的一篇文章Java中的引用和ThreadLocal_鱼跃鹰飞的博客-CSDN博客 我这里也简单总结一下: 1. 每个Thread里都存储着一个成员变量&#xff0c;ThreadLocalMap 2. ThreadLocal本身不存储数据&…

flutter开发实战-实现首页分类目录入口切换功能

。 在开发中经常遇到首页的分类入口&#xff0c;如美团的美食团购、打车等入口&#xff0c;左右切换还可以分页更多展示。 一、使用flutter_swiper_null_safety 在pubspec.yaml引入 # 轮播图flutter_swiper_null_safety: ^1.0.2二、实现swiper分页代码 由于我这里按照一页8…

装饰器模式(C++)

定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类(继承)更为灵活(消除重复代码&减少子类个数)。 一《设计模式》 GoF 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xf…

[openCV]基于拟合中线的智能车巡线方案V2

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表"""newDir d…

【JavaScript】元素获取指南

简介 在 JavaScript 中,我们经常需要通过获取元素来进行 DOM 操作和交互。本教程将介绍多种获取元素的方式,包括根据 ID、标签名、类名、选择器、属性和名称等。 通过ID获取元素 使用getElementById方法根据元素的ID属性获取单个元素。 var element = document.getElementB…

机器学习框架PyTorch详解和案列分析

目录 一、基本介绍二、基本概念三、操作流程四、详细安装命令五、应用场景六、最新发展 PyTorch 是一个基于 Python 的科学计算包&#xff0c;主要针对两类人群&#xff1a; 作为 NumPy 的替代品&#xff0c;可以利用 GPU 的性能进行计算。作为一个高灵活性、速度快的深度学习平…

【windows】powershell使用ll、head、tail等linux命令

powershell使用ll、head、tail等linux命令 最近在windows系统上办公比较多&#xff0c;想使用linux上经常用到的ll、head、tail等命令。发现可以通过修改powershell的配置文件来实现。具体地&#xff0c;一般需要修改以下路径的配置文件&#xff0c;没有的话就在该路径下创建一…