MATLAB系列03:分支语句和编程设计

news2024/9/20 13:38:14

MATLAB系列03:分支语句和编程设计

  • 3. 分支语句和编程设计
    • 3.1 自上而下的编程方法简介
    • 3.2 伪代码的应用
    • 3.3 关系运算符和逻辑运算符
      • 3.3.1 关系运算符
      • 3.3.2 小心==和~=运算符
      • 3.3.3 逻辑运算符
      • 3.3.4 逻辑函数
    • 3.4 选择结构
      • 3.4.1 if结构
      • 3.4.2 switch结构
      • 3.4.3 try/catch结构的应用
    • 3.5 附加的画图特性
      • 3.5.1 控制x,y轴绘图的上下限
      • 3.5.2 在同一坐标系内画出多个图像
      • 3.5.3 创建多个图像
      • 3.5.4 子图像
      • 3.5.5 对画线的增强控制
      • 3.5.6 文本字符串的高级控制
      • 3.5.7 极坐标图像
      • 3.5.8 注释并保存图像
    • 3.6 总结

3. 分支语句和编程设计

MATLAB语句有两大类控制顺序结构:

  1. 选择结构,用于选择执行特定的语句
  2. 循环结构,用于重复执行特定的代码

3.1 自上而下的编程方法简介

所谓的自顶向下的编程方法,本质上就是编写程序的视角从整体的宏观性逐层进入具体的微观性的一种编程思想。我们编写程序时一开始不用思考得事无巨细,把所有细节都想清楚;也不要面条式的想到哪里写到哪里。而应该是自顶向下的,从一个大的粗的核心的任务开始,逐级细分,最后再完成最底层的具体实现。

程序设计的基本步骤:

  1. 清晰地陈述出你要解决的问题。
  2. 确定程序所需地输入量和程序所产生的输出量。
  3. 为你的程序设计算法
  4. 将算法转化为 MATLAB 语句
  5. 调试MATLAB语句

3.2 伪代码的应用

伪代码是 MATLAB 和英语的混合体。和MATLAB 一样,它是结构化的,一行表达一个明确的意思或代码的片段,但每一行的描述用的是英语或其他人类语言。伪代码的每一行都应用普通简单且易于理解的英语或中文描述。因为修改简单灵活,所以伪代码在开发算法的过程中非常的有用。

3.3 关系运算符和逻辑运算符

MATLAB 把 0 值作为结果 false,把所有的非 0 值作为结果 ture。

3.3.1 关系运算符

关系运算符是指两数值或字符操作数的运算符,这种运算将会根椐两操作数的关系产生结果 true 或 false。关系运算的基本形式如下
a 1   o p   a 2 a_1\,op\,a_2 a1opa2
image-20240913224851822

关系运算符也可用于标量和数组的比较,示例

>> a=[1 0;-2 1];
>> b=0;
>> a>b

ans =

  2×2 logical 数组

   1   0
   0   1

注意因为字符串实际上是字符的数组,关系运算符也比较两个相同长度的字符串。如果它们有不同的长度,比较运算将会产生一个错误。

编程隐患:

不要混淆关系运算符(==)和赋值运算符(=)

3.3.2 小心==和~=运算符

等于运算符(==)如果两变量值相同将会返回变量值 1,如果不同将返回 0。不等运算符(~=)如果两变量值不同则返回 1,相则返回 0。用这两个运算符比较两个字符串他是安全的,不会出现错误。但对两个数字数据的比较,将可能产生异想不到的错误。两个理论上相等的数不能有一丝一毫的差别,而在计算机计算的过程中存在修正误差,从而可能在判断相等与不相等的过程中产生错误, 这种错误叫做round off 错误。例如

>> a=0;
>> b=sin(pi);
>> a==b

ans =

  logical

   0

因此在检测两数值是否相等时,要考虑是否由于修正误差可能会使两个本来应该相等的值不相等了。这时可以在修正误差的范围内,判断它们是否近似相等。

3.3.3 逻辑运算符

image-20240913230307455

标量和数组,数组和数组之间都可以进行逻辑运算,示例:

>> a=[1 0;0 1];
>> b=0;
>> a & b

ans =

  2×2 logical 数组

   0   0
   0   0

>> b=[1 1 ;0 0];
>> a|b

ans =

  2×2 logical 数组

   1   1
   0   1

如果两个数组大小不相同,会产生运行时错误。

在运算顺序中,逻辑运算在所有的数学运算和关系运算之后进行

3.3.4 逻辑函数

image-20240913230713177

3.4 选择结构

MATLAB的选择结构有:if结构,switch结构和try/catch结构

3.4.1 if结构

基本形式如下

if control_expr_1
    Statement 1
    Statement 2
