第4章 MATLAB编程基础——4.3 MATLAB的控制流(1)

简介: 第4章 MATLAB编程基础——4.3 MATLAB的控制流(1)

4.3  MATLAB的控制流(1)


MATLAB平台上的控制流结构包括顺序结构、if-else-end分支结构、switch-case结构、try-catch结构、for循环结构和while循环结构,这6种结构的算法及使用与其他计算机编程语言十分类似,有编程基础的读者可以很快掌握。


4.3.1  顺序结构


顺序结构是MATLAB程序中最基本的结构,表示程序中的各操作是按照它们出现的先后顺序执行的。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三部曲的程序就是顺序结构。在大多数情况下,顺序结构作为程序的一部分,与其他结构一起构成一个复杂的程序,如分支结构中的复合语句、循环结构中的循环体等。


4-2:计算圆的面积。该程序的语句顺序就是输入圆的半径r,计算S=π·r·r,输出圆的面积S。试着在MATLAB中编写求解圆面积的顺序结构的程序。

MATLAB命令行窗口中运行指令edit,调出MATLAB的程序编辑器,系统即新建一个默认名为UntitledM文件,在输入区输入下述代码(见图4-2):

r = 5;                  % 定义变量r,并赋值
S = pi * r * r;         % 计算圆的面积
fprintf('半径为%d的圆的面积为%f\n',r,S);

f7b328918398d7222920d2ca8621c712_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4-2  输入程序

单击编辑器选项卡→“文件面板中的保存按钮,并以ex4_2为名称保存。

单击运行面板中的运行按钮运行该M文件,即可在命令行窗口中得到结果:

半径为5的圆的面积为78.539816


4.3.2  if-else-end分支结构


if-else-end指令为程序流提供了一种分支结构,该结构的形式根据实际情况的不同而不同,主要有以下几种。

1)若判决条件expression为真,则执行命令组,否则跳过该命令组。具体的调用格式如下:

if expression
    commands
end

2)若可供选择的执行命令组有两组,则采用如下结构:

if expression           % 判决条件
    commands1       % 判决条件为真,执行命令组1,并结束此结构
else
    commands2       % 判决条件为真,执行命令组2,并结束此结构
end


3)若可供选择的执行命令组有nn > 2)组,则采用如下结构:

if expression1           % 判决条件
    commands1         % 判决条件expression1为真,执行命令组1,并结束此结构
elseif expression2
    commands2         % 判决条件expression1为假,expression2为真,执行命令组2,并结束此结构
……
else
    commandsn         % 前面所有的判决条件均为假,执行commandsn,并结束此结构
end


4-3if-else-end分支结构的简单运用示例。

创建M文件并命名为ex4_3.m,利用M文件编辑器在M文件中输入:

Rand_a = rand(1)            % 创建一个随机数Rand_a
if Rand_a > 0.5
    Rand_b = Rand_a         % 如果Rand_a大于0.5,那么创建变量Rand_b并等于Rand_a
else
    Rand_b = 1 - Rand_a     % 如果Rand_a小于0.5,那么创建变量Rand_b并等于1 - Rand_a
end

运行M文件,得到结果:

Rand_a =
    0.0975
Rand_b =
    0.9025


4-4:已知符号函数

3fb67c66a7f71b27d605737d9181b3d8_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

使用if语句判断当给定变量x的值时,相应的函数值y

创建M文件并命名为ex4_4.m,利用M文件编辑器在M文件中输入:

x = input('请输入x的值:');
if(x > 0)
    y = 1;
elseif(x == 0)
    y = 0;
else
    y = -1;
end
disp(y)

调用该文件分别输入不同的x值(此处输入6),运行程序,得到结果:

>> ex4_4
请输入x的值:6
     1


4.3.3  switch-case结构


switch语句执行基于变量或表达式值的语句组,关键字caseotherwise用于描述语句组。只执行第一个匹配的情形。用到switch则必须用end与之搭配。switch-case的具体语法结构如下:

switch value          % value为需要进行判决的标量或字符串
    case test1
       command1   % 如果value等于test1,执行command1,并结束此结构
    case test2
       command2   % 如果value等于test2,执行command2,并结束此结构
……
    case testn
       commandn   % 如果value等于testn,执行commandn,并结束此结构
otherwise
       commands   % 如果value不等于前面所有值,执行commands,并结束此结构
end

说明:

1switch-case结构的调用格式保证了至少有一组指令组将会被执行。

2switch指令之后的表达式value应为一个标量或一个字符串。当表达式为标量时,比较命令为表达式 == 检测值i;而当表达式为字符串时,MATLAB将会调用字符串函数strcmp来进行比较,即strcmp(表达式,检测值i)

3case指令之后的检测值不仅可以是一个标量或一个字符串,还可以是一个元胞数组。如果检测时是一个元胞数组,则MATLAB将会把表达式的值与元胞数组中的所有元素进行比较。如果元胞数组中有某个元素与表达式的值相等,MATLAB则认为此次比较的结果为真,从而执行与该次检测相对应的命令组。


4-5switch-case结构的简单运用示例。

