第4章MATLAB程序设计.ppt

上传人:夺命阿水 文档编号:259584 上传时间:2023-03-30 格式:PPT 页数:64 大小:810KB
返回 下载 相关 举报
第4章MATLAB程序设计.ppt_第1页
第1页 / 共64页
第4章MATLAB程序设计.ppt_第2页
第2页 / 共64页
第4章MATLAB程序设计.ppt_第3页
第3页 / 共64页
第4章MATLAB程序设计.ppt_第4页
第4页 / 共64页
第4章MATLAB程序设计.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《第4章MATLAB程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章MATLAB程序设计.ppt(64页珍藏版)》请在课桌文档上搜索。

1、第4章 MATLAB程序设计,本章内容,变量、表达式与数组运算操作符、关系及逻辑运算符程序结构及流程控制语句M源文件及调试M文件的加速执行,4.1 MATLAB的变量与表达式,1.变量的命名规则,变量名和函数名对字母的大小写敏感;变量名的第一个字符必须是一个英文字母,最多可包括31个字符;变量名可由英文字母、数字和下划线混合组成;变量名中不得包含空格和标点,但可以由下连字符,2.局部变量与全局变量,局部变量:函数体内定义的变量,不能从其它函数和MATLAB工作空间访问。全局变量:在几个函数和MATLAB工作空间中共同拥有,均可访问的变量。在函数体所有赋值语句之前进行说明,所有共享的函数均要说明

2、。说明语句:global 变量名变量值;,3.永久变量,MATLAB的预定义变量,不能用clear删除,不能用who命令查看,主要有:ans;eps;pi;i,j;inf;NaN;realmax;realmin等。,4.MATLAB的基本表达式,表达式变量=表达式,表达式由变量名、运算符、数字和函数组成;“”两侧可以有空格;分号的作用;多个返回结果用括起来;ans 的作用。例:x=(3*42+exp(sin(45)/6,4.2 字符串数组、单元数组和结构数组,1.数据结构,2.字符串数组,所有字符串都用单引号括起来;字符串中的每个字符都是字符串变量中的一个元素;字符串中的字符以ASCII码形式

3、存储并区分大小;,数组的建立:,直接赋值法:如 a=uestc;中文字符;单引号输入;字符串的连接:括号或命令strcat多行字符串数组的直接创建:长度相等。字符串与其它类型的转换:int2str,num2str,mat2str字符串数组元素的标识。,3.单元数组,数组的基本成分是单元,单元内可存放任何类型、任何大小的数组,且同一单元数组内各单元的内容可以不同。单元数组元素的标注:A(2,3)指二行三列的单元元素;A2,3指二行三列单元的内容;,单元数组的建立方法,1)赋值方法例:方法1 方法2A(1,1)=matlab;A1,1=matlab;A(1,2)=6.0;A1,2=6.0;A(2,

4、1)=矩阵;A2,1=矩阵;A(2,2)=1,2,3;4,5,6;7,8,9;A2,2=1,2,3;,2)单元数组方法例:A=matlab,6.0;矩阵,1,2,3;4,5,6;7,8,93)cell 命令方法A=cell(2);,单元数组的访问和显示,A1,1 A(1,1)ans=ans=matlab matlab,显示:celldisp:显示所有内容,一般的显示方法其矩阵只给大小。cellplot:显示图形(),例:cellplot(A),4.结构数组,和单元数组一样,可以存放不同数据类型于一个结构数组内,建立和访问都要通过结构名和域名格式为:结构数组名.域名例:student.name=

5、唐军;student.age=21;student.class=200304;则:student=name:唐军 age:21 class:200304 也可用函数struct建立:s=struct(field1,value1,field2,value2,.),4.3 MATLAB运算符与操作符,运算符:,操作符,4.3 关系运算与逻辑运算,1.关系运算,运算方式:标量与标量;标量与数组;数组与数组注:任何非零数被看作“1”!,A=3 4 8 9 0 2 5 3 7,B=4 4 1 7 8 4 5 1 7,E=(A=B)E=0 1 0 0 0 0 1 0 1,NE=(A=B)NE=1 0 1

