专题三.MATLAB程序流程控制

3.1 顺序结构程序

1.程序三种基本结构

        顺序解雇、选择结构、循环结构。

2.脚本文件和函数文件

       脚本文件:可以在命令行直接执行的文件。

       函数文件:定义一个函数,不可直接运行,必须以函数调用的方式来调用它。

3.文件的建立

        (1)按钮实现文件的创建。

        (2)用edit命令创建文件

        >>edit test

        会在当前文件夹创建test.m的文件并打开matlab编辑器,输入.m文件的内容并存盘文件就创建成功了。

        Eg:分别建立脚本文件和函数文件,求乘积。

        a.建立脚本文件:f1.m。

        A=[1 2 3;4 5 6];

        B=[1 2 ;3 4;5 6];

        C=A*B

        b.命令行运行脚本文件

       c.建立函数文件f2.m

              function C=f2(A,B)

              C=A*B

       d.命令行窗口调用函数文件

4.顺序结构

       (1)数据的输入:A=input(‘提示信息,输入类型)

       (2)数据的输出:disp(输出项)。多个内容用向量表示egdisp([a,b,c])

       (3)程序的暂停:pause(延迟秒数)。强行终止程序可用Ctrl+C命令

3.2 用if语句实现选择结构

1.单分支if语句

       (1)格式

       if 条件 (标量:零表示不成立,反之成立;矩阵:含0元素或者矩阵为空则不成立,反之成立)

              语句组(一条或者多条语句)

       end

2.双分支if语句

       (1)格式

       if 条件

              语句组1

       else

              语句组2

       end

3.多分支if语句

       (1)格式

       if 条件 1

              语句组1

       elseif 条件2

              语句组2

       ...

       else

              语句组n

       end

       eg:输入一个字符,若为大写字母,则输出对应的小写字母;如果为小写,则输出对应的大写字母;如果为数字,则输出对应数字的平方;若为其他,则原样输出。

        a=input('请输入一个字符:','s');

        if a>='a'&&a<='z'

            disp(upper(a))

        elseif a>='A'&&a<='Z'

            disp(lower(a))

        elseif a>='0'&&a<='9'

            disp(str2double(a)^2)

        else

            disp(a)

        end

3.3 用switch语句实现选择结构

1.switch语句的格式

        (1)语法格式

        switch 表达式

              case 结果表1

                     语句组1

              case 结果表2

                     语句组2

              ...

              otherwise

                     语句组n

       end

        注意:switch表达式应该是其值可以列举的表达式;case当取值为多个时,用单元数据表示。例如:case {3,4,5}

        Eg:输入一个英文单词,判断他是否以元音字母开头。

        法一:switch语句

        a=input('请输入英文单词:','s');

        switch a(1)

            case {'A','E','I','O','U','a','e','i','o','u'}

                disp([a,'以元音字母开头'])

            otherwise

                disp([a,'以辅音字母开头'])

        end

        法二:字符串处理函数

        a=input('请输入一个单词:','s');

        if findstr('AEIOUaeiou',a(1))>0

            disp([a,'该单词以元音字母开头'])

        else

            disp([a,'该单词以辅音字母开头'])

        end

3.4 用for语句实现循环结构

1.for语句格式

       for 循环变量=表达式1:表达式2:表达式3(冒号表达式)或者矩阵表达式

              循环体语句

       end

       (1)for语句针对向量的每一个元素执行一次循环体。

       (2)退出循环后,循环变量的值就是向量中最后的元素值for k=1:2:10。最后k的值为9。

2.循环体变量为矩阵表达式

       遍历顺序:按列遍历,比如for k=[1 5;2 6;3 7;4 8] k=1 2 3 4 5 6 7 8

3.5 用while语句实现循环结构

1.while语句格式

       while 条件

              循环体语句

       end

        eg:从键盘输入若干数,当输入0时结束,求这些数的平均值和他们的和。

        sum=0;

        n=0;

        x=input("Enter a number(end in 0):");

        while x~=0

            sum=sum+x;

            n=n+1;

            x=input("Enter a number(end in 0):");

        end

        if n>0

            disp(sum)

            average=sum/n

        else

            disp("Error")

        end

2.流程转向语句

       1break语句:终止循环

       2continue语句:结束本次循环

        Eg:求[100,200)之间第一个能被21整除的整数。

        for n=100:200

                if rem(n,21)~=0

                        continue

                else

                        disp(n)

                        break

                end

        end

