matla M文件程序设计基础_第1页
matla M文件程序设计基础_第2页
matla M文件程序设计基础_第3页
matla M文件程序设计基础_第4页
matla M文件程序设计基础_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

第八章M文献程序设计基础

计算机及信息工程学院第1页8.1M文献

M文献是由MATLAB命令或函数组成文本文献,以.m为扩展名。M文献有两种形式:命令文献(Script)函数文献(Function)8.1.1命令文献命令文献没有输入输出参数,是最简单M文献。变量为工作区变量。第2页【例8-1】建立命令文献,绘制花瓣图。在编辑器中编辑命令,绘制花瓣图:%绘制花瓣图theta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).^2;rho(2,:)=cos(10*theta).^3;rho(3,:)=sin(theta).^2;rho(4,:)=5*cos(3.5*theta).^3;fork=1:4subplot(2,2,k)%循环控制

polar(theta,rho(k,:))%绘制极坐标图end第3页8.1.2函数文献函数文献能够介绍输入参数和返回输出参数,函数在自己工作空间中操作局部变量。MATLAB函数文献有下列部分组成:函数定义行H1行帮助文本第一行,以“%”开始帮助文本函数体注释第4页【例8-2】生成矢量,并调用average函数。在编辑器中比较下列代码:functiony=average(x)%AVERAGEMeanofvectorelements.%AVERAGE(X),whereXisavector,isthemeanofvectorelements.%Non-vectorinputresultsinanerror.[m,n]=size(x);if(~((m==1)|(n==1))|(m==1&n==1))error('Inputmustbeavector')end第5页y=sum(x)/length(x);%Actualcomputation将上面代码保存在文献名为average.m文献中。在命令窗口生成矢量,并调用average函数。>>z=1:99;>>average(z)第6页8.1.3局部变量和全局变量用关键字global定义全局变量。8.2数据及数据文献8.2.1数据类型8.2.2数据文献MATLAB允许介绍数据文献能够分为下列几类:以.mat为扩展名二进制数据文献。由save和load命令直接存取。以.txt、.dat等为扩展名ASCⅡ码数据文献。用load或save命令读入或存放。第7页以.bmp、jpg、tif等为扩展名图形文献。使用imread和imwrite命令读入和存放。以.wav为扩展名声音文献。使用waveread和wavwrite命令读入和存放。8.2.3数据输入向导8.2.4数据输入和输出第8页8.3程序流程控制

8.3.1循环语句MATLAB提供了两种循环方式:for-end循环和while-end循环。1、for循环for循环一般形式为:

forv=体现式语句体

endfor和end必须配对使用。第9页【例8-3】简单for循环示例。n=10;fori=1:nx(i)=(i+1).^2;endxx=49162536496481100121for循环能够嵌套,但需要注意是,在相同中每一种for都必须与end相匹配。第10页【例8-4】for循环嵌套。m=3;n=4;fori=1:mforj=1:na(i,j)=1/(i+j-1);endendformatrataa=11/21/31/41/21/31/41/51/31/41/51/6

第11页【例8-5】利用非1步长for循环,产生0~20以内偶数。fori=0:2:20a(i/2+1)=i;endaa=061218281420410161/6

第12页2、while循环while循环一般体现式是:

while体现式语句体

endwhile与end必须配对第13页【例8-6】利用while循环,求解使n!达成100位数第一种n是多少?。n=1;whileprod(1:n)<1e100n=n+1;endnn=70

第14页

8.3.2条件语句1、if-end语句

if-end语句是最简单条件语句,其一般形式为:

if体现式语句体

end第15页2、if-else-end语句if-else-end语句在if和end之间增加一种else选择,其一般形式为:if体现式语句体1;else

语句体2;end第16页【例8-7】应用if-else-end条件语句,判断学生是否通过学业。if((attendance>=0.90)&(grade>=60))%判断出席率和成绩

pass=1;%满足条件为通过elsefail=1;%不然为不通过end;第17页3、if-elseif-end语句在else子句中嵌套if语句,组成elseif构造,其一般形式为:if体现式1

语句体1;elseif体现式2

语句体2;

else

语句体3;end第18页【例8-8】用色彩辨别数据点范围。n=100;x=1:n;y=randn(1,n);%建立100个元素随机行矢量holdonfori=1:nify(i)<-1plot(x(i),y(i),'*g')%不大于-1点用绿色*标出

elseify(i)>=-1&y(i)<=1

第19页plot(x(i),y(i),'ob')%在-1与1之间点用兰色o标出

