MATLAB基础

计算机程序就是计算机指令的集合,不同的编程语言指令与功能是不一样的.MATLAB语言是一种面向对象的高级语言,它具有编程效率高、易学易用的优点.


    MATLAB与其它大部分高级语言一样,有它自己的控制流语句.控制流极其重要,因为它使过去的计算影响将来的运算。MATLAB提供如下几种控制流结构:For循环,While循环,If-Else-End结构和switch-case-end结构。由于这些结构经常包含大量的MATLAB命令,故经常出现在M文件中.MATLAB支持的控制流语句和C语言支持的控制流语句在调用格式上非常相似.


1.For 循环


    For循环允许一条语句或一组语句被重复执行预先指定的次数。For循环的一般形式是:


    for  x = array


        语句


    end


在for和end语句之间的语句按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:, n)。例如,


       for n=1:10


           x(n)=sin(n*pi/10);


       end


       x


       x =


    0.3090    0.5878    0.8090    0.9511    1.0000    0.9511    0.8090    0.5878    0.3090    0.0000


    换句话,第一语句是说:对n等于1到10,执行所有语句,直至下一个end语句。第一次通过For循环n=1,第二次,n=2,如此继续,直至n=10。在n=10以后,For循环结束,然后执行end语句后面的任何命令.注意,该循环结束后,n=10.


    For循环的其它重要方面是:


    (1)For循环不能用For循环内重新赋值循环变量n来终止。


       for n=1:10


           x(n)=sin(n*pi/10);


           n=9;


       end


       x


       x =


    0.3090    0.5878    0.8090    0.9511    1.0000    0.9511    0.8090    0.5878    0.3090    0.0000


        n


        n=


           9


执行过程是这样的:


n=1,


x(1)=sin(pi/10),


n=9,


n=2,


x(2)=sin(2*pi/10),


n=9,


n=3,


...,


n=10,


x(10)=sin(10*pi/10),


n=9.


循环结束后,n=9.


    (2)在For循环内接受任何有效的MATLAB数组。


    data=[3  9  45  6;  7  16  -1  5]


    data =


          3     9    45     6


          7    16    -1     5


    for n=data


        x=n(1)-n(2)


    end


       x =


          -4


       x =


          -7


       x =


          46


       x =


          1


    (3)For循环可按需要嵌套。


      for n=1:5


          for m=1:5


              A(n,m)=n^2+m^2;


          end


          disp(n)


      end


      1


      2


      3


      4


      5


      A


      A =


          2     5    10    17    26


          5     8    13    20    29


          10    13    18    25    34


          17    20    25    32    41


          26    29    34    41    50


    (4)当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,上面的第一个例子可被重写为


       n=1:10;


       x=sin(n*pi/10)


       x =


    0.3090    0.5878    0.8090    0.9511    1.0000    0.9511    0.8090    0.5878    0.3090    0.0000


两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。


    (5)为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。例如,前面所考虑的第一种情况,在For循环内每执行一次命令,变量x的大小增加1。迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。为了消去这个步骤,For循环的例子应重写为


    x=zeros(1,10);


    for n=1:10


        x(n)=sin(n*pi/10);


    end


现在,只有x(n)的值需要改变。


    例1 相传古代印度国王要褒奖他的聪明能干的宰相达依尔(国际象棋发明者),问他要什么?达依尔回答:“陛下只要在国际象棋棋盘的第一个格子上放一粒麦子,第二个格子上放二粒麦子,以后每个格子的麦子数都按前一格的两倍计算。如果陛下按此法给我64格的麦子,就感激不尽,其他什么也不要了。”国王想:“这还不容易!”让人扛了一袋麦子,但很快用光了,再扛出一袋还不够,请你为国王算一下共要给达依尔多少小麦?(1小麦约颗)


    解 麦粒总数为


       


    程序如下:


a=1;


s=0


for i=1:64


    s=s+a;


    a=2*a;


end


s=s/1.4/10^8


运行后得:


s=


   1.3176e+011


    例2 公元前五世纪我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?


     解 设 x:鸡翁数,则x的范围:0~19


           y:鸡母数,则y的范围:0~33


           z:鸡雏数,则z的范围:0~100


则:


     x+y+z=100


     5x+3y+z/3=100


这是一个不定方程。


for x=0:19


    for y=0:33


        for z=0:100


            if (x+y+z==100)&(5*x+3*y+z/3==100)


                d=[x,y,z]


            end


        end


    end


end


运行后得结果:


d =


     0    25    75


d =


     4    18    78


d =


     8    11    81


d =


    12     4    84


2.While  循环


    与For循环以固定次数求一组命令的值相反,While 循环以不定的次数重复执行一组语句。While循环的一般形式是:


    while 表达式1


          语句1


    end


只要表达式1里的所有元素为真,就执行while和end之间的语句1,否则,就结束循环。通常,表达式的值给出一个标量值,但数组值也同样有效。在数组情况下,当数组的所有元素为真(值不等零)时,就执行语句1,数组中有一个元素为假(值为零),就结束循环。


   例3 按下面的公式计算:


       


使误差小于给定的.


   解 把作为误差,程序如下:


error=input('请输入误差:');


x=1;


y=0;


n=1;


while x>error


    y=y+1;


    x=x/n;


    n=n+1;


end


e=y


运行如下:


请输入误差:0.001


e =


    2.7181


3.IF-ELSE-END 结构


    很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻辑由某种If-Else-End结构来提供。最简单的If-Else-End结构是:


   if  表达式1


       语句1


   end


    如果在表达式1中的所有元素为真(非零),那么就执行if和end语言之间的语句1。


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


    if  表达式1


        语句1


     else


        语句2


     end


在这里,如果表达式1为真,则执行语句1;如果表达式是假,则执行语句2。


    当有三个或更多的选择时,If-Else-End结构采用形式


     if 表达式1


        语句1


     elseif 表达式2


        语句2


     elseif 表达式3


        语句3


     elseif 表达式4


        语句4


     elseif ……


            .


            .


            .


     else


         语句


     end


    如果表达式1为真,则执行语句1,结束循环;如果表达式1为假,则检验表达式2,如果表达式2为真,则执行语句2,结束循环;如果表达式2为假,则检验表达式3,如此下去,如果所有表达式都为假时,则执行最后的语句。即只执行第一个真值表达式相关的语句;接下来的表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。


4.switch-case-end结构


    如果在一个程序中,必须针对某个变量不同取值情况进行相应操作,switch语句比if else语句更方便。switch语句的一般形式为:


    switch 分支条件(数值或字符串)


    case  数值(或字符串)条件1


          语句1


    case  数值(或字符串)条件2


          语句2


    case  数值(或字符串)条件3


          语句3


    case  ...


          ...


    otherwise


          语句


    end


其中分支条件可以是一个函数、变量或者表达式.如果条件1与分支条件匹配就执行语句1,退出循环;否则,检验条件2,如果条件2与分支条件匹配执行语句2,退出循环;否则,检验条件3,...,当所有条件都不与分支条件匹配时就执行最后的语句。注意otherwise是可以省略的。


    例4 在图形界面上放置一个弹出式菜,点击弹出式菜单可以设置曲线颜色。


    解:程序如下:


x=linspace(-6,6,50);


y=sin(x);


h=plot(x,y,'linewidth',4);


h0=uicontrol('position',[600,500,100,30],...


    'style','popupmenu',...


    'string','红色|蓝色|黄色|黑色|青色',...


    'callback',...


    ['v=get(h0,''value'');',...


        'switch v;',...


        'case 1;',...


        'set(h,''color'',''r'');',...


        'case 2;',...


        'set(h,''color'',''b'');',...


        'case 3;',...


        'set(h,''color'',''y'');',...


        'case 4;',...


        'set(h,''color'',''k'');',...


        'case 5;',...


        'set(h,''color'',''c'');',...


        'end;']);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值