创建M文件并命名为ex4_5.m,利用M文件编辑器在M文件中输入:

num = input("请输入一个数字:");
switch num
    case 1
        data = 'Monday'     
        % 如果num = 1,则定义data = 'Monday'
    case 2
        data = 'Tuesday'    
        % 如果num = 1,则定义data = 'Tuesday'
    case 3
        data = 'Wednesday'  
        % 如果num = 1,则定义data = 'Wednesday'
    case 4
        data = 'Thursday'   
        % 如果num = 1,则定义data = 'Thursday'
    case 5
        data = 'Friday'     
        % 如果num = 1,则定义data = 'Friday'
    case 6
        data = 'Saturday'   
        % 如果num = 1,则定义data = 'Saturday'
    case 7
        data = 'Sunday'     
        % 如果num = 1,则定义data = 'Sunday'
    otherwise
        data = 'None!!!'    
        % 如果num不等于上面所有值,则定义data = 'None!!!'
end

运行M文件,得到结果:

>> ex4_5
请输入一个数字:5
data =
    'Friday'

4-6:求任意底数的对数函数值y = lognx

打开EditorM文件编辑器),编写程序如下:

clear
n = input( 'Enter the value of ''n'': ');
x = input( 'Enter the value of ''x'': ');
switch(n)
    case 1
        errordlg('出错');
    case 2
        y=log2(x);
    case exp(1)
        y=log(x);
    case 10
        y=log10(x);
    otherwise
        y=log10(x)/log10(n);
end
disp(y)

将该脚本M文件命名为ex4_6.m。调用该文件,分别输入不同的n值和x值,运行程序,输出结果:

>> ex4_6
Enter the value of 'n': 2
Enter the value of 'x': 62
    5.9542
>> ex4_6
Enter the value of 'n': 1
Enter the value of 'x': 20
函数或变量 'y' 无法识别。
出错 ex4_6 (line 16)
disp(y)


n=1时,输入x值后,出现错误对话框,如图4-3所示。

86847971ce47da8f997366c92b4c3150_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4-3  错误对话框


注意:与多分支的if语句相比,switch语句主要用于条件多且单一的情况,典型的应用情况是数学中的分段函数。此外,两者各有优缺点,如表4-4所示。

4-4  if语句和switch语句的比较

9aefc7ea32a8d70564c2127f69f95711_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


相关文章
|
7月前
|
机器学习/深度学习 算法 数据库
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
|
5月前
|
数据采集 并行计算 算法
LabVIEW与Matlab联合编程的途径及比较
LabVIEW与Matlab联合编程的途径及比较
128 0
LabVIEW与Matlab联合编程的途径及比较
|
自然语言处理 算法
第4章 MATLAB编程基础——4.5 脚本与函数(2)
第4章 MATLAB编程基础——4.5 脚本与函数(2)
|
自然语言处理
第4章 MATLAB编程基础——4.5 脚本与函数(1)
第4章 MATLAB编程基础——4.5 脚本与函数(1)
第4章 MATLAB编程基础——4.4 控制程序流的其他常用指令
第4章 MATLAB编程基础——4.4 控制程序流的其他常用指令
|
自然语言处理 算法
第4章 MATLAB编程基础——4.3 MATLAB的控制流(2)
第4章 MATLAB编程基础——4.3 MATLAB的控制流(2)
|
存储 算法 调度
Matlab+Yalmip两阶段鲁棒优化通用编程指南
主要包含8大内容: ①.拿到一个复杂的两阶段鲁棒优化问题的分析步骤和方法。 ②.采用Yalmip工具箱中的uncertain函数和鲁棒优化模块求解两阶段鲁棒优化的子问题。 ③.Yalmip工具箱中的鲁棒优化模块和常规的求解思路有什么异同。 ④.使用KKT条件求解两阶段鲁棒优化的子问题。 ⑤.使用对偶变换求解两阶段鲁棒优化的子问题。 ⑥.采用Yalmip工具箱的内置函数,将线性约束写成紧凑矩阵形式的方法。 ⑦.矩阵形式的两阶段鲁棒优化问题,如何快速写出子问题内层优化的KKT条件。 ⑧.矩阵形式的两阶段鲁棒优化问题,如何快速写出子问题内层优化的对偶问题。
|
存储 人工智能 数据可视化
MATLAB 常用数学函数和数组和字符串、元胞数组和结构体,MATLAB 编程,关系运算符和逻辑变量(一)
MATLAB 常用数学函数和数组和字符串、元胞数组和结构体,MATLAB 编程,关系运算符和逻辑变量
164 0
MATLAB 常用数学函数和数组和字符串、元胞数组和结构体,MATLAB 编程,关系运算符和逻辑变量(一)
|
存储 算法 索引
第4章 MATLAB编程基础——4.7 MATLAB程序的调试
第4章 MATLAB编程基础——4.7 MATLAB程序的调试
第4章 MATLAB编程基础——4.6 M文件中变量的检测与传递
第4章 MATLAB编程基础——4.6 M文件中变量的检测与传递

热门文章

最新文章