第三讲 程序设计准备知识 一、程序编辑器
程序编辑器界面 在MATLAB命令窗口单击“新建”按钮,就可打开MATLAB程序编辑器,在此可建立和编辑M文件。
程序编辑 M文件:命令文件和函数文件 1.M文件的建立 1)进入程序编辑器(MATLAB Editor/Debug) 2)输入程序 3)保存程序
2.命令M文件及其运行 命令M文件:一些命令行的组合。 例如:% 文件名ex1.m x=4;y=6;z=2; items=x+y+z cost=x*25+y*22+z*99 average_cost=cost/items 1)在程序编辑窗口输入, 以名为ex1.m的M文 件存磁盘 2)在MATLAB命令编辑窗口键入ex1,便会顺序执行该文件中的命令。
3. 函数M文件及其调用 函数M文件的形式为 function [输出变量列表]=函数名(输入变量列表) 函数体语句; 例如: function f=f1(x) f=100*(x(2)-x(1)^2)^2-(1-x(1))^2; 调用格式: x=[2 3]; f=f1(x) 结果为:f = 99
又如: function [F,G]=f2(x) F=x(1,1)+x(1,2)+x(2,1)+x(2,2); G=[x(1,1)+5*x(2,1)-5 2*x(1,1)^2-x(2,1); -x(1,1) -x(2,2)]; 调用格式: x =1 2 1 1 [F1,G1]=f2(x)
结果为:F = 5 G = 1 1 -1 -1 ans = 5 无输出参数时,如: function printresults(x) 或 function [ ]=printresults(x)
M文件 在命令窗口进入程序编辑器输入、保存M文件,然后在命令窗口键入你建立的 M文件的文件名即可逐次执行其中的命令。 保存按钮
循环选择控制结构 关系运算符: <, >, <=, >=, = =(等于),~=(不等于) 关系运算比较两个数值,当给出的关系式成立时,结果为1(表示真),否则为0(表示假)。 逻辑运算符: &(与运算), |(或运算),~(非运算) 返 回
while循环 While循环的一般形式为: while 关系表达式 {statments} end 如: s=0;n=1 Yes No 如: s=0;n=1 while n<=100 s=s+n; n=n+1; end n,s
for循环 For循环的一般形式 for x=x1:step:xn {statments} end 如, for k=1:4 No x<=xn For循环的一般形式 for x=x1:step:xn {statments} end Yes statments x=x+step 如, for k=1:4 x(k)=1/k; end format rat %设置输出格式为有理数 x End的后续语句
for循环 for循环 建立一个函数M文件求自然数n的阶乘 function f=jiecheng(n) f=1; for i=1:n f=f*i; end 注:循环可以嵌套,即循环体内又包含另一个完整的循环结构,内嵌的循环中还可以嵌套循环,形成多层循环。 返 回
if-else-end结构 最简单的形式: if 关系表达式 {statments} end No Yes statments
当有三个或更多的选择时: if 关系表达式(1) {statments}(1) elseif 关系表达式(2) {statments}(2) ... elseif 关系表达式(n) {statments}(n) else {statments}(n+1) end 例如,可用以下程序得到符号函数。 function y=SIGN(x) if x<0 y=-1; elseif x==0 y=0; else y=1; end
if-else-end结构 if-else-end结构 ‡ 已知任意两个多项式(不一定同阶)的系数,求两个多项式的和。
if-else-end结构 function f=sumpoly(p1,p2) n=abs(length(p1)-length(p2)); if length(p1)<length(p2) p12=[zeros(1,n),p1]; p22=p2; elseif length(p1)>length(p2) p22=[zeros(1,n),p2]; p12=p1; Else p12=p1;p22=p2 end f=p12+p22; 返 回
switch-case-end多分支选择结构 switch lower(NAME) case {'zhanghua', 'lijiang'}, disp( 'He comes from China.') case 'peter', disp( 'He comes from United States.') case 'monika', disp( 'She comes from Germany') otherwise, disp( 'He or she comes from other... countries.') end
一般形式 switch 表达式(标量或字符串) case 值1, 语句体1 case {值2.1,值2.2, ...} 语句体2 ... otherwise, 语句体n end
‡ 运输公司计算运费是,距离(s)越远,每公里运费越低。标准如下表,编写一个求折扣的M文件函数。 里程(km) 折扣 S<250 0
function g=zhekoul(s) if s<250 g=0; elseif s<500 g=0.02; elseif s<1000 g=0.05; elseif s<2000 g=0.08; elseif s<3000 g=0.1; else g=0.15; end
switch-case-end多分支选择结构 function g=zhekou1(s) switch fix(s/250) case {0} g=0; case {1} g=0.02; case {2,3} g=0.05; case {4,5,6,7} g=0.08; case {8,9,10,11} g=0.1; otherwise g=0.15; end 返 回
程序流控制语句 在许多程序设计语言中,经常要碰到提前终止循环、跳出子程序、显示出错信息等,此时就要用到控制流的命令。在MATLAB中,同样会有这样的程序控制命令,MATLAB中有以下几个 1。continue 命令
continue经常与for或while语句一起使用。其作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着执行下一次是否循环的判断。 例:把100~200之间的不能被3整除的数输出
for i=100:200 if i/3-round(i/3)==0 continue; else i end 分析:当i能被3整除时i/3-round(i/3)值为0,当if的表达式值为真时执行continue,结束本次循环,即执行I自动加1,当i不能被3整除时,表达式值为假,则执行else,输出i。
2。break命令 break也经常与for或while语句一起使用。其作用是终止本次循环,跳出最层的循环,使用break命令可以不必等到循环自然结束,而是根据条件,退出循环。 例:求出半径从1到20的圆面积,直到面积大于100为止。
程序如下: for r=1:20 area=pi*r*r; if area>100 break else area end