




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第8章高级编程技术,2,本章目标,掌握MATLAB文件处理方法理解MATLAB应用程序接口的原理了解结构和元胞这两种复杂数据类型了解面向对象编程的基本概念,3,主要内容,8.1文件8.2应用程序接口,4,8.1文件,文件可分为两类:文本文件由字符和与字符的显示格式有关的控制符构成常见扩展名:“TXT”、“BAT”、“HTM”二进制文件二进制文件为非文本文件常见扩展名:“COM”、“EXE”、“BMP”、“WAV”,5,MATLAB中基本的低级文件I/O指令:,1打开和关闭文件fopen、fclose2格式读写fprintf、fscanf、fgetl、fgets3非格式读写fread、fwrite4文件定位和状态feof、fseek、ftell、ferror、frewind,6,8.1.1文件的打开与关闭,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),7,8.1.2格式化数据的读写,fprintf函数count=fprintf(fid,format,A.)fscanf函数A,count=fscanf(fid,format,size),8,例8-1,计算当x=01时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);,9,例8-2,从上例中生成的文件my.txt中读取数据,并将结果输出到屏幕。程序fid=fopen(my.txt,r);a,count=fscanf(fid,%f%f,2inf);fprintf(1,%f%fn,a);fclose(fid);输出同例8-1文件中的数据格式。,10,8.1.3文件定位和文件状态,1feof函数:检测文件是否已经结束status=feof(fid)2ferror函数:用于查询文件的输入、输出错误信息msg=ferror(fid)3frewind函数:使位置指针重新返回文件的开头frewind(fid)4fseek函数:设置文件的位置指针status=fseek(fid,offset,origin)5ftell函数:用于查询当前文件指针的位置position=ftell(fid);,11,例8-3输出文件的大小。,程序fid=fopen(my.txt,r);fseek(fid,0,eof);x=ftell(fid);fprintf(1,FileSize=%dn,x);frewind(fid);x=ftell(fid);fprintf(1,FilePosition=%dn,x);fclose(fid);,输出FileSize=231FilePosition=0,12,8.1.4按行读取数据,1fgetl函数:按行从文件中读取数据,但不读取换行符。line=fgetl(fid)2fgets函数:用于从文件中读取行、保留换行符并把行作为字符串返回。(1)line=fgets(fid)(2)line=fgets(fid,nchar),13,例8-4,编写一个程序,用于读取例8-1生成的数据。程序fid=fopen(my.txt,r);whilefeof(fid)%在文件没有结束时按行读取数据s=fgets(fid);fprintf(1,%s,s);endfclose(fid);输出同例8-1文件中的数据格式。,14,8.1.5二进制数据文件的读写,fwrite函数:用于向一个文件写入二进制数据count=fwrite(fid,A,precision)。fread函数:用于从文件中读二进制数据A,count=fread(fid,size,precision)注意:使用函数fread()和fwrite()读写文件时,必须以二进制方式打开文件,15,例8-5,将5行5列“魔方阵”存入二进制文件中。程序fid=fopen(my.dat,w);a=magic(5);fwrite(fid,a,long);fclose(fid);,16,例8-6,从二进制文件中读取“魔方阵”。程序fid=fopen(my.dat,r);A,count=fread(fid,5,inf,long);fclose(fid);A,17,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),18,例8-7,显示一幅真彩(RGB)图像。程序x,map=imread(C:MATLAB7toolboxmatlabdemosstreet1.jpg);image(x);,19,例8-8将图像写入文件,程序x,map=imread(C:MATLAB7toolboxmatlabdemosstreet1.jpg);imwrite(x,my.bmp);%将图像保存为真彩色的bmpx,map=imread(my.bmp);image(x);,20,8.1.6图像、声音文件的读写,4imfinfo函数:查询图像文件信息innfoimflnfo(filename)5wavread函数:用于读取扩展名为“.wav”的声音文件y=wavread(file)y,fs,nbits=wavread(file)6wavwrite函数:用于将数据写入到扩展名为“wav”的声音文件中wavwrite(y,fs,nbits,wavefile)7wavplay函数:利用windows音频输出设备播放声音wavplay(y,fs),21,例8-9,读取一个音频数据文件,以不同频率播放,并显示声音波形。程序:y=wavread(C:MATLAB7toolboxsimulinksimdemossimgeneraltoilet.wav)plot(y);wavplay(y);wavplay(y,11025);wavplay(y,44100);,22,8.2应用程序接口,MATLAB的外部接口应用包括如下内容:(1)在MATLAB中调用已有的C/C+语言代码;(2)在C/C+语言中调用MATLAB的算法;(3)利用COM标准进行客户/服务器模式开发;例如在VisualBasic程序或者MicrosoftExcel中调用MATLAB的算法(4)在C/C+语言中读写MAT数据文件。,23,8.2.1MEX文件,例8-10简单MEX文件示例mexHelloWorld.c。程序:#includemex.hvoidmexFunction(intnlhs,mxArray*plhs,intnrhs,constmxArray*prhs)mexPrintf(HelloMatlabWorld!);,24,8.2.2MATLAB计算引擎,MATLAB的计算引擎应用就是利用MATLAB提供的一组接口函数,在用户开发的C/C+语言应用程序中,通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务。,25,例8-11,设计一程序,在C/C+语言中调用mesh函数来绘制高斯矩阵的曲面。解题步骤:,26,例8-11程序:,#include#includeengine.hvoidmain()Engine*ep;intstatus=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);,27,8.2.3基于COM组件的接口编程,该方法的主要特点有:(1)应用程序完全脱离MATLAB工作环境;(2)MATLAB数学库和工具箱中包括的各种各样的函数,所以降低了编写算法难度;(3)由于将算法程序做成了COM组件的形式,所以实现了算法的保密。,28,8.2.4在C/C+语言中读写MAT数据文件,支持C/C+语言读写MAT文件的函数库有下面几个:1打开数据文件matOpenMATFile*matOpen(constchar*filename,constchar*mode)2关闭数据文件matCloseintmatClose(MATFile*mfp)3获取变量matGetVariablemxArray*matGetVariable(MATFile*mfp,constchar*name)4写入数据matPutVariableintmatPutVariable(MATFile*mfp,constchar*name,constmxArray*mp),29,扩展阅读,8.3结构数组8.4元胞数组8.5面向对象程序设计,30,应用举例,例8-12在C/C+语言中调用MATLAB计算魔方阵,并将结果显示到屏幕。,31,程序代码1,#includeengine.h#includevoidmain()Engine*ep;double*p;mxArray*equation;inti=0,j=0;intstatus=0;/打开计算引擎ep=engOpen(NULL);if(ep=(Engine*)NULL)printf(错误:无法打开MATLAB计算引擎n);exit(-1);,32,程序代码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);,33,例8-13,34,程序代码1,#include#include#includeengine.hvoidmain()Engine*ep;intstatus=0;ep=engOpen(NULL);/执行MATLAB指令doubleA=2,3,4,-1,1,-1,3,-5,1,B=5,5,9;double*pa,*pb,*pc;mxArray*x,*y,*z;,35,程序代码2,x=mxCreateDoubleMatrix(3,3,mxREAL);y=mxCreateDoubleMatrix(3,1,mxREAL);pa=mxGetPr(x);pb=mxGetPr(y);memcpy(pa,A,9*sizeof(double);memcpy(pb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度企业行政部合同电子化存档与审批流程规范合同
- 2025年新能源并网输变电工程承揽合同样本
- 2025年医院定制化心理咨询服务及危机干预协议书
- 2025年线上线下整合营销方案设计与执行合同
- 2025年欧洲地区出版物跨境物流及关税优惠合作协议
- 2025年新媒体直播平台品牌战略联盟合作协议
- 2025年智能化家居系统定制施工合同(含隐蔽线路工程)
- 2025年度豪华汽车过户、交易及全面违章处理服务合同
- 2025年社区文化活动中心场地租赁与管理服务合同
- 2025年新型城镇化项目停车场设施更新及全方位养护服务合同
- 2025至2030年中国奶牛养殖行业竞争格局分析及投资战略咨询报告
- 光伏施工基本知识培训课件
- 创伤性血气胸的急救与护理
- 2025关于医疗平台与医疗机构合作合同模板
- 福州工会考试试题及答案
- 学校后勤工作管理培训
- 胰腺炎的营养治疗与护理
- 教师校园安全培训课件
- 头皮健康与头发生长关系的研究
- 财务结账相关管理制度
- 叉车维修方案(3篇)
评论
0/150
提交评论