6、1 1 1 0 1 0,A0=(A5)A0=0 0 1 1 0 0 0 0 1,2.逻辑运算&与|或 非,*运算方式:标量与标量;标量与数组;数组与数组。非的优先级高于与、或。,标量与标量a&b,当a、b全是非0时,运算结果为1,否则为0;a|b,当a、b中只要有一个非0,结果为1;a,当a是时,运算结果为,否则为,数组和数组 数组A、B比较的是相同位置的元素,按标量的运算规则逐个进行。运算结果是一个维数与A相同的数组。,标量和数组:标量b和数组A的每一个元素按标量关系运算规则逐个比较。运算结果是一个维数与数组A相同的数组,AB=A&BAB=1 1 1 1 0 1 1 1 1,A_B=A|BA

7、_B=1 1 1 1 1 1 1 1 1,C=AC=0 0 0 0 1 0 0 0 0,A=3 4 8 9 0 2 5 3 7,B=4 4 1 7 8 4 5 1 7,3.关系与逻辑函数,4.判断函数,函数见书。以find为例I=find(X)返回非零元素的位置标识向量。I,J=find(X)返回非零元素的位置标识矩阵。I,J,V=find(X)返回非零元素的位置标识矩阵及元素。例:4-8,A=0 4 8 9 0 2 5 3 7,find(A)ans=2 3 4 6 7 8 9,I,J,V=find(A)I=2 3 1 3 1 2 3,V=9 5 4 3 8 2 7,J=1 1 2 2 3 3

8、 3,A(find(A=0)=-5A=-5 4 8 9-5 2 5 3 7,运算优先级,4.4 MATLAB 程序结构,顺序结构循环结构1)for循环 for 循环变量=s1:s2:s3 循环体语句 end 其中s1为循环变量的初值,s2为循环变量的步长,s3为循环变量的终值。如果省略s2,则默认步长为1。可以嵌套,使用矩阵比循环效率高!,例 求出n阶Hilbert矩阵。function H=hilb(n)for i=1:n for j=1:n H(i,j)=1/(i+j-1);endend,2)while循环 while循环一般用于不能事先确定循环次数的情况,它的调用格式为 while 逻辑

9、变量 循环体语句 end,例:用while循环求1100间整数的和 sum=0;i=1;while i=100 sum=sum+i;i=i+1;end sum sum=5050,3.分支结构1)if-else语句,if 逻辑变量执行体语句endif条件语句的另一种调用格式为if 逻辑变量执行体语句1else执行体语句2end,if 逻辑变量1 执行体语句1 elseif 逻辑变量2 执行体语句2 elseif 逻辑变量3 执行体语句3 else 执行体语句n end,例 可以用下列程序得到符号函数。function y=signfun(x)if x0 y=-1;elseif x=0 y=0;e

10、lse y=1;end,2)switch-case-end分支结构switch switch_expr case case_exp1 ststement,ststement case case_expr2 ststement,ststement otherwise ststement,ststementend,例1:for month=1:12;switch month case3,4,5 season=spring case6,7,8 season=summer case9,10,11 season=autumn otherwise season=winter endend,例:str=in

11、put(Please input a string of Method);switch lower(str)将字符串转换为小写 case linear,bilinear disp(Method is linear)%显示 case cubic disp(Method is cubic)case nearest disp(Method is nearest)otherwise disp(Unknown method.)end,4.5 程序流控制语句,return 终止当前的命令序列,强制返回到调用函数或命令窗口。pause 使程序运行停止,等待用户按任意键继续。pause(n)break 用于中

