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

下载本文档

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

文档简介

第4章MATLAB

程序设计陈文静主要内容M文件的建立、分类程序控制结构函数的设计(参数控制,注释等)程序的调试(包括函数文件的调试)程序按照矩阵规则进行优化4.1M文件M文件:由代码(指令)组成,在MATLAB系统中解释运行。M文件的后缀名为M。

M文件的分类

(1)命令式文件(脚本script)。(2)函数式文件(function)。4.1M文件两类文件的区别命令式文件没有输入输出参量,函数式文件带带参数。命令式文件运行中可以调用工作空间的数据,运行中产生的所有变量为全局变量。函数式文件不能调用工作空间的数据,运行中产生的所有变量为局部变量。命令式文件可以直接运行,函数式文件不能,只能调用。4.1M文件函数式文件(function)的构成

函数式文件(function)的构成function[w1,w2]=set_filter_w(I,kk)%设置滤波窗ifnargin<2kk=1;end……4.1M文件M文件的建立与打开可用任何文本编辑程序来建立和编辑常用matlab提供的编辑器建立/打开的方式:

a、主菜单

b、运行edit命令

c、命令按钮,Newscript4.1M文件4.2程序控制结构三种程序控制结构顺序结构选择结构循环结构4.2程序控制结构顺序结构指按照程序中语句的排列顺序依次运行,直道程序的最后一句。一般涉及数据的输入、数据的计算或处理、数据的输出等。Clearall;clc;closeall;input(prompt)strResponse=input(prompt,'s')disp(x)4.2程序控制结构name='Alice';age=12;str=sprintf('%swillbe%dthisyear.',name,age);disp(str);A='Alice';age=12;str=fprintf('%swillbe%dthisyear.\n',name,age);Alicewillbe12thisyear.4.2程序控制结构Matlab与日期和时间有关的函数calendarX=clockY=todayT=tictocetimenowdate

datenumpausepause(3)延时3秒ctrl+c(终止程序运行)顺序结构实例例:求一元二次方程ax2+bx+c=0的根,其中a,b,c的值由键盘输入。

a=input(‘a=?’);b=input(‘b=?’);c=input(‘c=?’);x1=(-b+sqrt(b.^2-4*a*c))/(2*a);x2=(-b-sqrt(b.^2-4*a*c))/(2*a);

disp([‘x1=‘,num2str(x1),‘x2=‘,num2str(x2)])或p=[abc];x=roots(p)4.2程序控制结构三种程序控制结构顺序结构选择结构循环结构4.2程序控制结构if结构1)单分支If结构2)双分支If结构if-else-end3)多分支If结构If…elseif…else…endswith结构

try结构

选择结构4.2程序控制结构1)单分支ifif条件语句组

end

if结构2)双分支ifif条件语句组1else语句组2end3)多分支ifif条件1语句组1elseif条件2语句组2……elseif条件m语句组melse语句组nend例:计算分段函数:例:多分支条件语句例、输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符,则输出其对应的数值,其它为原样输出。disp(abs(c)-abs(‘0’))switch语句switch表达式

case表达式1

语句组1case表达式2

语句组2………

case表达式m

语句组motherwise

语句nend4.2程序控制结构选择结构switch语句switch表达式

case表达式1

语句组1case{表达式2,表达式3,…表达式m}

语句组2….otherwise

语句nend4.2程序控制结构选择结构4.2程序控制结构…switch(result)case52disp('resultis52')case{53,78}disp('resultis52or78')End例使用switch语句判断键盘输入值并做出相应提示。例使用switch语句对顾客购买的商品进行打折销售try语句try

语句组1catch

语句组2end例、矩阵乘法的规则,先求两矩阵的乘积,若出错则自动转去求两矩阵的点积。A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;end4.2程序控制结构试探结构Errorusing*Innermatrixdimensionsmustagree.

4.2程序控制结构三种程序控制结构顺序结构选择结构循环结构循环结构硬循环语句(for……end)条件循环语句(while…….end)4.2程序控制结构

for循环变量=表达式1:表达式2:表达式3

循环体语句