elseif control_expr_2
    Statement 1
    Statement 2
else
    Statement 1
    Statement 2
end

在一个 if 结构中, 可以有任意个 elseif 语句, 但 else 语句最多有一个。 只要上面每一个控制表达式均为 0, 那么下一个控制表达式将会被检测。 一旦其中的一个表达式的值非 0,对应的语句块就要被执行, 然后跳到 end 后面的第一个可执行语句继续执行。 如果所有的控制表达式均为 0, 那么程序将会执行 else 语句。 如果没有 else 语句, 程序将会执行 end 后面的语句, 而不执行 if 结构中的部分。

示例:

a=2;
b=1;
c=-2;
if (b^2 - 4*a*c) < 0
    disp('This equation has two complex roots.');
elseif (b^2 - 4*a*c) == 0
    disp('This equation has two identical real roots.');
else
    disp('This equation has two distinct real roots.');
end
This equation has two distinct real roots.

3.4.2 switch结构

switch 结构是另一种形式的选择结构。 程序员可以根据一个单精度整形数, 字符或逻辑表达式的值来选择执行特定的代码语句块。 基本形式如下:

switch (switch_expr)
case case_expr_1
    Statement 1
    Statement 2
case case_expr_2
    Statement 1
    Statement 2
otherwise
    Statement 1
    Statement 2
end

如果 switch_expr 的值与 case_expr_1 相符, 那么第一个代码块将会被执行, 然后程序将会跳到 switch 结构后的第一个语句。 如果 switch_expr 的值与 case_expr_2 相符, 那么第二个代码块将会被执行, 然后程序将会跳到 switch 结构后的第一个语句。 在这个结构中, 用相同的方法来对待其他的情况。 otherwise 语句块是可选的。 如果它存在的话, 当 switch_expr的值与其他所有的选项都不相符时, 这个语句块将会被执行。 如果它不存在, 且 witch_expr的值与其他所有的选项都不相符, 那么这个结构中的任何一个语句块都不会被执行。

示例:

value=1;
switch (value)
case {1, 3, 5, 7, 9}
    disp('The value is odd.');
case {2, 4, 6, 8, 10}
    disp('The value is even.');
otherwise
    disp('The value is out of range.');
end

3.4.3 try/catch结构的应用

try/catch 结构是选择结构的一种特殊形式, 用于捕捉错误。 一般地, 当一个 MATLAB 程序在运行时遇到了一个错误, 这个程序就会中止执行。 try/catch 结构修改了这个默认行为。如果一个错误发生在这个结构的 try 语句块中, 那么程序将会执行 catch 语句块, 程序将不会中断。 它将帮助程序员控制程序中的错误, 而不用使程序中断。结构的基本形式如下:

try
    Statement 1
    Statement 2
catch
    Statement 1
    Statement 2
end

示例:

% Initialize array
a = [ 1 -3 2 5];
try
% Try to display an element
    index = input('Enter subscript of element to display: ');
    disp(['a(' int2str(index) ') = ' num2str(a(index))] );
catch
    % If we get here an error occurred
    disp( ['Illegal subscript: ' int2str(index)] );
end
Enter subscript of element to display: 8
Illegal subscript: 8

3.5 附加的画图特性

3.5.1 控制x,y轴绘图的上下限

axis命令或函数允许程序员设定和修改坐标的上下限。

image-20240914084028957

示例:

x=-2*pi:pi/20:2*pi;
y=sin(x);
plot(x,y);
title('Plot of sin(x) vs x');
image-20240914084318106

修改上下限:

axis([0 pi 0 1])
image-20240914084443074

3.5.2 在同一坐标系内画出多个图像

在一般情况下,创建一个新的图象就要用到一个 plot 命令,前面的数据就会自动消失。这种行为可以通过使用 hold 命令得到修改。当 hold on 命令执行后,所有的新的图象都会叠加在原来存在的图象。hold off 命令可恢复默认情况,用新的图象来替代原来的图象。

x = -pi:pi/20:pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1,'b-');
hold on;
plot(x,y2,'k--');
hold off;
legend ('sin x','cos x');
image-20240914084628209

3.5.3 创建多个图像

MATLAB 可以创建多个图象窗口, 每个窗口都有不同的数据。 我们用图象数来区分这些图象窗口, 图象数是一个小的正整数。 第一个图象窗口称为图 1, 第二个图象窗口为图 2,依次类推。 这些窗口中的一个称为当前图象窗口, 所有的新的画图命令将会展示在那个窗口中。gcf 函数用于当于返回当前图象数。 当你需要知道当前图象数时, 你就把这个函数写入M 文件中。

