正文

MATLAB编程入门(一)2007-06-30 14:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/emath/27223.html

分享到:

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

阅读(6808) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册