第3章-matlab编程与接口完整_第1页
第3章-matlab编程与接口完整_第2页
第3章-matlab编程与接口完整_第3页
第3章-matlab编程与接口完整_第4页
第3章-matlab编程与接口完整_第5页
已阅读5页,还剩43页未读, 继续免费阅读

下载本文档

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

文档简介

第3章MATLAB编程与接口•本章关键内容似下:••••3,1脚本与函数(ScriptsandFunctions)3,2流程操纵(Flowcontrol)3,3信息接口3,4文件IO操纵3,1脚本与函数M-文件分为两种:脚本文件(scripts):也称呼令文件,是由用户为处理特定的题目而编制的;函数文件(functions):也可由用户编写,但它必须由其他M-文件来调用3,1,1脚本(Scripts)•脚本是最简单的M-文件,它没有入口和出口指标变量.可以自动履行一系列MATLAB号令,诸似重复号令等.•脚本(Scripts)是对任务空间(workspace)中的现有信息操纵,或创立一个新信息,同时且脚本所创立的任一变量在脚本运行完都保留在任务空间中以便进一步使用.•脚本可以开门见山在号令窗口用文件名开门见山调用.例3-1一个最简单的脚本••例3-1:已知一模拟信号xa(t)etu(t),现以采样率20Hz履行采样,得到一个数字序列:x(n)e0.05nu(n)MATLAB对上述操纵编程同时绘出x(n)RN(n)RN(n)为矩形窗,其中N=20,,用序列.其中把M-文件以••••••ex3_1,m:%AnM%plotx(n)RN(n)取N=20ex3_1,m保留,-filescripttoproduce接着在号令窗口键入ex3_1,履行文件,就N=20;n=0:N-1;L=200;n1=0:L-1可看到序列图xn=exp(-0.05*n);xn1=[xn,zeros(1,L-N)];形.stem(n1,xn1);title(‘x(n)RN(n),N=20’)脚本M文件标准特点•同样用clear、closeall等语句最早,可清撤除任务空间中原有的变量和图形,以幸免其他已履行的残留信息对本程序的作用.•M文件是MATLAB程序的主体.介入文件中有全局变量,即在子程序中与主程序共用的变量,应在程序的起始部分说明.其语句是:•global变量名1变量名2……3,1,2函数(Functions)•函数(Functions)是同意入口指标返回出口指标的M-文件,程序在自已的任务空间中操纵变量,与任务空间分开,无法会见.•函数文件编写与脚本文件编写差不.函数文件编写时,必须由function开端,后跟的函数名必须与文件名同样.函数文件具有输入输出变元(变量),可履行变量传送.例3-2一个简单的MATLAB函数•例3-2:编写一个对序列x(n)作N点离散傅里叶变幻(DFT)的MATLAB函数.解析:有限长序列x(n),长度为n=0,1,…N-1,对其作N点离散傅里叶变幻,即得:•N12πjnk/NN1nkX(k)

n0x(n)e

