44第3章MatLab程序设计本章学习的主要目的:1.熟炼掌握MatLab程序设计的顺序、分支和循环结构;2.熟炼掌握脚本M文件和自定义函数的设计和使用;3.1M文件的使用3.1.1M文件的运行操作步骤1启动MatLab2点击菜单File-New-M-file,进入文件编辑窗口3在文件编辑窗口输入M文件内容4以m为扩展名存盘,注意函数文件的文件名一定和函数名一样。5在命令窗口中输入脚本文件名,即可运行脚本M文件,函数文件的使用和内部函数的使用方法一样。3.1.2变量变量名是以字母开头,由字母、数字和下划线组成,最多31个字符,区分大小写字母。注:变量不需要任何类型的说明语句,当输入一个新的变量名时,MatLab会自动建立变量并为其分配内存空间。MatLab有几个特殊的量:pi圆周率;eps最小浮点数;Inf正无穷大,特指1/0;NaN不定值,特指0/0;i,j虚数单位。注为了防止除以0的运算,可如下处理:如x=(-3:3)/3;x=x+(x==0)*eps;sin(x)./x3.1.3语句形式一般赋值语句形式:变量=表达式若变量和“=”省略,则名为ans的变量自动建立;若输入一个语句并以回车结束,则在工作区中显示计算的结果;若语句以“;”结束,则只计算,不显示计算的结果。若表达式太长,可以用续行号…将其延续到下一行。一行中可以写几个语句,它们之间用逗号或分号分开。语句注释符为%。453.1.4控制循环语句1.for循环变量=初值:步长:终值循环体语句组end例1计算1到10的和脚本文件example1.ms=0;fori=1:10;s=s+i;end;s在命令窗口输入example1,运行结果:S=552.while(条件式)循环体语句组end例2Fibonacci数组的元素满足Fibonacci规则:12kkkaaa,),2,1(k;且121aa。求出该数组中第一个大于10000的元素。脚本文件example2.ma(1)=1;a(2)=1;i=2;whilea(i)=10000a(i+1)=a(i-1)+a(i);i=i+1;end;i,a(i),在命令窗口输入example2,运行结果:i=21ans=109463.1.5条件控制语句1if(条件式1)条件块语句组1elseif(条件式2)条件块语句组246else条件块语句组3end例3用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。脚本文件example3.mn=100;a=ones(1,n);fori=3:na(i)=a(i-1)+a(i-2);ifa(i)=10000a(i),break;end;end,i在命令窗口输入example3,运行结果:ans=10946i=212switch-case结构switch表达式case表达式1语句块1case表达式2语句块2otherwise语句块nend例4学生的成绩管理脚本文件example4.mmark=86;n=fix(mark/10);switchncase10Rank='满分'case9Rank='优秀'case847Rank='良好'case{6,7}Rank='及格'otherwiseRank='不及格'end在命令窗口输入example4,运行结果:Rank=良好3.1.6自定义函数function因变量=函数名(自变量)说明:M-文件的文件名必须是函数名.m。若有多个因变量用[]括起来。例5函数文件randint.mfunctiona=randint(m,n)%产生m×n随机整数矩阵a=floor(10*rand(m,n));使用方法:在工作区直接输入变量名=函数名(自变量组)在命令窗口输入x=randint(2,3)后运行结果:x=968247例60101x,,2,1)(32xxxxxxf设,求f(2),f(0.5),f(-1)先建立函数M文件fun.m定义函数f(x),再在MatLab命令窗口中输入fun(2),fun(0.5),fun(-1)。functionf=fun(x)ifx1f=x.^2+1elseifx=0f=x.^3elsef=2*xendend48例7求二元函数g(x,y)=4x+5y在(1,2)处的函数值。方法1建立函数M文件fun1.m定义函数g(x,y),再在MatLab命令窗口中输入fun1(1,2)functionz=fun1(x,y)%2个输入参数,z=4*x+5*y方法2建立函数M文件fun2.m定义函数g(x,y),再在MatLab命令窗口中输入fun2([1,2])functionz=fun1(x)%1个输入参数z=4*x(1)+5*x(2)3.1.7程序流控制break用于循环控制中,终止包含break语句的最内层的循环。return使当前正在运行的函数正常结束并返回调用它的函数继续运行,或返回到调用它的环境如命令窗口。error(’错误信息’)显示错误信息并终止当前函数的运行,并将控制返回到键盘。若错误信息是个空串,则error不起作用。3.2上机实验内容1已知函数21100x1,,1sin(x),1)(2xxxxxf-+,计算f(-0.5),f(0),f(1),并作出该函数的曲线图,说明x=1.5,x=0,x=1处的连续性和可导性。2定义二元函数f(x,y)=x3-y3+3x2+3y2-9x,并在区域-4x2,-1y3内作出该曲面的图形,计算该函数在驻点(1,0),(1,2),(-3,0),(-3,2)的取值,并在曲面上用’*’描出驻点,以不同的角度观察曲面图形,说明哪些驻点是极值点,若是极值点,是极大值还是极小值?3编写程序,按利润完成产品的排序,并按利润由大到小输出产品的序号。产品序号12345678产品成本8.2510.36.6812.0316.8517.519.310.65售价15.0016.259.918.2520.8024.1515.5018.254编写M文件,完成某班50名学生的高等数学考试成绩的统计工作,要求统计该班49最高分,最低分,计算平均分,及格率。3.3上机实验步骤1(1)在MatLab命令窗口中,点击菜单File-New-M-file,打开M文件编辑窗口输入程序如下:functiony=fun1(x)if(x=-1)&(x0)y=x+1;elseifx1y=sin(x)+1;elseifx=2y=x.*x;end(2)在M文件编辑窗口中,点击File-Save,在默认路径下存盘,文件名为fun1.m(3)在MatLab命令窗口中,输入fun1(-0.5)得f(-0.5)=fun1(0)得f(0)=fun1(1)得f(1)=(4)在MatLab命令窗口中,输入plot(0,fun1(0),'*',1,fun1(1),'*',1.5,fun1(1.5),'*')fplot(‘fun1’,[-1,2])%见图1由图像观察得各点的连续性和可导性:在=1.5处在x=0处在x=1处图12(1)在MatLab命令窗口中,点击菜单File-New-M-file,打开M文件编辑窗口输入程序如下:functionz=fun2(x)50z=x(1).^3-x(2).^3+3*x(1).^2+3*x(2).^2-9*x(1);end(2)在M文件编辑窗口中,点击File-Save,在默认路径下存盘,文件名为fun2.m(3)在MatLab命令窗口中,输入如下指令:fun2([1,0])得f(1,0)=,fun2([1,2])得f(1,2)=,fun2([-3,0])得f(-3,0)=,fun2([-3,2])得f(-3,2)=,holdoffclfx=-4:0.1:2;y=-1:0.1:3;[X,Y]=meshgrid(x,y);Z=X.^3-Y.^3+3*X.^2+3*Y.^2-9*X;mesh(X,Y,Z)%见图2holdon图2plot3(1,0,fun2([1,0]),'b*')在图形窗口用旋转工具,观察点(1,0)处取得极值的情况是,51plot3(1,2,fun2([1,2]),'r*')在图形窗口用旋转工具,观察点(1,2)处取得极值的情况是,plot3(-3,0,fun2([-3,0]),'m*')在图形窗口用旋转工具,观察点(-3,0)处取得极值的情况是,plot3(-3,2,fun2([-3,2]),'y*')在图形窗口用旋转工具,观察点(-3,2)处取得极值的情况是,3(1)在MatLab命令窗口中,点击菜单File-New-M-file,打开M文件编辑窗口输入程序如下:data(1,:)=1:8;data(2,:)=[8.2510.36.6812.0316.8517.519.310.65];data(3,:)=[15.0016.259.918.2520.8024.1515.5018.25];data(4,:)=data(3,:)-data(2,:);fori=1:7w=data(4,i);k=i;flag=0;forj=i+1:8ifwdata(4,j)w=data(4,j);k=j;flag=1;endendifflag==1data(:,[ik])=data(:,[ki]);endenddata(1,:)(2)在M文件编辑窗口中,点击File-Save,在默认路径下存盘,文件名为fun3.m(3)在命令窗口输入fun3%把产品按利润排序,输出排序后的产品序号为:4方法1(1)按“开始”-“程序”-“附件”-“记事本”,打开“记事本”,输入学生成绩,成绩之间用空格或逗号隔开。保存在MatLab目录/work下,文件名为student.txt52(2)在MatLab命令窗口中,点击菜单File-New-M-file,打开M文件编辑窗口输入程序如下:loadstudent.txt;%用文件的形式输入50个学生的成绩high_score=max(student)low_score=min(student)mean_score=mean(student)pass_no=length(student(student=60))pass_level=pass_no/length(student)(3)在M文件编辑窗口中,点击File-Save,在默认路径下存盘,文件名为fun4.m(4)在命令窗口输入fun4得该班最高分为,最低分为,平均分为,及格率为。方法2随机生成50个学生的成绩student=floor(rand(1,50)*100);