暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

软件开发架构 2023-05-06
541


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);

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:已知符号函数

使用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所示。

4-3  错误对话框


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

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


如果大家需要这个文档,可以在我的公众号(软件开发架构)中回复20230506,免费获取。



文章转载自软件开发架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论