数学实验教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 循环和判断语句

在完成一些比较复杂的运算时,往往需要用到循环和分支等逻辑语言结构,这就是MATLAB中的控制流结构。MATLAB提供了for循环、while循环等循环语句,以及逻辑判断结构if-else-end等。

首先介绍for循环。for循环用于让某个语句或一组语句被重复执行指定次数。比如对1到50之间的数字求和,可以使用如下循环语句实现:

    >> clear
    >> s=0;
    >> for i=1: 50;
    s=s+i;
    end
    >> s

    s=

          1275

在上面的代码中,首先为变量s赋予初始值0,每次增量为1,循环50次,输出结果就是1到50之间的数字之和。

再比如计算n=1, 2, 3, 4, 5时的sin(π/n)值,输入如下代码:

    >> for n=1: 5;
    x(n)=sin(pi/n);
    end

即可算出所有结果。如果需要输出单个计算结果,输入命令x(n)即可,n为1至5中的某个数字,比如求x(2):

    >> x(2)

    ans=

          1

也可以输出全部计算结果,输入命令x,然后按回车键即可。

    >> x

    x=

      0.0000    1.0000    0.8660    0.7071    0.5878

接下来介绍while循环。前面介绍的for循环是让某个或一组语句执行指定次数,如果需要设定一个更宽泛的结束循环的条件,则可以选择while循环。比如,某国现有人口4.5亿人,年增长3%,什么时候会达到5亿人?输入如下代码:

    >> m=4.5;
    >> t=0;
    >> while m<5
    t=t+1
    m=m∗(1+0.03)
    end

输出结果为:t=1时m=4.6350, t=2时m=4.7740, t=3时m=4.9173, t=4时m=5.0648。因此,4年后人口会达到5亿人。

很多编程语言中都存在类似“如果某个条件满足,则执行某个指令”的逻辑判断-执行语句,MATLAB中也有类似的结构,这就是if-end结构。比如,在定义分段函数时,就可以运用if-end结构。

对于如下分段函数:

求其在定义域内任何一点的函数值,我们可以建立如下的M文件,并将其命名为fdhs. m:

    function f=fdhs(x)
    if x<0
        f=2∗x+sin(x)
    end
    if x>=0
        f=exp(x)-1
    end

计算f(0),可以在命令窗口输入fdhs(-pi/2),得到ans=-4. 1416;输入fdhs(0),得到ans=0。

如果选项比较多,则可以用多个if-end语句覆盖全部选项。如果函数只有两个选项,则可以采用if-else-end结构:

    function f=fdhs(x)
    if x<0
        f=2∗x+sin(x)
    else
        f=exp(x)-1
    end

选项较多时,也可以使用if-elseif-elseif-end结构。比如对于分段函数:

可以反复使用if-end语句:

    function f=fdhs(x)
    if x<-1
        f=-1
    end
    if x>=-1&x<=1
        f=0
    end
    if x>1
        f=1
    end

也可以运用if-elseif-elseif-end语句:

    function f=fdhs(x)
    if x<-1
        f=-1
    elseif x>=-1&x<=1
        f=0
    elseif x>1
        f=1
    end

两种语句输出的结果完全一致,后者需要输入的代码会少一些。

MATLAB中还有其他控制流结构,在面对不同问题时各有各的优势,这里不再赘述。