第四章MATLAB程序设计_第1页
第四章MATLAB程序设计_第2页
第四章MATLAB程序设计_第3页
第四章MATLAB程序设计_第4页
第四章MATLAB程序设计_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MATLAB,及其在理工课程中,的应用指南,1,、数据的输入输出,2,、选择结构,3,、循环结构,4,、函数文件,5,、全局变量和局部变量,6,、,M,文件,CH4,、,MATLAB,程序设计,本章简介,?,了解,MATLAB,的程序设计语句,?,熟悉数据的输入输出,?,熟悉选择结构、循环结构以及函数文件的建立和调用,?,重点掌握,if/switch,,,for/while,,,function,命令,第一节,数据的输入输出,调用格式为:,A=input(,提示信息,选项,),;,?,提示信息:为,字符串,作为提示符,提示用户输入,等,待使用者输入一个响应,然后把它赋值到,A,?,选项:无,默

2、认输入为数值;,用,s,,则允许用户输入一个字符串;,无,输入,字符,时要把字符放在,内。,1.1 input,函数,a=input(What is your name?,nname=);,a=input(What is your name?,nname=,s);,实例分析,echo on/off,:控制是否在屏幕上显示程序内容,例,4.1,用,input,命令输入一个人的姓名,1.2,pause,函数,其调用格式为:,pause(,延迟秒数,),?,将使程序暂停,n,秒;,?,如果省略延迟时间,直接使用,pause,,则将暂停程序,直,到用户按任一键后程序继续执行;,?,若要强行中止程序的运

3、行可使用,Ctrl+C,命令。,第一节,数据的输入输出,1.3 keyboard,函数,其调用格式为:,keyboard,?,停止程序执行,把控制权交,给键盘。输入,return,并回车,后继续程序执行;,?,提示符前面显示,k,,即由,变为,K,;,第一节,数据的输入输出,1.4 disp,函数,调用格式为,disp(,输出项,),其中输出项既可以为字符串,也可以为矩阵。,注意:,用,disp,函数显示矩阵时将不显示矩阵的名字,而且其,格式更紧密,且不留任何没有意义的空行。,如:,disp(Wang Fang),disp(1, 2; 3, 4),第一节,数据的输入输出,1.5 fprintf

4、,函数,调用格式为,COUNT=fprintf(FID, FORMAT, A, .),第一节,数据的输入输出,Format: Character Description,b Backspace,n New line,t Horizontal tab,% Percent character,A: conversion characters d, f, s , c, ,x = 0:.1:1; y = x; exp(x);,fid = fopen(exp.txt,w); %,只写,fprintf(fid,%6.2f .8fn,y);,fclose(fid);,type exp.txt,fprintf

