为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Matlab读取文件

2012-10-25 36页 ppt 367KB 35阅读

用户头像

is_566785

暂无简介

举报
Matlab读取文件null第8章 高级编程技术第8章 高级编程技术本章目标本章目标掌握MATLAB文件处理方法 理解MATLAB应用程序接口的原理 了解结构和元胞这两种复杂数据类型 了解面向对象编程的基本概念主要内容主要内容8.1文件 8.2 应用程序接口8.1文件 8.1文件 文件可分为两类: 文本文件 由字符和与字符的显示格式有关的控制符构成 常见扩展名:“TXT” 、“BAT”、“HTM” 二进制文件 二进制文件为非文本文件 常见扩展名:“COM”、“EXE” 、“BMP” 、“WAV”MATLAB中基本的低级文件I/O指令:M...
Matlab读取文件
null第8章 高级编程技术第8章 高级编程技术本章目标本章目标掌握MATLAB文件处理方法 理解MATLAB应用程序接口的原理 了解结构和元胞这两种复杂数据类型 了解面向对象编程的基本概念主要内容主要内容8.1文件 8.2 应用程序接口8.1文件 8.1文件 文件可分为两类: 文本文件 由字符和与字符的显示格式有关的控制符构成 常见扩展名:“TXT” 、“BAT”、“HTM” 二进制文件 二进制文件为非文本文件 常见扩展名:“COM”、“EXE” 、“BMP” 、“WAV”MATLAB中基本的低级文件I/O指令:MATLAB中基本的低级文件I/O指令:1.打开和关闭文件 fopen、fclose 2.格式读写 fprintf、fscanf、fgetl、fgets 3.非格式读写 fread、fwrite 4.文件定位和状态 feof、fseek、ftell、ferror、frewind8.1.1文件的打开与关闭8.1.1文件的打开与关闭1.fopen函数 fid=fopen(filename,permission) [fid,message]=fopen(filename,permssion) [filename,permission,machineformat]=fopen(fid) fid =fopen('all') 2.fclose函数 status=fclose(fid) status=fclose('all') 例:打开一个名为std.dat的数据文件并进行读操作,命令为: fid=fopen('my.txt','r')8.1.2格式化数据的读写8.1.2格式化数据的读写fprintf函数 count=fprintf(fid,format , A ...) fscanf函数 [A, count]=fscanf(fid, format, size) 例8-1例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.8f\n',y); fclose(fid);例8-2例8-2从上例中生成的文件my.txt中读取数据,并将结果输出到屏幕。 程序 fid = fopen('my.txt','r'); [a,count] = fscanf(fid,'%f %f',[2 inf]); fprintf(1,'%f %f\n',a); fclose(fid); 输出 同例8-1文件中的数据格式。8.1.3 文件定位和文件状态8.1.3 文件定位和文件状态1.feof函数:检测文件是否已经结束 status=feof(fid) 2.ferror函数:用于查询文件的输入、输出错误信息 msg=ferror(fid) 3.frewind函数:使位置指针重新返回文件的开头 frewind(fid) 4.fseek函数:设置文件的位置指针 status=fseek(fid, offset, origin) 5.ftell函数:用于查询当前文件指针的位置 position=ftell(fid); 例8-3 输出文件的大小。例8-3 输出文件的大小。程序 fid=fopen('my.txt','r'); fseek(fid,0,'eof'); x=ftell(fid); fprintf(1,'File Size=%d\n',x); frewind(fid); x=ftell(fid); fprintf(1,'File Position =%d\n',x); fclose(fid); 输出 File Size = 231 File Position = 0 8.1.4按行读取数据8.1.4按行读取数据1.fgetl函数:按行从文件中读取数据,但不读取换行符。 line=fgetl(fid) 2.fgets函数:用于从文件中读取行、保留换行符并把行作为字符串返回。 (1)line=fgets(fid) (2)line=fgets(fid,nchar) 例8-4例8-4编写一个程序,用于读取例8-1生成的数据。 程序 fid=fopen('my.txt','r'); while ~feof(fid)%在文件没有结束时按行读取数据 s=fgets(fid); fprintf(1,'%s',s); end fclose(fid); 输出 同例8-1文件中的数据格式。8.1.5二进制数据文件的读写8.1.5二进制数据文件的读写fwrite函数:用于向一个文件写入二进制数据 count=fwrite(fid, A, precision)。 fread函数:用于从文件中读二进制数据 [A,count]=fread(fid, size, precision) 注意:使用函数fread()和fwrite()读写文件时,必须以二进制方式打开文件 例8-5例8-5将5行5列“魔方阵”存入二进制文件中。 程序 fid=fopen('my.dat','w'); a=magic(5); fwrite(fid,a,'long'); fclose(fid);例8-6例8-6从二进制文件中读取“魔方阵”。 程序 fid=fopen('my.dat','r'); [A,count]=fread(fid, [5, inf], 'long'); fclose(fid); A 8.1.6 图像、声音文件的读写8.1.6 图像、声音文件的读写1.imread函数:从文件中读入图像 A = imread(filename,fmt) [A, map] = imread(filename,fmt) 2.image函数:显示图像 image(A) 3.imwrite函数:将图像写入文件 imwrite(A, filename, fmt) imwrite(A, map, filename, fmt) 例8-7例8-7显示一幅真彩(RGB)图像。 程序 [x,map]=imread('C:\MATLAB7\toolbox\matlab\demos\street1.jpg'); image(x); 例8-8 将图像写入文件例8-8 将图像写入文件程序 [x,map]=imread('C:\MATLAB7\toolbox\matlab\demos\street1.jpg'); imwrite(x,'my.bmp'); %将图像保存为真彩色的bmp [x,map]=imread('my.bmp'); image(x); 8.1.6图像、声音文件的读写8.1.6图像、声音文件的读写4.imfinfo函数:查询图像文件信息 innfo = imflnfo(filename) 5.wavread函数:用于读取扩展名为“.wav”的声音文件 y=wavread(file) [y, fs, nbits]=wavread(file) 6.wavwrite函数:用于将数据写入到扩展名为“wav”的声音文件中 wavwrite(y, fs, nbits, wavefile) 7.wavplay函数:利用windows音频输出设备播放声音 wavplay(y,fs)例8-9例8-9读取一个音频数据文件,以不同频率播放,并显示声音波形。 程序: y=wavread('C:\MATLAB7\toolbox\simulink\simdemos\simgeneral\toilet.wav') plot(y); wavplay(y); wavplay(y,11025); wavplay(y,44100);8.2 应用程序接口 8.2 应用程序接口 MATLAB的外部接口应用包括如下内容: (1)在MATLAB中调用已有的C/C++语言代码; (2)在C/C++语言中调用MATLAB的算法; (3)利用COM标准进行客户/服务器模式开发; 例如在Visual Basic程序或者Microsoft Excel中调用MATLAB的算法 (4)在C/C++语言中读写MAT数据文件。8.2.1 MEX文件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!"); } 8.2.2 MATLAB计算引擎8.2.2 MATLAB计算引擎MATLAB的计算引擎应用就是利用MATLAB提供的一组接口函数,在用户开发的C/C++语言应用程序中,通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务。 例8-11例8-11设计一程序,在C/C++语言中调用mesh函数来绘制高斯矩阵的曲面。 解步骤: 例8-11 程序:例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); } } 8.2.3基于COM组件的接口编程8.2.3基于COM组件的接口编程该方法的主要特点有: (1)应用程序完全脱离MATLAB工作环境; (2)MATLAB数学库和工具箱中包括的各种各样的函数,所以降低了编写算法难度; (3)由于将算法程序做成了COM组件的形式,所以实现了算法的保密。8.2.4在C/C++语言中读写MAT数据文件8.2.4在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)扩展阅读扩展阅读8.3 结构数组 8.4 元胞数组 8.5 面向对象程序设计应用举例应用举例例8-12 在C/C++语言中调用MATLAB计算魔方阵,并将结果显示到屏幕。程序代码-1程序代码-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); }程序代码-2程序代码-2 // 执行MATLAB指令 engEvalString(ep,"A = magic(5);"); equation=engGetVariable(ep,"A"); p=mxGetPr(equation); printf("\nMATLAB 中计算magic(5)\n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%8.0lf",*(p+i+j*5)); printf("\n"); } // 关闭MATLAB计算引擎 status = engClose(ep); if(status != 0){ printf("无法正常关闭MATLAB计算引擎\n"); exit(-1); } } 例8-13例8-13程序代码-1程序代码-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;程序代码-2程序代码-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,B,3*sizeof(double)); engPutVariable(ep,"A",x); engPutVariable(ep,"B",y); engEvalString(ep,"C=A\\B;"); z=engGetVariable(ep,"C"); pc=mxGetPr(z); printf("\nAX=B的结果为:\n"); for(int i=0;i<3;i++) { printf("%8.0lf\n",*(pc+i)); } status = engClose(ep); }结 束 语结 束 语学好计算机的唯一途径是 你的编程能力与你在计算机上投入的时间成
/
本文档为【Matlab读取文件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索