12、断for或while循环的执行。当中断后,程序退到本级循环以外的下一条语句执行。input 提示用户从键盘输入数值、字符串或表达式,并接受输入。,error和warning指令 error指令显示错误信息并终止当前程序的运行,将控制返回键盘。warning指令显示警告信息,程序继续运行。,4.6 M文件,M文件是MATLAB的源代码文件,后缀名为.m,可以在MATLAB的文本编辑器中编程,也可以在其它文字处理软件中编写,只要存为文本文件且后缀名为.m。M文件有两种基本形式:脚本文件(命令文件 Script-file)和函数文件(Function-file)。M文件可以访问工作空间的变量,其所有

13、变量也将保存在工作空间中。函数文件用于创建子函数。,脚本文件特点,子函数的使用 1.函数定义的一般格式,函数定义行 文件的第一行,定义函数名,输入输出参数的数量和名称。H1行 帮助信息,被help look for查找,空行中断函数说明 H1行以后,函数主体以前的说明信息,如版本日期。函数主体函数中进行真正计算和输出赋值等工作的代码。注释函数体中用引导的对程序的注释。,函数文件特点,function B=rotatespace(L,x,r)%将子空间L向垂直于向量x的方向旋转%x是列向量,其维数与L的行数相等%A是子空间的基矩阵,x是个向量,r是旋转系数%返回B:旋转后的子空间的基矩阵%cop

14、yright 2008-9-1m n=size(L);I=eye(m);A=I+x*x*r;B=A*L;,函数文件必须用函数名保存,即文件名与函数名必须一致!路径问题:MATLAB缺省的路径为./matlab6.5/work.使用path可以查看MATLAB的搜索路径,运行程序时须切换到存放文件的当前目录下,MATLAB6.5可以自动提示切换,MATLAB5.3需要手工添加路径。File-setpath,2.子函数的调用 子函数的调用过程就是参数传递过程,子函数返回后其变量自动删除。调用格式为:,定义语句:B=rotatespace(L,x,r)调用语句 a,b,c 与L,x r同维且类型一致

15、,且已被赋值后:y=rotatespace(a,b,c);,在一个M函数文件中,可以包含一个以上的函数,其中只有一个是主函数,其它则为子函数。(1)在一个M文件中,主函数必须出现在最上方,其后是子函数,子函数的次序无任何限制;(2)子函数不能被其它文件的函数调用,只能被同一文件中的函数(可以是主函数或子函数)调用;(3)同一文件的主函数和子函数变量的工作空间相互独立;(4)用help和lookfor命令不能提供子函数的帮助信息。,3.多个函数,function Ex0511()%EX0511 使用函数调用绘制二阶系统时域响应z1=0.3;Ex0502(z1);%调用Ex0502hold onz

