MATLAB程序设计基础课件.ppt
《MATLAB程序设计基础课件.ppt》由会员分享,可在线阅读,更多相关《MATLAB程序设计基础课件.ppt(61页珍藏版)》请在三一办公上搜索。
1、MATLAB程序设计基础,程序设计,MATLAB程序设计基础程序设计,M文件 两种形式:命令形式(Script) 函数形式(Function) 命令式M文件在运行过程中可以调用MATLAB工作域内所有的数据,而且,所产生的所有变量均为全局变量,直到用户执行clear命令清除;函数式文件中所有变量除特殊声明,均为局部变量。,M文件,命令式M文件 提示: 标点符号要运用恰当; 注意程序的书写风格,保持程序的可读性; 要以m为文件扩展名,在低版本的matlab中,文件名要符合8.3格式。,命令式M文件,函数式M文件 function 返回变量列表=函数名(输入变量列表) 注释说明语句段 函数体 提示
2、:第一行为function语句; function后定义函数名和输入输出参数,函数被调用时按此格式执行;文件名必须与函数名一一对应;函数执行完后,只保留返回结果,不保留中间过程;,函数式M文件,例:function f=fibfun(n)%FIBFUN for calculating fibonacci numbers.%Incidengtally, the name fibonacci comes from%Filius Bonassi, or son of Bonassus%fibfun.mif n2 f=fibfun(n-1)+fibfun(n-2);else f=1;end,例:,?h
3、elp fibfun FIBFUN for calculating fibonacci numbers. Incidengtally, the name fibonacci comes from Filius Bonassi, or son of Bonassus fibfun.m?lookfor fibFIBFUN for calculating fibonacci numbers.注:为了利用MATLAB的关键字搜索功能,应该在M文件的第一行注释中,尽可能多的包含函数的特征信息。,?help fibfun,控制语句,循环语句 有两种方式:for循环和while循环 for循环 for 循环
4、变量=s1:s3:s2 循环体语句组 end说明: for 语句一定要有end结束标志; 循环语句中要用“;”防止中间结果的输出; 书写时采用锯齿结构以增加可读性;,控制语句循环语句,例:求 mysum=0; for i=1:1:100 mysum=mysum+i; end; mysum,求取s1的值i,i在s1和s2之间?,循环体语句组,i+s3-i,是,否,结束循环,例:求求取s1的值ii在s1和s2之间?循环体语句组i+,for 循环的一般形式 for v=vect statements end vect为任意给定的向量,则循环变量从向量的第一个数值一直循环到最后一个数值。 例1(见前例
5、): mysum=0; v=1:100; for i=v;mysum=mysum+i;end mysum,例2:x=; for i=Hello, x=i x; end, x,for 循环的一般形式例2:,while循环 while 逻辑变量 循环体语句组 end例(见前例): mysum=0;i=1; while (i=100) mysum=mysum+i; i=i+1; end mysum,条件为真?,循环体语句,是,否,结束循环,while循环条件为真?循环体语句是否结束,条件转移结构 if 逻辑变量 条件语句组 end例: mysum=0; for m=1:1000 if (mysum1
6、0000), break; end mysum=mysum+m; end m, mysum,条件转移结构,if 条件式 条件块语句组1 else 条件块语句组2 end,条件语句组,语句组1,语句组2,是,否,if 条件式条件语句组语句组1语句组2是否,例:多项式加 p1=1 5 4; p2=1 6 11 6; n1=length(p1); n2=length(p2); if n1n2,p1=zeros(1,n2-n1) p1; elsep2=zeros(1,n1-n2) p2; end psum=p1+p2 psum = 1 7 16 10,例:多项式加,if 条件式1 条件块语句组1 el
7、seif 条件式2 条件块语句组2 else 条件块语句组n+1 end,条件1,语句组1,条件2,是,语句组2,是,否,条件n,语句组n,语句组n+1,否,否,是,if 条件式1条件1语句组1条件2是语句组2是否条件n语,分支语句 switch 开关表达式 case 表达式1 语句段1 case 表达式2,表达式3,表达式m 语句段2 otherwise 语句段n end,分支语句,注意:无需像C语言那样在下一个case语句前加break语句;当需要在开关表达式满足若干个表达式之一时,用单元结构来表示; otherwise等价于C语言的default语句;程序的执行结果与case语句的次序无
8、关。,注意:,试探式语句 try 语句段1 catch语句段2 end 首先试探性的执行语句段1,如果在执行过程中出现错误,则将错误信息赋给lasterr变量,并放弃该段语句,转而执行语句段2中的语句。,试探式语句,function c=testtry(a,b) try c=a+b; catch c=strcat(a,b); end,function c=testtry(a,b),人机交互语句,echo语句 echo on 打开命令式文件的回应命令; echo off 关闭回应命令; echo file on 使file文件的命令在执行中被显示; echo file off 关闭file文件的
9、命令执行中的回应; echo on all 显示所有执行文件的执行过程; echo off all 关闭所有执行文件的回应显示;,人机交互语句 echo语句,用户输入提示命令 input 用来提示用户从键盘输入数据、字符串或表达式,并接收输入值。,?r=input(How many apples:)How many apples:2r = 2,?r=input(Whats your name?,s)Whats your name?Gundamr =Gundam,用户输入提示命令?r=input(How many app,yesinput 智能输入命令 answer=yesinput(quest
10、ion,default,possib) question为屏幕提示问题,default为默认值,possib为检验范围。,yesinput 智能输入命令,keyboard 暂停执行程序并等待键盘输入状态,处理完毕后,键入return并回车,程序将继续运行,通常用来对程序调试及在程序中修改变量。 pause pause暂停程序,等待回应; pause(n)等待n秒后继续执行; pause on显示并执行pause命令; pause off显示但不执行pause命令。,keyboard,中断命令 break 用在循环语句或条件语句中,使得不必等待循环的自然结束。例:鸡兔同笼,头有36,脚共100,
11、求鸡兔各多少?,i=1;while i if rem(100-i*2,4)=0endchicken=irabit=(100-2*i)/4,中断命令 breaki=1;,函数变量,nargin 函数输入变量的个数 例:编制函数test1实现如下功能:如果只提供一个输入变量,则求该输入变量的模,如果有两个输入变量则求它们的和。,function c=test1(a,b)if(nargin=1) c=det(a);elseif (nargin=2) c=a+b;end,函数变量 nargin 函数输入变量的个数function,varargin 可以实现不定数目的输入变量的函数,函数的一切输入变量均
12、存储在单元数组varargin中。与之相对应,输出变量也有相应的函数,如:nargout、varargout等。,varargin,变量作用域,函数内部定义的变量均为局部变量,如果需要使用全局变量,则应当使用命令global定义,并且在任何使用该全局变量的函数中都应加以定义。定义全局变量时,变量之间必须用空格分隔,不能以逗号分隔。,变量作用域函数内部定义的变量均为局部变量,如果需要使用全局变,function num1,num2,num3=test3(varargin)global firstlevel secondlevelnum1=0;num2=0;num3=0;list=zeros(na
13、rgin);for i=1:nargin list(i)=sum(varargini(:); list(i)=list(i)/length(varargini); if list(i)firstlevel num1=num1+1; elseif list(i)secondlevel num2=num2+1; else num3=num3+1; endend,?global firstlevel secondlevel?firstlevel=85;?secondlevel=75;?a,b,c=test3(90,89,60,79,89,60,99,98,100)a = 1b = 2c = 0,fu
14、nction num1,num2,num3=test,子函数与局部函数,函数文件中题头定义的函数为主函数,在函数体内定义的其他函数即为子函数。子函数只能为主函数或同一主函数下其他的子函数所调用。function c=test(a,b)%main functionc=test1(a,b)*test2(a,b);function c=test1(a,b)%sub functionc=a+b;function c=test2(a,b)%sub functionc=a-b;,子函数与局部函数函数文件中题头定义的函数为主函数,在函数体内,放置于目录private下的函数称为局部函数,这些函数只有priv
15、ate目录的父目录中的函数才可以调用,其他目录的函数不能调用。局部函数与一般函数文件的编辑相同。MATLAB在调用函数时,首先检测该函数是否为此文件的子函数;如果不是,再检测是否为可用的局部函数;如果仍不是,则检测MATLAB搜索路径中其他的M文件。,放置于目录private下的函数称为局部函数,这些函数只有p,程序设计的辅助函数,执行函数 y1,y2,yn=feval(function,x1,x2,xn) 以函数名为输入变量的函数。 evalin(workspacename,expression) 对指定工作空间workspacename中的变量进行操作,计算表达式expression的值。
16、,程序设计的辅助函数执行函数,容错函数 error(错误信息) 触发函数error时,中断程序的运行,显示错误信息。 warning用法类似, 但不会中断程序。,function c=testerror(a,b)flag=0;if ischar(a)end,容错函数function c=testerror(a,b),时间控制函数 日期表达形式: dd-mmm-yyyy mm/dd/yy mm/dd 12-Oct-2003 10/12/03 10/12 时间表达形式: HH:MM:SS HH:MM:SS PM,时间控制函数,cputime的调用: t=cputime; 程序段; t=cputim
17、e-t; 显示该程序段运行所占用的CPU时间。,cputime的调用:,tic、toc的调用方法 tic; 程序段; toc; 显示运行该程序段所需的时间。etime(time2,time1) 计算两时刻的时间差。,tic、toc的调用方法,程序设计优化,以矩阵为操作主体 以向量运算代替循环运算,提倡矩阵操作?tic;x=1;for i=1:1000,y(i)=sin(x);x=x+0.1*pi;end,tocelapsed_time = 0.0500?tic;x=1:0.1*pi:1000*pi;y=sin(x);tocelapsed_time = 0.0100,程序设计优化以矩阵为操作主体
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 程序设计 基础 课件
链接地址:https://www.31ppt.com/p-1286357.html