end例、利用循环语句生成方波A,要求方波序列长度为100,方波个数为10个。A0=[0,0,0,0,0,1,1,1,1,1];A=[];fori=1:10A=[AA0];endfor循环结构[B1,B]=meshgrid(A0);C=reshape(B,1,100);for循环结构Fori=valArray…endfors=[1,5,8,17]disp(s)end15817a=[1,3,5,7];>>fori=as(i)=i;ends=1030507例:输出100~999之间的水仙花数例:编写程序,求Fibnacci数列各项求:n=input(‘n=‘);

y=0;fori=1:ny=y+1/i.^2;enddisp(y)n=input(‘n=‘);

x=1:n;y=1./i.^2sum(y)disp(y)例:求定积分设求例:求定积分设求quad(fun,a,b)>>F=@(x)exp(-0.5*x).*sin(x+pi/6);>>Q=quad(F,0,3*pi)Q=0.9008条件循环语句(while-end)当--就—

结构while条件循环体语句

endWhile循环结构条件循环体语句YNWhile循环例:求阶乘大于或等于99^99的最小整数。N=1;while(prod(1:N)<99^99)N=N+1;endm=1;while(sum(1:N)<=10000)m=m+1;end>>mm=141求:

例:从键盘输入若干个数,当输入0时,结束。求这些数的和与平均值While循环例break用于终止循环的执行,即程序将跳出循环。continue

控制跳出循环体中的某些语句,即跳过循环体中所有剩下的语句,继续下一次循环。例、求[100,200]之间第一个能被21整除的数forn=100:200ifrem(n,21)~=0continueendbreakend终止循环forn=100:200ifrem(n,21)==0breakendendx=100:200;a=find(rem(x,21)==0,1);x(a)return使正在执行的函数正常退出。可以用于正常和强制结束函数的运行例、求[100,200]之间第一个能被21整除的数forn=100:200ifrem(n,21)==0returnendend[x,y]=meshgrid(1:256);z=2-((x-128).^2+(y-128).^2)/128^2;mesh(z);

a=z;a(a<=1)=NaN;[M,N]=size(a);fori=1:Mforj=1:Nifa(i,j)<=1a(i,j)=NaN;endendend循环的嵌套例:找出1:100之间的全部素数clearallclcN=100;p=2:N;fori=2:sqrt(N)n=find(rem(p,i)==0&p~=i);p(n)=[];enddisp(p)例:找出1:100之间的全部素数写出下列程序的输出结果s=0;a=[12,13,14;15,16,17;181920;21,22,23]fork=aforj=1:4ifrem(k(j),2)~=0s=s+k(j);endendends=108第三节函数文件函数文件的基本结构Function[输出参量]=函数名(输入参量)

注释说明函数体语句说明:1、函数调用时,不是函数名而是函数文件名。2、注释用%开头,第一注释行及之后的连续行3、return

函数文件的基本结构Function[输出参量]=函数名(输入参量)

注释说明函数体语句说明:1、函数调用时,不是函数名而是函数文件名。2、注释用%开头,第一注释行及之后的连续行3、return第三节函数文件

函数调用:普通调用[输出参量]=函数名(输入参量)function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);调用:

[rho,the]=tran(x,y);第三节函数文件functionA=myhilb(m,n)ifnargout>1,error(‘Toomanyoutputargument’);endifnargin==1,n=m;elseifnargin==0|nargin>2,error(‘wrongnumberofinputargument’);endfori=1:mforj=1:nA(i,j)=1/(i+j-1);endend第三节函数文件调用:

A=myhilb(3,4);

函数调用:嵌套调用函数可以嵌套调用,如递归例、利用函数的递归调用,求n的阶乘。functionf=myfactor(n)ifn<=1f=1;elsef=myfactor(n-1)*n;end第三节函数文件函数调用举例用for循环编程实现对行向量进行任意重新排列。建立函数:myrndprm调用myrndprm>>x=1:10;>>y=myrndprm(x)y=46513278910

函数参数的可调性

nargin:numberoffunctioninputarguments

nargout:numberoffunctionoutputarguments

全局变量与局部变量