16、1=0.5Ex0502(z1)%调用Ex0502z1=0.707;Ex0502(z1)%调用Ex0502function y=Ex0502(zeta)%子函数,画二阶系统时域曲线x=0:0.1:20;y=1-1/sqrt(1-zeta2)*exp(-zeta*x).*sin(sqrt(1-zeta2)*x+acos(zeta)plot(x,y),例:,4.函数参数的个数,nargin%在函数体内获取实际输入变量的个数nargout%在函数体内获取实际输出变量的个数nargin(fun)%在函数体外获取定义的输入参数个数nargout(fun)%在函数体外获取定义的输出参数个数,例:计算两个数的

17、和,根据输入的参数个数不同使用不同的运算表达式。function sum,n=Ex0514(x,y)%EX0514 参数个数可变,计算x和y的和if nargin=1 sum=x+0;%输入一个参数就计算与0的和elseif nargin=0 sum=0;%无输入参数就输出0else sum=x+y;%输入的是两个数则就计算和end n=nargin;,4.7 M文件的调试功能,调试菜单,设置断点菜单,调试演示,例:s=randn(100);tic;s1 s2 s3=svd(s);a=toc,获得语句执行时间,tic;%开启计时器operation;%语句toc%结束计时 返回到toc,4.8

18、 M文件的优化和加速,1、P码文件,(1)P码文件的运行速度比原M文件速度快(2)存在同名的M文件和P码文件时则P码文件被调用(3)P码文件保密性好,P码文件使用pcode命令生成,生成的P码文件与原M文件名相同,其扩展名为“.p”。语法:pcode Filename.m%在当前目录生成Filename.p pcode Filename.m-inplace%在Filename.m所在目录生成Filename.p例:pcode Ex0517.m,2、内联函数,(1)创建内联函数:inline(string,arg1,arg2,)%创建内联函数说明:string必须是不带赋值号(“=”)的字符串;

19、arg1和arg2是函数的输入变量。,例:创建内联函数实现,f=inline(sin(x)*exp(-z*x),x,z)y=f(5,0.3)%调用函数f y=-0.2140,(2)查看内联函数char(inline_fun)%查看内联函数的内容class(inline_fun)%查看内联函数的类型argnames(inline_fun)%查看内联函数的变量例:查看内联函数的信息。,char(f)ans=sin(x)*exp(-z*x),argnames(f)ans=x z,class(f)ans=inline,(3)使内联函数适用于数组运算,例:ff=vectorize(f)ff=Inline

20、 function:ff(x,z)=sin(x).*exp(-z.*x)x=0:0.1:20;y=ff(x,0.3);,语法:vectorize(inline_fun),内联函数还可以直接使用feval命令执行。语法:y1,y2,=feval(inline_fun,arg1,arg2)例:x=0:0.1:20;z=0:0.05:10;y=feval(ff,x,z),(4)执行内联函数,小结,掌握变量及表达式基础知识;掌握基本的数据结构和字符串数组,熟悉单元数组和结构数组;熟练使用各种运算符,清楚其优先等级;掌握程序结构和基本的流程控制语句;掌握子函数的编程方法;掌握程序运行和调试方法。,信号的

21、产生,1)单位抽样序列 代码:x=1 zeros(1,n-1),函数:function x,n=impseq(n0,n1,n2)n=n1:n2;x=(n-n0)=0;,2)单位阶跃序列 代码:x=ones(1,N),函数:function x,n=stepseq(n0,n1,n2)n=n1:n2;x=(n-n0)=0;,3)实指数序列 代码:n=0:N-1;x=a.n;,4)复指数序列 代码:n=0:N-1;x=exp(lu+j*w0)*n);,5)随机序列rand(1,N)产生0,1上均匀分布的随机矢量。randn(1,N)产生均值为0,方差为1的高斯随机序列,即白噪声。,6)其它序列正弦序

22、列:用sin,cos 等函数。方波:用square函数。锯齿波:用sawtooth函数。辛克函数:用sinc函数。,例:t=0:0.01*pi:2*pi;x=sin(2*pi*t);,信号的运算,1)信号加代码:x=x1+x2;x1和x2长度相同,位置对应才能相加,否则应作处理。如:function y,n=sigadd(x1,n1,x2,n2)n=min(min(n1),min(n2):max(max(n1),max(n2);y1=zeros(1,length(n);y2=y1;y1(find(n=min(n1),2)信号乘代码:x=x1.*x2;%数组乘法,function y,n=sig

23、mult(x1,n1,x2,n2)n=min(min(n1),min(n2):max(max(n1),max(n2);y1=zeros(1,length(n);y2=y1;y1(find(n=min(n1),x1和x2长度相同,位置对应才能相加,否则应作处理。如:,3)改变比例代码:y=k*x,4)折叠代码:y=fliplr(x),5)移位 function y,n=sigshift(x,m,n0)%implements y(n)=x(n-n0)n=m+n0;y=x;,5)累加求和代码:y=sum(x(n1:n2);,6)信号能量和功率代码:Ex=sum(abs(x).2);Px=sum(abs(x).2)/N;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号