figure(1);
x = 0:0.05:2;
y1 = exp(x);
plot(x,y1);
figure(2);
y2 = exp(-x);
plot(x,y2);
Image 1 Image 2

3.5.4 子图像

创建子图像的命令

subplot(m,n,p)

该命令在当前窗口创建 m × n m\times n m×n个子图像,按m行,n列排列,并选择子图像p来接收当前命令。子图像从左到右,从上到下排列。

figure(1);
subplot(2,1,1);
x = -pi:pi/20:pi;
y = sin(x);
plot(x,y);
title('Subplot 1 title');
subplot(2,1,2);
x = -pi:pi/20:pi;
y = cos(x);
plot(x,y);
title('Subplot 2 title');
image-20240914085446174

3.5.5 对画线的增强控制

除了控制画线的颜色、样式和符号形式,我们还可以设置其中四种附加属性。

image-20240914085634335
x=0:pi/15:4*pi;
y=exp(2*sin(x));
plot(x,y,'-ko','LineWidth',3.0,'Markersize',6 ,...
'MarkerEdgeColor','r','MarkerFaceColor','g');
image-20240914085745232

3.5.6 文本字符串的高级控制

文本的字体通可以通过流修饰符(stream modifiers)修改。 一个流修饰符是一个特殊的字符序列, 用来告诉编译器改变它的行为。 最普通的流修饰符是:

image-20240914085932282

特殊的希腊字母或数学符号也可用在文本字符串中。 通过嵌入特殊的转义序列来创建这些字符。 这些转义序列是支持 TEX 语言的特殊序列的一个子集。 如果要打印转义符\, {, }, _, 或^就必须在前面加上一个反斜杠。

image-20240914090102620

3.5.7 极坐标图像

MATLAB 中包括一个重要的函数叫做 polar, 它用于在极坐标系中画图。 这个函数的基本形式如下:

polarplot(theta,r)

其是 theta 代表一个弧度角数组, r 代表一个距离数组。 它用来画以角度为自变量的函数的极坐标图是非常有用的。

image-20240914090517134

3.5.8 注释并保存图像

一旦 MATLAB 成功创建一个图象, 那么用户就可以运用画图工具条上的 GUI 工具来编辑和注释这些图象。

3.6 总结

image-20240916110237045

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

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

相关文章

c++的decltype关键字

它可以将变量声明为表达式指定的类型

C语言程序二级 之知识点 程序填空 程序设计 程序修改

一 知识点 宏定义是指用一个宏名(名字)来代表一个字符串。宏定义的功能是在编译预处理时&#xff0c;对程序中所有出现的"宏名"都用宏定义中的字符串去代换&#xff0c;这称为"宏代换"或"宏展开"。无参宏定义的一般格式&#xff1a;#define 标识…

中国光刻机突破28nm?进步巨大但前路漫漫

在近期的报道中&#xff0c;中国国产光刻机进入推广目录的消息引发了广泛关注&#xff0c;其中提到的一款氟化亚光刻机的分辨率达到了65nm&#xff0c;被视作具备28nm制程节点的生产能力。那么&#xff0c;国产光刻机真的已经突破了28nm制程节点了吗&#xff1f;本文将对相关技…

Mysql梳理6——order by排序

目录 6 order by排序 6.1 排序数据 6.2 单列排序 6.3 多行排列 6 order by排序 6.1 排序数据 使用ORDER BY字句排序 ASC&#xff08;ascend&#xff09;:升序DESC(descend):降序 ORDER BY子句在SELECT语句的结尾 6.2 单列排序 如果没有使用排序操作&#xff0c;默认…

第157天: 安全开发-Python 自动化挖掘项目SRC 目标FOFA 资产Web 爬虫解析库

案例一&#xff1a;Python-WEB 爬虫库&数据解析库 这里开发的内容不做过多描述&#xff0c;贴上自己写的代码 爬取数据 要爬取p标签&#xff0c;利用Beautyfulsoup模块 import requests,time from bs4 import BeautifulSoup#url"https://src.sjtu.edu.cn/rank/firm…

教你建设智慧数字乡村如何选供应商,如何落地项目

说到数字乡村建设&#xff0c;大家都有自己的思路和想法&#xff0c;那么如果现在让你来做这个项目你又如何来实施&#xff1f;都需要什么方式&#xff1f;都要具备什么条件&#xff1f; 下面我来说一下我的个人思路&#xff0c;要做数字乡村我觉得前提是必须满足几个条件&…

可视化工具Gephi安装要求和特点

Gephi是进行社会图谱数据可视化分析的工具&#xff0c;不但能处理大规模数据集并且Gephi是一个可视化的网络探索平台&#xff0c;用于构建动态的、分层的数据图表。 Gephi安装要求 ① gephi是一个可多平台使用的绘图软件&#xff0c;能在Windows&#xff0c;OS&#xff0c;Lin…