elseify(i)>=1plot(x(i),y(i),'xr')%大于1点用红色x标出

endendholdoff第20页8.3.3分支语句分支语句为switch-case-end,其一般形式为:.switch多半是(数值或字符串)case数值或字符串1

语句体1:case数值或字符串2

语句体2:…otherwise语句体n;end第21页【例8-9】使用switch-case-end语句,检查输入数据值。switchinput_numcase-1disp('negativeone');%当input_num=-1时显示

case0disp('zero');%当input_num=0时显示

case1disp('positiveone');%当input_num=1时显示

otherwisedisp('othervalue');%当input_num等于其他值时显示end第22页8.3.4检测语句检测语句try-catch主要用于检测错误并变化流程,其一般形式为:try

语句体1catch

语句体2end使用lasterr函数查询最后错误信息,但查询成果为空字符串时表达语句体1成功执行。第23页【例8-10】使用try-catch语句,判断错误语句。n=4;a=magic(3) %设置3×3矩阵atrya_n=a(n,:), %取a第n行元素catcha_end=a(end,:), %假如取a第n行犯错,则改取a最后一行endlasterr %显示犯错原因第24页a=816357492a_end=492ans=Indexexceedsmatrixdimensions.第25页8.3.5其他流程控制语句1、continue语句

continue语句用于在for循环和while循环中跳过某些执行语句。在for循环和while循环中,假如出现continue语句,则跳过循环体中所有剩下语句,继续下一次循环,在嵌套循环中,continue控制执行本嵌套中下一次循环。第26页【例8-11】使用continue语句,显示文献行数。fid=fopen('magic.m','r');%打开magic.m文献count=0;%计数器置零while~feof(fid)%while循环判断条件:是否文献末尾

line=fgetl(fid);%从文献中读行

ifisempty(line)|strncmp(line,'%',1)%判断是否为空行或注释行

continue%假如是空行或注释行继续下一次循环

endcount=count+1;第27页%假如不是空行或注释行计数器加1enddisp(sprintf('%dlines',count));%显示剔除后行数25lines第28页2、break语句

break语句用于终止for循环和while循环执行。【例8-12】break语句使用方法。fid=fopen('dft.m','r');%打开fft.m文献s='';%创建空字符数组while~feof(fid)%while循环判断条件:是否文献末尾

line=fgetl(fid);%从文献中读行

ifisempty(line)%假如是空行

break%退出循环

end

第29页s=strvcat(s,line);%假如不是空行,将该行写入字符数组enddisp(s)%显示字符数组成果3、return语句return语句用于终止目前命令序列,并返回到调用函数或键盘,也用于终止keyboard方式。第30页8.4程序调试与优化借助于程序调试器(Debugger)。8.4.1程序直接调试法8.4.2调试器使用8.4.3程序设计优化1、以矩阵运算替代循环运算2、数据预定义3、内存管理第31页表8-4MATLAB语言内存管理函数函数名说明clear从内存中清除所有变量及函数pack重新分派内存quit退出MATLAB环境,释放所有内存save把指定变量存放至磁盘load从磁盘中调出指定变量第32页8.4.4M文献调用统计1、profile函数实现M文献调用统计函数为profile,其调用格式为:profileon开始统计M文献调用,并清除一起统计。profileon–detaillevel按函数指定level开始统计M文献调用,饼清除一起统计。profileon–history统计确定序列函数调用。profileoff中断M文献调用统计。第33页profileresume重新开始M文献调用统计,并保存本来统计。profileclear清除M文献调用统计。profilereport中断M文献调用统计,并将统计以html格式输出。profilereportbasename中断M文献调用统计,并将统计保存至目前目录下basename文献中。profileplot中断M文献调用统计,并将成果以条状图绘图。s=profile(‘status’)形式目前调用状态。stats=profile(‘info’)中断并返回统计成果。第34页2、调用统计成果显示下面以求解微分方程为例,介绍调用统计使用办法:【例8-16】调用统计应用实例。profileon-detailbuiltin-history[t,y]=ode23(@vdp1,[020],[20]);profilereportode_reportprofileplot第35页8.5函数句柄函数句柄是MATLAB6所特有一种语言,用于在使用函数过程中保存函数有关信息,尤其是有关函数执行信息。它主要有下列长处:实现函数间互相调用;取得函数加载所有方式;拓宽子函数以及局部函数使用范围;提供函数调用过程中可靠性;减少程序设

温馨提示

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

评论

0/150

提交评论