Matlab高级编程技术教程

上传人:wuxin****2020 文档编号:244869277 上传时间:2024-10-06 格式:PPT 页数:36 大小:319.50KB
返回 下载 相关 举报
Matlab高级编程技术教程_第1页
第1页 / 共36页
Matlab高级编程技术教程_第2页
第2页 / 共36页
Matlab高级编程技术教程_第3页
第3页 / 共36页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第8章 高级编程技术,1,本章目标,掌握MATLAB文件处理方法,理解MATLAB应用程序接口的原理,了解结构和元胞这两种复杂数据类型,了解面向对象编程的基本概念,2,主要内容,8.1文件,8.2 应用程序接口,3,8.1文件,文件可分为两类:,文本文件,由字符和与字符的显示格式有关的控制符构成,常见扩展名:“,TXT”、“BAT”、“HTM”,二进制文件,二进制文件为非文本文件,常见扩展名:“COM”、“EXE”、“BMP”、“WAV”,4,MATLAB中基本的低级文件I/O指令:,1打开和关闭文件,fopen、fclose,2格式读写,fprintf、fscanf、fgetl、fgets,3非格式读写,fread、fwrite,4文件定位和状态,feof、fseek、ftell、ferror、frewind,5,文件的打开与关闭,1fopen函数,fidfopen(filename,permission),fid,message=fopen(filename,permssion),filename,permission,machineformat=fopen(fid),fid=fopen(all),2fclose函数,status=fclose(fid),status=fclose(all),例:打开一个名为std.dat,的数据文件并进行读操作,命令为:,fidfopen(my.txt,r),6,格式化数据的读写,fprintf,函数,count=fprintf(fid,format,A.),fscanf函数,A,count=fscanf(fid,format,size),7,例8-1,计算当x=0 1时f(x)=ex的值,并将结果写入到文件my.txt中。,程序,x=0:0.1:1;,y=x;exp(x);%y有两行数据,fid=fopen(my.txt,w);,fprintf(fid,%6.2f%12.8fn,y);,fclose(fid);,8,例8-2,从上例中生成的文件my.txt中读取数据,并将结果输出到屏幕。,程序,fid=fopen(my.txt,r);,a,count=fscanf(fid,%f%f,2 inf);fprintf(1,%f%fn,a);,fclose(fid);,输出,同例8-1文件中的数据格式。,9,8.1.3 文件定位和文件状态,1feof函数:检测文件是否已经结束,status=feof(fid),2ferror函数:用于查询文件的输入、输出错误信息,msg=ferror(fid),3frewind函数:使位置指针重新返回文件的开头,frewind(fid),4fseek函数:设置文件的位置指针,status=fseek(fid,offset,origin),5ftell函数:用于查询当前文件指针的位置,position=ftell(fid);,10,例8-3 输出文件的大小。,程序,fid=fopen(my.txt,r);,fseek(fid,0,eof);,x=ftell(fid);,fprintf(1,File Size=%dn,x);,frewind(fid);,x=ftell(fid);,fprintf(1,File Position=%dn,x);,fclose(fid);,输出,File Size=231,File Position=0,11,按行读取数据,1fgetl函数:按行从文件中读取数据,但不读取换行符。,line=fgetl(fid),2fgets函数:用于从文件中读取行、保留换行符并把行作为字符串返回。,(,1,),line=fgets(fid),(,2,),line=fgets(fid,nchar),12,例8-4,编写一个程序,用于读取例8-1生成的数据。,程序,fid=fopen(my.txt,r);,while feof(fid)%在文件没有结束时按行读取数据,s=fgets(fid);,fprintf(1,%s,s);,end,fclose(fid);,输出,同例8-1文件中的数据格式。,13,二进制数据文件的读写,fwrite函数:用于向一个文件写入二进制数据,count=fwrite(fid,A,precision)。,fread函数:用于从文件中读二进制数据,A,count=fread(fid,size,precision),注意:使用函数fread()和fwrite()读写文件时,必须以二进制方式打开文件,14,例8-5,将5行5列“魔方阵”存入二进制文件中。,程序,fid=fopen(my.dat,w);,a=magic(5);,fwrite(fid,a,long);,fclose(fid);,15,例8-6,从二进制文件中读取“魔方阵”。,程序,fid=fopen(my.dat,r);,A,count=fread(fid,5,inf,long);,fclose(fid);,A,16,8.1.6 图像、声音文件的读写,1imread函数:从文件中读入图像,A=imread(filename,fmt),A,map=imread(filename,fmt),2image函数:显示图像,image(A),3imwrite函数:将图像写入文件,imwrite(A,filename,fmt),imwrite(A,map,filename,fmt),17,例8-7,显示一幅真彩(RGB)图像。,程序,x,map=imread(C:MATLAB7toolboxmatlabdemosstreet1.jpg);,image(x);,18,例8-8,将图像写入文件,程序,x,map=imread(C:MATLAB7toolboxmatlabdemosstreet1.jpg);,imwrite(x,my.bmp);%将图像保存为真彩色的bmp,x,map=imread(my.bmp);,image(x);,19,图像、声音文件的读写,4imfinfo函数:查询图像文件信息,innfo imflnfo(filename),5wavread函数:用于读取扩展名为“.wav”的声音文件,y=wavread(file),y,fs,nbits=wavread(file),6wavwrite函数:用于将数据写入到扩展名为“wav”的声音文件中,wavwrite(y,fs,nbits,wavefile),7wavplay函数:利用windows音频输出设备播放声音,wavplay(y,fs),20,例8-9,读取一个音频数据文件,以不同频率播放,并显示声音波形。,程序:,y=wavread(C:MATLAB7toolboxsimulinksimdemossimgeneraltoilet.wav),plot(y);,wavplay(y);,wavplay(y,11025);,wavplay(y,44100);,21,8.2 应用程序接口,MATLAB,的外部接口应用包括如下内容:,(,1)在MATLAB中调用已有的C/C+语言代码;,(2)在C/C+语言中调用MATLAB的算法;,(3)利用COM标准进行客户/服务器模式开发;,例如在Visual Basic程序或者Microsoft Excel中调用MATLAB的算法,(4)在C/C+语言中读写MAT数据文件。,22,8.2.1 MEX文件,例8-10 简单MEX文件示例mexHelloWorld.c。,程序:,#include mex.h,void mexFunction(int nlhs,mxArray*plhs,int nrhs,const mxArray*prhs),mexPrintf(Hello Matlab World!);,23,8.2.2 MATLAB计算引擎,MATLAB的计算引擎应用就是利用MATLAB提供的一组接口函数,在用户开发的C/C+语言应用程序中,通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务。,24,例8-11,设计一程序,在C/C+语言中调用mesh函数来绘制高斯矩阵的曲面。,解题步骤:,25,例8-11,程序:,#include,#include engine.h,void main(),Engine*ep;,int status=0;,/打开计算引擎,ep=engOpen(NULL);,if(ep=(Engine*)NULL),printf(错误:无法打开MATLAB计算引擎n);,exit(-1);,/执行MATLAB指令,engEvalString(ep,mesh(peaks););,getchar();,/关闭MATLAB计算引擎,status=engClose(ep);,if(status!=0),printf(无法正常关闭MATLAB计算引擎n);,exit(-1);,26,基于COM组件的接口编程,该方法的主要特点有:,(1)应用程序完全脱离MATLAB工作环境;,(2)MATLAB数学库和工具箱中包括的各种各样的函数,所以降低了编写算法难度;,(3)由于将算法程序做成了COM组件的形式,所以实现了算法的保密。,27,在C/C+语言中读写MAT数据文件,支持C/C+语言读写MAT文件的函数库有下面几个:,1打开数据文件matOpen,MATFile*matOpen(const char*filename,const char*mode),2关闭数据文件matClose,int matClose(MATFile*mfp),3获取变量matGetVariable,mxArray*matGetVariable(MATFile*mfp,const char*name),4写入数据matPutVariable,int matPutVariable(MATFile*mfp,const char*name,const mxArray*mp),28,扩展阅读,8.3 结构数组,8.4 元胞数组,8.5 面向对象程序设计,29,应用举例,例8-12 在C/C+语言中调用MATLAB计算魔方阵,并将结果显示到屏幕。,30,程序代码1,#include engine.h,#include,void main(),Engine*ep;,double*p;,mxArray*equation;,int i=0,j=0;,int status=0;,/打开计算引擎,ep=engOpen(NULL);,if(ep=(Engine*)NULL),printf(错误:无法打开MATLAB计算引擎n);,exit(-1);,31,程序代码2,/执行MATLAB指令,engEvalString(ep,A=magic(5););,equation=engGetVariable(ep,A);,p=mxGetPr(equation);,printf(nMATLAB 中计算magic(5)n);,for(i=0;i5;i+),for(j=0;j5;j+),printf(%8.0lf,*(p+i+j*5);,printf(n);,/关闭MATLAB计算引擎,status=engClose(ep);,if(status!=0),printf(无法正常关闭MATLAB计算引擎n);,exit(-1);,32,例8-13,33,程序代码1,#include,#include,#include engine.h,void main(),Engine*ep;,int status=0;,ep=engOpen(NULL);,/执行MATLAB指令,double A=2,3,4,-1,1,-1,3,-5,1,B=5,5,9;,double*pa,*pb,*pc;,mxArray*x,*y,*z;,34,程序代码2,x=mxCreateDoubleMatrix(3,3,mxREAL);,y=mxCreateDo
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!