平价头戴式蓝牙耳机有哪些?四款公认平价性能超强品牌机型推荐

在追求高品质音乐体验的同时&#xff0c;许多消费者希望找到价格亲民的头戴式蓝牙耳机&#xff0c;市场上不乏性能卓越、价格实惠的产品&#xff0c;它们凭借出色的音质、舒适的佩戴体验和可靠的续航能力赢得了用户的青睐&#xff0c;那么在众多的头戴式蓝牙耳机内&#xff0c;…

英伟达:AI时代的领跑者,引领智能计算的未来@附149页PDF文件下载

在人工智能的浪潮中&#xff0c;英伟达&#xff08;NVIDIA&#xff09;以其卓越的GPU技术&#xff0c;成为了这个时代的领跑者。从游戏显卡的霸主到AI计算的领导者&#xff0c;英伟达的转型之路充满了创新与突破。今天&#xff0c;我们将深入探讨2024年英伟达如何通过其战略布局…

Python 中的异步编程:从入门到实践

在现代编程实践中&#xff0c;异步编程已经成为一个不可或缺的技能&#xff0c;尤其是在处理高并发和I/O密集型应用时。Python&#xff0c;作为一种动态、解释型的高级编程语言&#xff0c;提供了强大的异步编程支持&#xff0c;使得开发者能够有效地编写高效、可扩展的应用程序…

虹科技术 | Linux环境再升级:PLIN驱动程序正式发布

Linux驱动程序领域再添新成员&#xff0c;PLIN驱动程序现已正式发布。这一新驱动程序为使用LIN接口的用户提供了一个便捷、高效的解决方案。本文将展示如何安装PLIN驱动程序&#xff0c;以及如何在Linux环境下进行基本的PLIN通信操作&#xff0c;确保您能够快速掌握并应用这一新…

寄存器二分频电路

verilog代码 module div2_clk ( input clk, input rst,output clk_div);reg clk_div_r; assign clk_div clk_div_r;always(posedge clk) beginif(rst)beginclk_div_r < 1b0;endelsebeginclk_di…

射击靶标检测系统源码分享

射击靶标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

pytorch-AutoEncoders实战之VAE

目录 1. VAE回顾2. KL的计算公式3. 构建网络4. 模型训练 1. VAE回顾 VAE Variational Auto Encoder&#xff0c;变分自编码器。是一种常见的生成模型&#xff0c;属于无监督学习的范畴。它能够学习一个函数/模型&#xff0c;使得输出数据的分布尽可能的逼近原始数据分布&…

CCRC-CDO首席数据官:未成年人首次上网年龄持续降低

近日&#xff0c;中国社会科学院新闻与传播研究所联合社会科学文献出版社发布了《青少年蓝皮书&#xff1a;中国未成年人互联网运用报告(2024)》&#xff0c;该报告对中国未成年人的互联网使用情况进行了全面的研究和专项汇报。 调查数据透露&#xff0c;未成年人接触网络的年…

光耦选型 | 充电领域使用光耦型号推荐——晶体管光耦KL3H7

在充电领域&#xff0c;光耦作为一种常见的光电耦合器件&#xff0c;通常用于电气隔离、信号传输、电池保护和充电控制等方面。 电源气隔离&#xff1a;光耦可用于实现电源气隔离&#xff0c;将输入和输出电路进行隔离&#xff0c;提高系统的安全性和稳定性。 信号传输&#…

0基础也可以转行做产品经理吗?

转行成为产品经理&#xff0c;即使没有相关工作经验或技术背景&#xff0c;仍然是一个可行的目标。产品经理的职责多样&#xff0c;但成功的产品经理通常需要具备一系列的技能和素养&#xff0c;包括项目管理、市场分析、用户体验设计等。在没有相关经验的情况下&#xff0c;通…

动手学深度学习PyTorch 第 1 章 引言

在线电子书 深度学习介绍 安装 使用conda环境 conda create -n d2l-zh python3.8 pip安装需要的包 pip install jupyter d2l torch torchvision下载代码并执行 wget https://zh-v2.d2l.ai/d2l-zh.zip unzip d2l-zh.zip jupyter notebookpip install rise如果不想使用jupyt…

建筑企业有闲置资质怎么办?

在建筑行业中&#xff0c;企业可能会因为业务调整、市场变化或战略转型而拥有一些不再使用的资质。这些闲置的资质如果得不到合理处理&#xff0c;不仅会造成资源浪费&#xff0c;还可能影响企业的合规性。因此&#xff0c;建筑企业在面对闲置资质时&#xff0c;需要采取合适的…

《微信小程序实战(3) · 推广海报制作》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…