n0x(n)WN•式中WNej2π/N称为扭转因子,k=0,1,…,N-1,为此在程序中设置一个含n和k值的N×N维矩阵:nkn'k•,那么DFT矩阵为WNnk=WN.^nk,是以输入序列和DFT矩阵的向量点乘就包涵了此序列的N点离散时候傅里叶变幻定义式中的追项相乘后的连加演算.例3-2(续)函数dft.mfunction[Xk]=dft(xn,N)%dft求序列x(n)的N点DFTn=[0:1:N-1];k=[0:1:N-1];WN=exp(-j*2*piN);nk=n′*k;WNnk=WN.^nk;Xk=xn*WNnk;%n的行向量%k的行向量%扭转因子%产生一个含nk值的N×N维矩阵%DFT矩阵,扭转因子矩阵%DFT系数的行向量,统计N点DFT3,1,3M文件的调试•MATLAB的脚本M文件程序是对比简单调试的,因为MATLAB的差错调试功底非常强,配上任务空间中变量的保留和表现功能,不需要用特意的调试号令,调试也能够非常便利地履行.•需要使用调试号令的主假如函数程序.因为在函数程序犯错而停机时,其变量不被任务空间保留.M文件调试时碰到的差错•句法差错:这类差错是指程序语句产生句法上的差错,例似函数标题拼写错了.MATLAB会自动查抄出大部分的句法差错,同时且在号令窗口中高亮表现差错信息,提示差错展示所在的号令行序号.•运行差错:这类差错指由程序中的算法差错引起的程序履行后的差错,例似使用了差错的变量或操纵符从而履行了不精确的统计.使用MATLABEditorDebugger执路程序调试(演示)functionXk=mydft(x,N)%mydft.m–DFTofadigitalsignalsequence%Xk=mydft(x,N);%x=inputdigitalsignalsequence%k=[0:1:N-1];WNk=exp(-j*2*piN).^k;Xk=0;forn=N-1:-1:0,%k的行向量Xk=x(n+1)+Xk.*WNk%此处设置了一个小差错!End程序调试办法(教材p40)•把某些分号改为逗号,将中间结论表如今屏幕上,做为判断差错的依据.在子程序中得当部位加keyboard号令.系统会在此处停息而守侯用户键入号令,而这时子程序中的变量还存在于任务空间中,可以对它们履行查抄.将函数文件的第一行前加%号,称它为程序文件,履行初步调试.调试时,第一行中的输入变元,可改用input或赋值语句来输入,调试好后再改回函数文件.使用MATLAB供应的11条调试号令.使用MATLABEditorDebugger调试函数,通过在M文件号令行设置和排解断点来进入函数运行任务空间,以查抄或许的差错所在.••••3,2流程操纵(Flowcontrol)流程操纵在程序中是不可或缺的.四种根本的操纵流程功能:if,else,elseif:依照逻辑前提履行一系列运算switch,case,otherwise:依照前提值来挑选履行的项目While依照逻辑前提来决意循环的履行次数for履行固定次数的循环1,循环语句(for语句和while语句)•for语句标准似下:•for循环变量=起步值:步长:停止值••end•(注:for语句可以嵌套履行)•while语句标准似下:•while循环变量=起始值:步长:停止值••end循环体语句循环体语句例3-4for语句使用functionX=dtft(x,w)%dtft.mDTFTofasignalatafrequencyvectorw%X=dtft(x,w);%x=rowvectoroftimesamples%w=rowvectoroffrequenciesinradssample%X=rowvectorofDTFTvalues%[L1,L]=size(x);z=exp(-j*w);X=0;forn=L-1:-1:0,程序没有接收例3-2中所用的向量点乘,来实现追项相乘后的连加演算,而是从DTFT的定义出发使用了for语句实现了算法.X=x(n+1)+z.*X;End2,挑选结构语句:if语句•if语句的标准似下:•if(逻辑表达式)••elseif(逻辑表达式)•••else••end语句1语句2……语句n2,挑选结构语句:switch语句•挑选语句switch语句的标准似下:•switch表达式(表量或字符串)•case1••case2值2••……•otherwise••end值1语句1语句2语句n3,3信息接口MATLAB撑持两种信息接口(ImportingandExportingData)功能,使得用户可以非常便利地与其它的使用程序交流信息和信息.3,3,1MATLAB的信息接口•MATLAB与其他使用程序交流只同意两种信息情势,为:••①ASCII码的文本信息文件;②MATLAB定义的MAT型信息,即所谓的MAT文件.•信息结构包涵:变量名(NAME)、变量的维数(Dimensions)、变量的类型(ClassName)、变量的实数或复数类型、变量的存储属性(Storage).3,3,2MATLAB的信息输入•••开门见山列表键入输入信息创立一个信息M文件输入装载一个差不多存在的ASCII码信息文件(load号令)低层IO函数使用MEX文件输入信息开发一个特意的信息变形程序•••3,3,3MATLAB的信息输出•使用diary号令生成diary文件输出信息•使用save号令用ASCII码输出信息•低层IO函数•使用MEX文件输出信息•开发一个特意的信息变形程序储存及读取信息:save号令和load号令•「储存」和「读取」的指令分不为save及load,对应于信息的输出与输入.•save号令可以将MATLAB系统内部信息写为MAT文件;•load号令可以将磁盘上的MAT文件精确地读入到MATLAB系统中.save号令的讲明•save号令把任务空间中的全部变量值存入磁盘.介入不指定变量名,其默许的文件名为matlab.mat.再次用save号令,就会将从前酿成的matlab.mat文件中的信息给冲掉了.•save号令的存档标准有两种:双位元标准和ASCII码.介入信息只是在MATLAB中产生及被使用,以使用MAT-file为宜.似信息文档要被其它不是MATLAB的使用软件所读取时,必须用ASCII-file.例:把a,b,c三个变量保留在test.mat的文件中•savetestabc•信息型态为双位元标准(binaryformat)的MAT-file,可让电脑在读入出(inputoutput)速率加快.•savetestabc–ascii•标准为ASCII码.ASCII-file是以可辨识的字元储存,但会下降电脑在读入出的速率,其标准为test.dat.使用save号令的看重事项•当save生成MAT文档时,所储存的是变量自已,而非开门见山储存变量的信息;而当save生成的文档是ASCII文档时,那么是开门见山储存变量的数值.•在储存及读取信息时,MAT-file或是ASCII-file文档最好为矩阵型态,否那么或许在读取时有难题.信息储存成矩阵的大小可感觉m×n,其中m是列的数目,n那么为行的数目.任务日志的记录diary号令•diary号令可把MATLAB任务环节中的全部屏幕文字和信息以文本方式记录下来,成为一个任务记录,默许的文件名为diary.•当筹办做记录时,在号令窗中键入diaryon或diarybbb,前者用diary.txt,后者用bbb.txt为文件名.当需要终了记录的环节,应键入diaryoff.介入diaryon或diary文件名,那么新记录的内容将接在原记录的背面,不大概冲掉原记录.•diary文件不能记录MATLAB运行中生成的图形.其它常用的人机交互号令•input号令:标准为input(‘提示符’),程序履行到此停息,在屏幕上表现引号中的字符串,要求用户输入信息.input号令可以同意数字,也能够同意字符串.echoon(off)号令:同样状况下M文件中的号令不大概表如今屏幕上.而在号令echoon之后,会在履行每路程序前先表现其内容.pause(n):程序履行到此处,停息n秒,再接着履行.介入没有括号指标,那么守侯用户键入随意任性键后才接着履行.^C:强制中断程序运行号令.即先按下Ctrl键,不弹起再按C键.在发觉程序运行有错,运行时候过长时,可用此方式中途中止它.menu:是用来产生人机交互备选菜单的号令.••••输出标准•••有两种输出标准:自由标准(disp)和标准化输出(fprintf).要开门见山输出文字或是一数值,可使用disp,似在号令窗口输入:•••••>>temp=20;>>disp(temp);disp('degreesC');disp('度C')指令fprintf那么是用来操纵输出信息及文字的标准>>fprintf('Theareais%8,5f\n',area)上条号令讲明:在两个单引号间包罗输出的字串“Theareais”,接着是输出信息的标准“%8,5f”,再下面是换行符号“\”以幸免下一个输出信息或是提示符号也挤在同一行,末了键入要输出的信息名area.3,4文件IO操纵MATLAB具有一系列基于ANSI规格的C库函数,这些磁盘文件IO号令函数的标题和用法和C语言非常相近.差不型态信息的输出标准讲明>>fprintf('f_form:%12,5f\n',12345,2)%输出值为12位数,含5位小数f_form:12345,20000>>fprintf('f_form:%12,3f\n',1,23452)%输出值为12位数,含3位小数f_form:1,235>>fprintf('e_form:%12,5e\n',12345,2)%输出值为指数标准的12位数,含5位小数e_form:1,23452e+004>>fprintf('f_form:%12,0f\n',12345,2)%输出值为整数标准的12位数f_form:123453,4,1文件的翻开与封闭•翻开文件,使用fopen号令.fid=fopen(‘filename’,’permission’)指标permission示意对文件“filename”履行的操纵,可有似下挑选:••••rwa示意对文件履行信息“只读”操纵;示意对文件履行信息“只写”操纵;示意对文件履行信息“追加”操纵,在文件尾追加信息;••r+w+示意对文件履行信息“读写”操纵;示意创立一个新文件或删除已存在的文件内容,同时履行信息“读写”操纵;•a+示意创立一个新文件,翻开一个已存在的文件,同时履行信息追加操纵文件的翻开与封闭(续)•封闭文件,使用fclose号令.••示意用函数fclose即可封闭句柄为fid的已翻开status=fclose(fid)的文件,用status句柄标识所封闭的文件.•需看重的是不管翻开文件或读写文件,操纵后,必须做封闭文件的操纵才干终了这段程序.3,4,2二进制信息文件的读写操纵•读文件操纵:使用fread来读一个二进制信息文件全部或部分,同时以矩阵情势存储.•••••例似:fid=fopen(‘first.dat’,’r’A=fread(fid);status=fclose(fid););讲明:这个地方从文件first.dat读出信息到矩阵A中.fread号令的讲明•fread号令可以有第2个指标,用来操纵读入信息的数量,例似:•A=fread(fid,100)%示意读文件中前100个信息到列向量A中.•A=fread(fid,inf)%示意读至文件末端,生成列向量A.•fread号令还可以有第3个指标,是用来操纵读入信息的精度的,例似:•A=fread(fid,10,'float')写文件操纵•使用fwrite将信息矩阵的元素按指定的精度写入到某个翻开的文件中,返回一个写入的数值.例似••••讲明:这个地方,将100字节的二进制写入fwriteid=fopen('magic5,bin','w');count=fwrite(fwriteid,magic(5),'int32');status=fclose(fwriteid);5×5矩阵,•共有25个元素,每个元素占4个字节的整•数,返回变量count的值为25,3,4,3文件内的位置操纵•MATLAB使用文件指面向文件内位置履行指导或操纵,决意下一个读写操纵的起始点.•常使用函数fseek和ftell来设置和扣问文件指针的位置,返回文件指针的往后位置,该位置定是下一次读写操纵的起始点.fseek与ftell号令•fseek•status=fseek(fid,offset,’origin’)•设定文件指针的位置这个地方fid是指定文件的句柄,offset是正的或负的偏移量值,以字节为单位,origin是统计起点,使用时,origin指定以下字符串之一:••••ftellbofcofeof返回文件指针的往后位置文件头(BeginofFile)往后位置(CurrentofFile)文件尾(EndofFile)例3-6文件IO操纵概括示例讲明(教材pp46-48)%Createfive.binA=1:5;fid=fopen('five.bin','w');fwrite(fid,A,'short');status=fclose(fid);fid=fopen('five.bin','r');status=fseek(fid,6,'bof');four=fread(fid,1,'short');four=4position=ftell(fid)position=8status=fseek(fid,-4,'cof');three=fread(fid,1,'short');three=3其他有关讲明•读取特定标准的文件:fscanf用于输入一行特定标准的信息,将所需的信息按指标的类型放在变量中.(与C语言中的fscanf用法相近,最大的差不在于MATLAB会将信息一次读完.)输入信息标准讲明指标以“%”开头,常用指标有:••••

温馨提示

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

评论

0/150

提交评论