5、(%sn, 123);,实例分析,例,4.2,文件输出,1.6 sprintf,函数,调用格式为,s,errmsg=,sprintf(format,A,.),按格式生成字符串,第一节,数据的输入输出,format, A-,同,fprintf,(),程序设计结构,顺序结构,选择结构,循环结构,程序设计,顺序结构,a=input(a=);,b=input(b=);,c=input(c=);,d=b*b-4*a*c;,x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a);,disp(x1=, num2str(x(1),x2=, num2str(x(2);, a=1,2,1;,

6、roots(a), poly2sym(a),实例分析,例,4.3,求一元二次方程,ax,2,+bx+c=0,的根?,第二节,选择结构,在,MATLAB,中,,if,语句有,三,种格式,1,、单分支,if,语句,语句格式为:,if,条件,语句组,end,2.1 if,语句,当逻辑表达式的值为真时,执行该结,构中的执行语句,执行完之后继续向,下进行;若为假,则跳过结构中的内,容,向下执行。,例,4.4,当,x,是整数矩阵时,输出,x,的值。,实例分析,(,提示:运用所学分析如何判断是整数,),2,、双分支,if,语句,语句格式为:,if,条件,语句组,1,else,语句组,2,end,第二节,选择

7、结构,if-else,的执行方式为:如果逻辑表达式的值,为真,则执行语句,1,,然后跳过语句,2,,向下,执行;如果为假,则执行语句,2,,然后向下,执行。,例,4.5,计算分段函数值,2,cos(,1),1 x=10,x,10,x,x,y,x,x,x,?,?,?,?,?,?,?,?,?,?,?,?,x=input(,请输入,x,的值:,x=);,if x=10,y=cos(x+1)+sqrt(x*x+1);,else,y=x*sqrt(x+sqrt(x);,end,y,实例分析,程序,1,:,程序,2,:,x=input(,输入,x=);,if x=10,u=cos(x+1);,v= sqr

8、t(x*x+1);,y=u+v,end,if x=10,y=x*sqrt(x+sqrt(x),end,x=input(,输入,x=);,y=cos(x+1)+sqrt(x*x+1);,if x=10,y=x*sqrt(x+sqrt(x);,end,y,实例分析,程序,3,:,3,、多分支,if,语句,if,条件,1,语句组,1,elseif,条件,2,语句组,2,elseif,条件,m,语句组,m,else,语句组,m+1,end,第二节,选择结构,if-elseif,的执行方式为:如果逻辑表达式,1,的值为真,则执行语句,1,;如果为假,则判,断逻辑表达式,2,,如果为真,则执行语句,2,,

9、,否则向下执行。,例,4.6,计算分段函数的数值,2,3,2,1,1,0,1,1,1,x,x,y,x,x,x,?,?,?,?,?,?,?,?,?,?,?,?,?, x=input(,请输入,x=,);, if x=1,y=2*x.2+1;,elseif,-1x,else,y=-x.3;,end, x=input(,请输入,x=,);, if x=1,y=2*x.2+1;,else if,-1x,else,y=-x.3;,end,end,实例分析,c=input(,请输入一个字符,=,s);,if c=A %setstr,等同,char,elseif c=a,elseif c=0,else,di

10、sp(c);,end,实例分析,例,4.7,输入一个字符,若为大写字母,则输出其后继字符;若,为小写字母,则输出其前导字符;若为数字字符,则输出其对,应的数值;若为其他字符则原样输出。,2.2 switch,语句,其语句格式为:,switch,表达式,case,表达式,1,语句组,1,case,表达式,2,语句组,2,case,表达式,m,语句组,m,otherwise,语句组,m+1,end,第二节,选择结构,执行方式:表达式的值和哪种情况,(case),的值相同,就执行哪种情况中的语句;如,果不同,则执行,otherwise,中的语句;格式,中也可以不包括,otherwise,,这时如果表

11、达,式的值与列出的各种情况都不相同,则继,续向下执行。,例,4.8,某商场对顾客所购买的商品实行打折销售,已知打折标,准,求所售商品的实际销售价格。,商品价格用,price,来表示:,price200,没有折扣,200price500 3%,折扣,500price1000 5%,折扣,1000price2500 8%,折扣,2500price5000 10%,折扣,5000price 14%,折扣,输入所售商品的价格,求其实际销售价格。,实例分析,price=input(,请输入商品价格,=);,switch fix(price/100),case 0,1,%,价格小于,200,rate=0;

12、,case 2,3,4,%,价格大于等于,200,但小于,500,rate=3/100;,case num2cell(5:9),%,价格大于等于,500,但小于,1000,rate=5/100;,case num2cell(10:24),%,价格大于等于,1000,但小于,2500,rate=8/100;,case num2cell(25:49),%,价格大于等于,2500,但小于,5000,rate=10/100;,otherwise,%,价格大于等于,5000,rate=14/100;,end,price=price*(1-rate),%,输出商品实际销售价格,实例分析,2.3,try,语

13、句,语句格式为:,try,语句组,1,catch,语句组,2,end,try,语句试探性执行语句组。这种试探性执行语句是其,他高级语言所没有的。,第二节,选择结构,例,4.9,矩阵乘法运算要求两矩阵的维数相容,否则会出错。先,求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。,A=1,2,3;4,5,6; B=7,8,9;10,11,12;,try,C=A*B;,catch,C=A.*B;,end,C,lasterr,%,显示最后一个出错信息,实例分析,语句格式为:,for,循环变量,=,表达,式,1:,表达式,2:,表达,式,3,循环体语句,end,第三节,循环结构,3.1 for,语句,?

14、,步长缺省值为,1,,可以在正实数或负实数范围内任意指定。,对于正数,循环变量的值大于终止值时,循环结束;对于负,数,循环变量的值小于终止值时,循环结束。循环结构可以,嵌套使用。,?,书写格式不必太过于拘泥,在,Editor,编辑器中会自动进行处,理。,for,循环变量起始值:步长:终止值,循环体,end,第三节,循环结构,例,4.10,已知,,当,n=100,时,求,y,的值。,在实际,MATLAB,编程中,为提,高程序的执行速度,常用向量,运算来代替循环操作:,n=100;,i=1:n;,f=1./i.2;,y=sum(f),y=0;,n=100;,for i=1:n,y=y+1/i/i;

15、,end,y,?,?,?,n,i,i,y,1,2,1,实例分析,0.5,sin(,),6,x,y,e,x,?,?,?,?,例,4.11,求,定积分。,实例分析,a=0;b=3*pi;,n=1000,; h=(b-a)/n;,x=a:h:b; f=exp(-0.5*x).*sin(x+pi/6);,for i=1:n,s(i)= (f(i)+f(i+1)*h/2;,end,s=sum(s),可直接调用函数,trapz(),,求数值积分!,实例分析,for,语句更一般的格式:,for,循环变量,=,矩阵表达式,循环体语句,end,执行过程是依次将矩阵的,各列元素,赋给循环变量,然后,执行循环体语句

16、,直至各列元素处理完毕。实际上,,“表达式,1:,表达式,2:,表达式,3”,是一个仅为一行的矩阵,(,行,向量,),,因而,列向量,是单个数据。,第三节,循环结构,例,4.12,已知,5,个学生,4,门功课的成绩,求每名学生的总成绩。,s=0;,a=65,76,56,78;98,83,74,85; .,76,67,78,79;98,58,42,73; .,67,89,76,87;,for k=a,s=s+k;,end,disp(s);,实例分析,3.2,while,语句,while,语句的一般格式为:,while (,条件,),循环体语句,end,其执行过程为:若条件成立,则执行循环体语句,

17、执行后,再判断条件是否成立,如果不成立则跳出循环体,向下继,续执行。,第三节,循环结构,while,循环和,for,循环的区别:,while,循环结构的循环体被执行的,次数不是确定的,而,for,结构中循环体的执行次数是确定的。,例,4.13,求,a=1+2+100,,,b=1/i (i=110), sum=0;, i=0;, while(i=100),sum=sum+i;,i=i+1;,end, sum,sum =,5050, for I=1:10,A(I)=1/(I+1) ;,end, A,实例分析,其它与流程控制有关的语句,break,语句,循环结构,continue,语句,循环结构,第

18、三节,循环结构,第三节,循环结构,break,语句,:导致包含该指令的循环强制终止,即跳,出所在的一级循环。该语句一般与,if,语句配合使用,continue,语句,:跳过位于其后的其它指令,执行循环,的下一次迭代循环,y=0; i=1;,while 1,%,逻辑真,f=1/i/i;,y=y+f;,if i=100,break;,end,i=i+1;,end,y,例,4.14,用,while,语句实现求,a=1+1/2,2,+1/100,2,向量运算来代替循环操作,n=100;,i=1:n;,f=1./i.2;,y=sum(f),%sum(),求和函数,实例分析,例,4.15,求,100, 2

19、00,之间第一个能被,21,整除的整数。,for n=100:200,if rem(n,21)=0,continue,end,break,end,n,实例分析,3.3,循环的嵌套,?,如果一个循环结构的循环体又包括一个循环结构,,称为,循环的嵌套,(多重循环结构),?,处于内部的循环叫作,内循环,;,处于外部的循环叫作,外循环,。,?,在设计多重循环时,要特别注意内、外循环之间的,关系,以及各语句放置的位置。,第三节,循环结构,例,4.16,若一个数等于它的各个真因子之和,则称该数为完数,,如,6=1+2+3,,所以,6,是完数。求,1,500,之间的全部完数。,for m=1:500,s=0

20、;,for k=1:m/2,if rem(m,k)=0,s=s+k;,end,end,if m=s,disp(m);,end,end,实例分析,m=input(m=);,p=2:m;,for i=2:sqrt(m),n=find(rem(p,i)=0,p(n)=;,end,p,实例分析,例,4.17,用筛选法求某自然数范围内的全部,素数,。,一个数,如果只,有,1,和它本身两,个因数,这样的,数叫做,质数,,又,称,素数,第四节,函数文件,function,输出形参表,=,函数名,(,输入形参表,),注释说明部分,函数体语句,4.1,函数文件的基本结构,注意:当形参表多于,1,个时,需要中括号

21、,如:,m,n=size(A),说,明:,(1),函数文件名。当函数文件名与函数名不同时,,MATLAB,将忽略函数名而确认函数文件名,因此调用时使用函数文,件名;,(2),注释说明部分。注释说明包括三部分内容:,函数文件引导行之后以,%,开头的第一注释行;,第一注释行及之后连续的注释行;,与在线帮助文本相隔一空行的注释行。,(3) return,语句。执行到该语句就结束函数的执行,程序流,程转至调用该函数的位置。如不使用,return,语句,被调函,数完成后将自动返回。,第四节,函数文件,例,4.18,计算第,n,个,Fibonnaci,斐波纳契数,(,一种整数数列,每,数等于前面两数之和,

22、a,k+2,=a,k,+a,k+1,,且,a,1,=a,2,=1),function f=fibfun(n) %n-,函数输入;,f-,函数输出;,fibfun-,函数名,% FIBFUN For calculating Fibonacci numbers.,% Incidengtally, the name fibonacci comes from,% Filius Bonassi, or “son of Bonassus”,% fibfun.m,if n2,f=fibfun(n-1)+fibfun(n-2);,else,f=1;,end,注意,:文件名必须与函数名相同,执行:,fibfun

23、(17), help fibfun, lookfor fibfun,函数定义行,函数帮助行,在线函数帮助文件,函数体,实例分析,函数调用的一般格式是:,输出实参表,=,函数名,(,输入实参表,),echo on,指令,显示执行指令;,echo off,指令,关闭指令显示。,4.2,函数调用,第四节,函数文件,调用,tran.m,的命令文件:,main1.m,:,x=input(Please input x=:);,y=input(Please input y=:);,rho,the=tran(x,y);,rho,the,例,4.19,利用函数文件,实现直角坐标,(,x,y,),与极坐标,(,)

24、,之,间的转换。,函数文件,tran.m,:,function rho,theta=tran(x,y),rho=sqrt(x*x+y*y);,theta=atan(y/x);,实例分析,递归调用函数文件,factor.m,:,function f=factor(n),if n=1,f=1;,else,f=factor(n-1)*n;,end,实例分析,例,4.20,利用函数的递归调用,求,n,!,在命令文件,main2.m,中调用函数文件,factor.m,求,s=1!+2!+3!+4!+5!,。,4.3,函数所传递参数的可调性,在调用函数时,,MATLAB,用两个永久变量,nargin,和,

25、nargout,分别记录调用该函数时的输入,实参和输出实参的个数。,只要在函数文件中包含这两个变量,就可以,准确地知道该函数文件被调用时的输入输出参,数个数,从而决定函数如何进行处理。,第四节,函数文件,例,4.21,nargin,用法示例,函数文件,examp.m,:,function fout= examp(a,b,c),if nargin=1,fout=a;,elseif nargin=2,fout=a+b;,elseif nargin=3,fout=(a*b*c)/2;,end,命令文件,mydemo.m,:,x=1:3;y=1;2;3;,examp(x),examp(x,y),exa

26、mp(x,y,3),实例分析,4.4,全局变量和局部变量,全局变量用,global,命令定义,格式为:,global,变量名,第四节,函数文件,function f=wadd(x,y),global ALPHA BETA,f=ALPHA*x+BETA*y;,在命令窗口中输入:,global ALPHA BETA,ALPHA=1;,BETA=2;,s=wadd(1,2),例,4.22,全局变量应用,实例分析,先建立函数文件,wadd.m,,该函数将输入的参数加权相加。,4.5,M,文件,一、,M,文件的建立与编辑,1.,建立新的,M,文件,(1),菜单操作,:,MATLAB,命令窗口的,File

27、,菜单,New,菜单项,M-file,命令。,(2),命令操作,:在,MATLAB,命令窗口输入命令,edit,。,(3),命令按钮操作,:单击,MATLAB,命令窗口工具栏上,的“新建”命令按钮。,2.,编辑已有的,M,文件,第四节,函数文件,二、,M,文件的分类,分,类:,命令文件,(Script File,主程序,),函数文件,(Function File,子程序,),主要区别,:,?,命令文件的变量为,全局变量,,在文件执行完程序后仍然,保留在内存中;,?,而函数文件内定义的变量为,内部变量,,仅在函数文件内,部起作用,第四节,函数文件,1.,命令式文件,?,如果要输入较多的命令,或命

28、令重复输入,利用,命令文件将显得比较,简单方便,;,?,建立命令文件的方法很简单,就是将要输入的所,有指令按顺序放到一个扩展名为,“,.m”,的文本文件,中,每次运行时只要输入,M,文件的文件名即可;,?,在命令文件运行过程中产生的所有变量均是,全局,变量,。,第四节,函数文件,例,4.23,建立一个命令文件将变量,a,b,的值互换,然后运行,该命令文件。,首先建立命令文件并以文件名,exch.m,存盘:,clear;,a=1:10;,b=11,12,13,14;15,16,17,18;,c=a;a=b;b=c;,a,b,在命令窗口中输入,exch,,将会执行该命令文件。,实例分析,neckl

29、ace,echo on,t=(0:0.02:2)*pi;,x=sin(t);,y=cos(t);,z=cos(2*t);,plot3(x,y,z,b-,x,y,z,bd),view(-80,60),box on,legend(,链子,宝石,);,例,4.24,编一个画宝石项链的命令文件。,实例分析,存为文件,necklace.m,2.,函数文件,函数,M,文件通常由以下五部分组成:,?,函数定义行,?,函数帮助行,?,在线函数帮助文件,?,注释,?,函数体,第四节,函数文件,MATLAB,程序的基本设计原则,1,、后面的内容是程序的注解,要善于运用注解使程序,更具可读性;,2,、养成在主程序开

30、头用,clear,指令清除变量的习惯,以消,除工作空间中其他变量对程序运行的影响。但注意在子,程序中不要用,clear,;,3,、参数值要集中放在程序的开始部分,以便维护。要充,分利用,MATLAB,工具箱提供的指令来执行所要进行的运,算,在语句行之后输入分号使其及中间结果不在屏幕上,显示,以提高执行速度;,4,、,input,指令可以用来输入一些临时的数据;而对于大,量参数,则通过建立一个存储参数的子程序,在主程序,中用子程序的名称来调用;,5,、程序尽量模块化,也就是采用主程序调用子程序的,方法,将所有子程序合并在一起来执行全部的操作;,6,、充分利用,Debugger,来进行程序的调试(

31、设置断点、,单步执行、连续执行),并利用其他工具箱或图形用户,界面(,GUI,)的设计技巧,将设计结果集成到一起;,7,、设置好,MATLAB,的工作路径,以便程序运行。,MATLAB,程序的基本设计原则,8,、,MATLAB,程序的基本组成结构,说明,清除命令:清除,workspace,中的变量和图形(,clear,close,),定义变量:包括全局变量的声明及参数值的设定,逐行执行命令:指,MATLAB,提供的运算指令或工具箱, ,提供的专用命令,控制循环,:包含,for, if then, switch, while,等语句,逐行执行命令, ,end,绘图命令:将运算结果绘制出来,当然更

32、复杂程序还需要调用子程序,或与,simulink,以及其他应,用程序结合起来。,MATLAB,程序的基本设计原则,?,进入,MATLAB,的,Editor/Debugger,窗口来编辑程序,?,在编辑环境中,文字的不同颜色显示表明文字的不同属性。,绿色:注解,;,黑色:程序主体,;,红色:属性值的设定,;,蓝色:,控制流程,?,在运行程序之前,必须设置好,MATLAB,的工作路径,使得所,要运行的程序及运行程序所需要的其他文件处在当前目录之,下,只有这样,才可以使程序得以正常运行。否则可能导致,无法读取某些系统文件或数据,从而程序无法执行,?,通过,cd,指令在命令窗口中可以更改、显示当前工作

33、路径,?,通过路径浏览器(,path browser,)也可以进行设置,M,文件的编辑及,MATLAB,工作路径的设置,MATLAB,程序的基本设计原则,MATLAB,的程序类型,MATLAB,的程序类型有三种,一种是在命令窗,口下执行的脚本,M,文件;另外一种是可以存取,的,M,文件,也即程序文件;最后一种是函数,(,function,)文件。,MATLAB,程序的基本设计原则,2,、程序文件,?,以,.m,格式进行存取,包含一连串的,MATLAB,指令和必要的注,解。需要在工作空间中创建并获取变量,也就是说处理的数,据为命令窗口中的数据,没有输入参数,也不会返回参数。,?,程序运行时只需在

34、工作空间中键入其名称即可。,1,、脚本,M,文件,在命令窗口中输入并执行,它所用的变量都要在工作空间中获,取,不需要输入输出参数的调用,退出,MATLAB,后就释放了。,MATLAB,程序的基本设计原则,3,、函数文件,?,与在命令窗口中输入命令一样,函数接受输入参数,,然后执行并输出结果。用,help,命令可以显示它的注,释说明。,?,具有标准的基本结构。,MATLAB,程序的基本设计原则,(,1,)函数定义行(关键字,function,),?,functionout1,out2,.=filename(in1,in2,.),?,输入和输出(返回)的参数个数分别由,nargin,和,nargout,两个,MATLAB,保留的变量来给出。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论