搜索
 找回密码
 立即注册
查看: 529|回复: 5

三个例子讲解MATLAB三种循环

[复制链接]
  • TA的每日心情
    擦汗
    2018-6-12 08:25
  • 签到天数: 109 天

    [LV.6]常住居民II

    106

    主题

    350

    帖子

    3374

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3374

    灌水之王荣誉会员

    发表于 2016-12-23 11:41:29 | 显示全部楼层 |阅读模式
    FOR 循环

    在for和end语句之间的{commands}按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:, n)。
    如» for n=1:10
                 x(n)=sin(n*pi/10);
               end
    当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,上面的例子可被重写为
              »n=1:10;
              »x=sin(n*pi/10)
    第二种方式执行速度更快。
    为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。

    WHILE循环

    只要在表达式里的所有元素为真,就执行while和end 语句之间的{commands}。通常,表达式的求值给出一个标量值,但数组值也同样有效。在数组情况下,所得到数组的所有元素必须都为真。考虑下列例子:

                                 » num=0;EPS=1;
                                 » while(1+EPS)>1
                                      EPS=EPS/2;
                                      num=num+1;
                                     end

                                 » num
                                 num =
                                     53

                                 » EPS=2*EPS
                                 EPS =
                                   2.2204e-016

        这个例子表明了计算特殊MATLAB值eps的一种方法,它是一个可加到1,而使结果以有限精度大于1的最小数值。这里我们用大写EPS,因此MATLAB的eps的值不会被覆盖掉。在这个例子里,EPS以1开始。只要(1+EPS)>1为真(非零),就一直求While循环内的命令值。由于EPS不断地被2除,EPS逐渐变小以致于EPS+1不大于1。(记住,发生这种情况是因为计算机使用固定数的数值来表示数。MATLAB用16位,因此,我们只能期望EPS接近10-16。)  在这一点上,(1+EPS)>1是假(零),于是While循环结束。最后,EPS与2相乘,因为最后除2使EPS太小。

    IF-ELSE-END结构

    如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的{commands}。在表达式包含有几个逻辑子表达式时,即使前一个子表达式决定了表达式的最后逻辑状态,仍要计算所有的子表达式。例如,

              »apples=10;         %  number of apples
              » cost=apples*25     % cost of apples
              » ifapples>5         %  give 20% discount for larger purchases
                 cost=(1-20/100)*cost;
               end
              » cost
              cost =
                 200

        假如有两个选择,If-Else-End结构是:

               if  expression
                   commands evaluated if True
                else
                   commands evaluated if False
                end
    在这里,如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令。

        当有三个或更多的选择时,If-Else-End结构采用形式
             ifexpression1
                commands evaluated if expression1 is True
             elseifexpression2
               commands evaluated if expression2 is True
             elseifexpression3
               commands evaluated if expression3 is True
             elseif ……
                .
             else
                commands evaluated if no otherexpression  is True
             end

        最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的关系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。

        现在我们知道了如何用If-Else-End结构来决策,就有可能提出一种合理的方法来跳出或中断For循环和While循环。
                                » EPS=1;
                                 » for num=1:1000
                                    EPS=EPS/2;
                                    if(1+EPS)<=1
                                     EPS=EPS*2
                                      break
                                     end
                                   end

        这个例子演示了估算EPS的另一种方法。在这种情况下,For循环构造成要执行足够多的次数。If-Else-End结构检验要看EPS是否变得足够小。如果是,EPS乘2,break命令强迫For循环提早结束,num=53。

        在这个例子里,当执行break语句时,MATLAB跳到循环外下一个语句。在现在情况下,它返回到MATLAB的提示符并显示EPS。如果一个break语句出现在一个嵌套的For循环或While循环结构里,那么MATLAB只跳出break所在的那个循环,不跳出整个嵌套结构。

    转载自举举的新浪博客
  • TA的每日心情
    奋斗
    2018-3-9 08:49
  • 签到天数: 129 天

    [LV.7]常住居民III

    58

    主题

    361

    帖子

    3152

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3152

    灌水之王学生会员会员荣誉会员

    发表于 2016-12-25 20:58:43 | 显示全部楼层
    哈哈,我来学习一波
  • TA的每日心情
    奋斗
    2018-4-6 17:26
  • 签到天数: 319 天

    [LV.8]以坛为家I

    100

    主题

    747

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    16576

    灌水之王学生会员会员

    发表于 2016-12-25 22:13:55 | 显示全部楼层
    虽然是非常基础的语句,但重在程序员的算法
  • TA的每日心情
    开心
    2018-6-23 16:03
  • 签到天数: 57 天

    [LV.5]常住居民I

    24

    主题

    140

    帖子

    708

    积分

    高级会员

    Rank: 4

    积分
    708
    发表于 2017-1-6 19:30:05 | 显示全部楼层
    matlab不是不推介使用循环吗?效率太低,用矩阵来计算才是matlab的强项
    [fly]好好学习,天天向上[fly]
  • TA的每日心情
    擦汗
    2018-6-12 08:25
  • 签到天数: 109 天

    [LV.6]常住居民II

    106

    主题

    350

    帖子

    3374

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3374

    灌水之王荣誉会员

     楼主 发表于 2017-1-6 21:34:03 | 显示全部楼层
    dsjoin 发表于 2017-1-6 19:30
    matlab不是不推介使用循环吗?效率太低,用矩阵来计算才是matlab的强项

    又有什么关系呢,该用继续用啊。
  • TA的每日心情
    奋斗
    2017-7-26 18:51
  • 签到天数: 147 天

    [LV.7]常住居民III

    24

    主题

    269

    帖子

    1762

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1762
    发表于 2017-1-7 08:21:39 | 显示全部楼层
    学习了。
    回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    5