Matlab教程Ch8(全)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

31
程序代码-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); } }
21
8.2 应用程序接口
MATLAB的外部接口应用包括如下内容:


(1)在MATLAB中调用已有的C/C++语言代码; (2)在C/C++语言中调用MATLAB的算法; (3)利用COM标准进行客户/服务器模式开发;

例如在Visual Basic程序或者Microsoft Excel中调用 MATLAB的算法
输出 File Size = 231 File Position = 0
11
8.1.4按行读取数据
1.fgetl函数:按行从文件中读取数据,但不读
取换行符。

line=fgetl(fid)
2.fgets函数:用于从文件中读取行、保留换行
符并把行作为字符串返回。


(1)line=fgets(fid) (2)line=fgets(fid,nchar)
3.frewind函数:使位置指针重新返回文件的开头

4.fseek函数:设置文件的位置指针

5.ftell函数:用于查询当前文件指针的位置

10
例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);
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
2.关闭数据文件──matClose

3.获取变量──matGetVariable

4.写入数据──matPutVariable

28
扩展阅读


8.3 结构数组
8.4 元胞数组

8.5 面向对象程序设计
5+6i
Matlab
29
应用举例
例8-12 在C/C++语言中调用MATLAB计算魔方阵, 并将结果显示到屏幕。
23
8.2.2 MATLAB计算引擎
MATLAB的计算引擎应用就是利用MATLAB 提供的一组接口函数,在用户开发的C/C++语 言应用程序中,通过某种通信机制后台调用 MATLAB应用程序以完成复杂的系统任务。
24
例8-11
设计一程序,在C/C++语言中调用mesh函数来 绘制高斯矩阵的曲面。 解题步骤:
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文件中的数据格式。
同例8-1文件中的数据格式。
9
8.1.3 文件定位和文件状态
1.feof函数:检测文件是否已经结束

status=feof(fid)
2.ferror函数:用于查询文件的输入、输出错误信息

msg=ferror(fid)
frewind(fid) status=fseek(fid, offset, origin) position=ftell(fid);
2.image函数:显示图像

3.imwrite函数:将图像写入文件

17
例8-7
显示一幅真彩(RGB)图像。 程序 [x,map]=imread('C:\MATLAB7\toolbox\matlab\d emos\street1.jpg'); image(x);
18
例8-8 将图像写入文件
16
8.1.6 图像、声音文件的读写
1.imread函数:从文件中读入图像

A = imread(filename,fmt) [A, map] = imread(filename,fmt) image(A) imwrite(A, filename, fmt) imwrite(A, map, filename, fmt)
程序 [x,map]=imread('C:\MATLAB7\toolbox\matlab\demos\stre et1.jpg'); imwrite(x,'my.bmp'); %将图像保存为真彩色 的bmp [x,map]=imread('my.bmp'); image(x);
19
8.1.6图像、声音文件的读写
26
8.2.3基于COM组件的接口编程
该方法的主要特点有: (1)应用程序完全脱离MATLAB工作环境; (2)MATLAB数学库和工具箱中包括的各种各 样的函数,所以降低了编写算法难度; (3)由于将算法程序做成了COM组件的形式, 所以实现了算法的保密。
27
8.2.4在C/C++语言中读写MAT数据文件

8
例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);
输出
4.文件定位和状态

feof、fseek、ftell、ferror、frewind
5
8.1.1文件的打开与关闭
1.fopen函数 fid=fopen(filename,permission) [fid,message]=fopen(filename,permssion) [filename,permission,machineformat]=fopen(fid) fid =fopen('all')
4.imfinfo函数:查询图像文件信息 innfo = imflnfo(filename)
5.wavread函数:用于读取扩展名为“.wav”的声音文件 y=wavread(file) [y, fs, nbits]=wavread(file) 6.wavwrite函数:用于将数据写入到扩展名为“wav”的

(4)在C/C++语言中读写MAT数据文件。
Fra Baidu bibliotek22
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章 高级编程技术
1
本章目标


掌握MATLAB文件处理方法
理解MATLAB应用程序接口的原理


了解结构和元胞这两种复杂数据类型
了解面向对象编程的基本概念
2
主要内容
8.1文件
8.2
应用程序接口
3
8.1文件

文件可分为两类:

文本文件
由字符和与字符的显示格式有关的控制符构成 常见扩展名:“TXT” 、“BAT”、“HTM”
支持C/C++语言读写MAT文件的函数库有下面几个: 1.打开数据文件──matOpen

MATFile * matOpen(const char *filename,const char *mode) int matClose(MATFile *mfp) mxArray *matGetVariable(MATFile *mfp,const char *name) int matPutVariable(MATFile *mfp, const char *name,const mxArray *mp)
2.fclose函数 status=fclose(fid) status=fclose('all')
例:打开一个名为std.dat的数据文件并进行读操作,命令为:
fid=fopen('my.txt','r')
6
8.1.2格式化数据的读写
fprintf函数

count=fprintf(fid,format , A ...)


二进制文件
二进制文件为非文本文件 常见扩展名:“COM”、“EXE” 、“BMP” 、 “WAV”

4
MATLAB中基本的低级文件I/O指令:
1.打开和关闭文件

fopen、fclose
2.格式读写

fprintf、fscanf、fgetl、fgets
3.非格式读写

fread、fwrite
13
8.1.5二进制数据文件的读写

fwrite函数:用于向一个文件写入二进制数据

count=fwrite(fid, A, precision)。

fread函数:用于从文件中读二进制数据

[A,count]=fread(fid, size, precision)

注意:使用函数fread()和fwrite()读写文件时,必须以二 进制方式打开文件
30
程序代码-1
#include "engine.h" #include <stdio.h> 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); }
声音文件中

wavwrite(y, fs, nbits, wavefile)
7.wavplay函数:利用windows音频输出设备播放声音 wavplay(y,fs)
20
例8-9
读取一个音频数据文件,以不同频率播放,并显 示声音波形。 程序: y=wavread('C:\MATLAB7\toolbox\simulink\simd emos\simgeneral\toilet.wav') plot(y); wavplay(y); wavplay(y,11025); wavplay(y,44100);
25
例8-11 程序:
#include <stdio.h> #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); } }
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.8f\n',y); fclose(fid);
相关文档
最新文档