global变量名子函数私有函数

private目录下嵌套函数第三节函数文件nargin和nargout

调节输入和输出参数,一个函数可完成多种功能。functionfout=charry(a,b,c);Ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end函数参数的可调性global变量名缺点:破坏了函数对变量的封装,降低了程序的可读性。functionf=wadd(x,y)globalalphabetaf=alpha*x+beta*y;运行时

globalalphabetaalpha=1;beta=2;s=wadd(1,2);全局变量与局部变量子函数(subfunction)一个M文件可以包括多个函数第一个出现的主函数,其它的为子函数主函数可以在M文件的外部调用子函数只能被主函数和同一个M文件中的其它子函数调用因此,主函数必须在最上方,子函数的排列顺序可以任意子函数function[avg,med]=mystate(u)n=length(u);avg=mean(u,n);med=median(u,n);functiona=mean(v,n)a=sum(v)/n;functionm=median(v,n)w=sort(v);ifrem(n,2)==1m=w((n+1)/2);elsem=(w(n/2)+w(n/2+1))/2;end嵌套函数嵌套:在函数内部定义其它函数嵌套函数必须用end结尾functiontestfunclc;x=5;y=testfun1(x);functionz=testfun1(x)z=2*x;endyend1.语法错误2.逻辑错误(编程失误)调式方法:(1)命令行,单独运行部分命令,根据结果判断。(2)设置断点来判断(3)

return的灵活应用第四节程序调试

1.语法错误

能很好判断或检查出语法错误

2.逻辑错误(编程失误)

matlab基本不能检查到逻辑错误第四节程序调试2.逻辑错误(编程失误)(1)命令行,单独运行部分命令,根据结果判断。(2)设置断点来判断_debug

k>>变量名,查看。变量的鼠标观测法(3)利用键盘控制,如命令pause\keyboard\return第四节程序调试Debug详解Debug工具栏中部分子项的功能1、step

执行M文件的当前行,即单步执行2、stepin

如果当前行调用了另外一个函数,则深入被调用的函数内部执行3、stepout

在当前函数内部,完成剩余行的执行,并退出函数4、continue

完成当前M文件的运行5、exitdebugmodemy_demo_func(1:64)4.3.5子函数4.3.5子函数第一步第二步第三步第四步第五步1.代码运行的计时方法整段程序代码的计时计算tic与toc之间的时间。也可以用etime(t1,t2)

计算t1,t2之间的时间差来完成上述功能。也可以用cputime变量来完成上述功能。五、程序的优化设计1.代码运行的计时方法整段程序代码的计时计算tic与toc之间的时间。

tic……toc五、程序的优化设计1.代码运行的计时方法也可以用etime(t1,t2)

计算t1,t2之间的时间差来完成上述功能。t=clock;fft(x);etime(clock,t)五、程序的优化设计1.代码运行的计时方法也可以用cputime变量来完成上述功能。

t=cputime;your_operation;cputime-t五、程序的优化设计编程技巧(1)尽量避免使用循环。尽量使用向量化的运算。多重循环,次数多的循环在内。(2)矩阵维数预先定义。(3)优先考虑内置函数。(4)算法的优化。作业1、编写函数,应用cos(x)的麦克劳林展开式,计算cos(x)的值,并将计算结果于matlab自带的cos函数进行比较。提示采用while…end条件循环。2、产生20个随机整数,输出其中小于平均值的偶数。3、按照循环结构计算s=1+2+22+…2n4、编写函数文件,用于求两个矩阵的乘积和点积,要求若能同时进行矩阵乘和点积,则输出两个值。例,产生方波A,要求方波序列长度为100,方波个数为10个。

A=[0,0,0,0,0,1,1,1,1,1];B=[A,A,A,A,A,A,A,A,A,A];或[B1,B]=meshgrid(A);C=reshape(B,1,100);

在matlab中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列,…,reshape只是改变原矩阵的行数和列数,不改变矩阵个数及原来的存储结构练习1.从键盘上输入4位数,按照下列规则加密输出:每位数字都加上7,然后用和除以1

温馨提示

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

评论

0/150

提交评论