3.循环的嵌套

        Eg:用筛选法求某自然数范围内的全部素数。

        m=input("m=:");

        for x=2:m

            flag=1;%假设x是素数

            for y=2:sqrt(x)

                if rem(x,y)==0

                    flag=0;%x非素数

                    break

                end

            end

    if flag==1

        disp(x)

    end

end

3.6 函数文件的定义与调用

1.函数文件的基本结构

       1)格式

                function 输出形参表=函数名(输入形参表)

               注释说明部分

               函数体语句

       (2)注意:当输入有多个形参时,用逗号分隔,形成形参表;当输出形参多于1个时,用方括号括起来,构成输出矩阵。

2.函数文件名和函数名

     函数文件名通常由函数名+.m的扩展组成,函数文件名和函数名也可以不相同,此时matlab将忽略函数名,调用函数文件名,因此为了方便理解,通常相同。

3.函数的调用

       1)调用格式:输出实参列表=函数名(输入实参表)。

        Eg:编写函数文件名,求半径为r的圆的周长和面积。

        fcircle.m

        function [s,p]=fcircle(r)

            s=pi*r*r;

        p=2*pi*r;

        调用:

        >> [s,p]=fcircle(3)

        s =28.2743

        p =18.8496

4.匿名函数

       (1)格式

       函数句柄变量=@(匿名函数输入参数)匿名函数表达式

       多个参数用逗号分隔。

       (2)调用

       通过句柄调用

        Eg:

        >> f=@(x,y)x^2+y^2

        f =

          包含以下值的 function_handle:

    @(x,y)x^2+y^2

        >> f(3,4)

ans =

    25

>>

3)调用已定义函数

        函数句柄变量=@函数名

        Eg:>> h=@sin

        h =包含以下值的 function_handle:

            @sin

        >> h(pi/2)

        ans =1

eg:已知y=f(40)/(f(30)+f(20))

       1.当f(n)=n+10ln(n*n+5)时,y的值?

       2.当f(n)=1*2+2*3+...n*(n+1)时,y的值?

        分别用匿名函数和函数文件定义f(n)

        定义函数文件f2.m:

        function f=f2(n)

        f=0;

        for k=1:n

            f=f+k*(k+1);

        end

        定义mf.m文件:

        f1=@(n)n+10*log(n^2+5);

        y1=f1(40)/(f1(30)+f1(20))

        y2=f2(40)/(f2(30)+f2(20))

        运行:>> mf

        y1 =0.6390

        y2 =1.7662

3.7 函数的递归调用

1.斐波那契数列定义如下:f1=f2=1,fn=fn-1+fn-2。编写递归函数求斐波那契数列第n项,然后验证:f1^2+f2^2+...+fn^2=fn*fn+1。

        首先建立递归函数文件ffib.m:

        function f=ffib(n)

            if n>2

                f=ffib(n-1)+ffib(n-2);

            else

                f=1;

            end

        然后建立脚本文件test.m

        F=[];

        for k=1:20

            F=[F,ffib(k)^2];

        end

        sum(F)

        ffib(20)*ffib(21)

        运行test.m文件

        >> test

        ans =74049690

        ans =74049690

        注意:实际上,递归通常会增加空间和执行时间的开销。因为每次递归调用都会在堆栈上保存一个新的函数调用信息(如参数和局部变量),这会占用更多内存。同时,每次调用都需要消耗时间来进行函数调用和返回操作。因此,递归一般比非递归的方法更耗资源。

3.8 函数参数与变量的作用域

1.函数参数的可调性

        nargin------------>调用函数时,输入实参个数

        nargout----------->调用函数时,输出实参个数

        eg:建立test.m

        function fout=test(a,b,c)

                  if nargin==1

                     fout=a;

                  elseif nargin==2

                     fout=a+b;

                  elseif nargin==3

                     fout=(a*b*c)/2;

          end

        运行test.m

        >> fout=test(2)

        fout =2

        >> fout=test(2,3)

        fout =5

        >> fout=test(2,3,4)

        fout =12

2.全局变量和局部变量

       (1)局部变量:程序中只在特定过程或函数中可以访问的变量。

       (2)全局变量:作用域是整个matlab工作区间,所有函数都可以对他进行存取和修改。

       (3)定义全局变量:global 变量名1 变量名2

       Eg:

        建立函数wad.m

        function f=wad(x,y)

        global ALPHA BETA

        f=ALPHA*x+BETA*y;

        在命令窗口中输入命令:

        >> global ALPHA BETA

        >> ALPHA=1;

        >> BETA=2;

        >> s=wad(3,4)

                s =11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值