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

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

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

matlab">>> 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 错误。例如

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

ans =

  logical

   0

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

3.3.3 逻辑运算符

image-20240913230307455

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

matlab">>> 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结构

基本形式如下

matlab">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 结构中的部分。

示例:

matlab">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
matlab">This equation has two distinct real roots.

3.4.2 switch结构

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

matlab">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的值与其他所有的选项都不相符, 那么这个结构中的任何一个语句块都不会被执行。

示例:

matlab">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 语句块, 程序将不会中断。 它将帮助程序员控制程序中的错误, 而不用使程序中断。结构的基本形式如下:

matlab">try
    Statement 1
    Statement 2
catch
    Statement 1
    Statement 2
end

示例:

matlab">% 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

示例:

matlab">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 命令可恢复默认情况,用新的图象来替代原来的图象。

matlab">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 文件中。

matlab">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 子图像

创建子图像的命令

matlab">subplot(m,n,p)

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

matlab">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
matlab">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, 它用于在极坐标系中画图。 这个函数的基本形式如下:

matlab">polarplot(theta,r)

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

image-20240914090517134

3.5.8 注释并保存图像

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

3.6 总结

image-20240916110237045

http://www.niftyadmin.cn/n/5667208.html

相关文章

中电金信:构建银行级数智化平台 做好数字金融大文章

近年来&#xff0c;党中央高度重视数字经济发展&#xff0c;2023年召开的中央金融工作会议将数字金融列为金融“五篇大文章”之一&#xff0c;要求着力打造现代金融机构和市场体系&#xff0c;疏通资金进入实体经济的渠道&#xff0c;为数字金融建设指明了目标方向。新形势下&a…

Java 集合(数据结构)面试题总结

一、栈和队列的区别 具体的场景应用 栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;是两种基本的数据结构&#xff0c;它们在数据的存取顺序上有不同的规则。以下是它们的主要区别以及具体的应用场景。 1. 栈&#xff08;Stack&#xff09; 特点&…

2024 屡发屡中的论文方向:时空预测!

【时空预测】是一种专门处理具有时间和空间属性的数据的分析技术&#xff0c;随技术发展&#xff0c;用于解决复杂的时空问题的新预测方法和模型不断涌现。仅2024上半年&#xff0c;时空大模型UrbanGPT、通用城市时空预测模型UniST、即插即用的时空提示调整机制FlashST……各大…

我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆

本教程基于自研的AI工具箱Tauri版进行VideoReapeat视频解说复述克隆。 VideoReapeat视频解说复述克隆 是自研的AI工具箱Tauri版中的一款专用模块&#xff0c;旨在通过AI技术对视频解说内容进行复述和克隆。该工具可自动洗稿并重新生成视频解说&#xff0c;通过简单配置即可对大…

Android 检测图片抓拍, 聚焦图片后自动完成拍照,未对准图片的提示请将摄像头对准要拍照的图片

在 Android 中实现检测图片抓拍并在聚焦图片后自动完成拍照&#xff0c;同时在未对准图片时给出提示&#xff0c;可以通过以下步骤实现&#xff1a; 一、权限设置 在AndroidManifest.xml文件中添加相机权限和存储权限&#xff1a; <uses-permission android:name"and…

一、Numpy使用

1、numpy的简单使用 import numpy as np #利用as给numpy起一个别名np# 使用array来承接这个数组 array np.array([[1,2,3],[2,3,4]])print(array) print("number of dim:", array.ndim) # ndim 数组维度 print("shape:", array.shape) # 数组的形…

Vue3快速入门+axios的异步请求(基础使用)

学习Vue之前先要学习htmlcssjs的基础使用 Vue其实是js的框架 常用到的Vue指令包括vue-on,vue-for,vue-blind,vue-if&vue-show,v-modul vue的基础模板&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8&…

Python redis 安装和使用介绍

python redis安装和使用 一、Redis 安装1.1、Windows安装 二、安装 redis 模块二、使用redis 实例1.1、简单使用1.2、连接池1.3、redis 基本命令 String1.3.1、ex - 过期时间&#xff08;秒&#xff09;1.3.2、nx - 如果设置为True&#xff0c;则只有name不存在时&#xff0c;当…