当前位置:文档之家› Matlab教程高级编程技术

Matlab教程高级编程技术


16
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)
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);
8.3 结构数组 8.4 元胞数组
Matlab
8.5 面向对象程序设计
5+6i
29
应用举例
例8-12 在C/C++语言中调用MATLAB计算魔方 阵,并将结果显示到屏幕.
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); }
status=fseek(fid, offset, origin)
5.ftell函数:用于查询当前文件指针的位置
position=ftell(fid);
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);
支持C/C++语言读写MAT文件的函数库有下面几个: 1.打开数据文件——matOpen
MATFile * matOpen(const char *filename,const char *mode)
2.关闭数据文件——matClose
int matClose(MATFile *mfp)
3.获取变量——matGetVariable
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文件中的数据格式.
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); } }
mxArray *matGetVariable(MATFile *mfp,const char *name)
4.写入数据——matPutVariable
int matPutVariable(MATFile *mfp, const char *name,const mxArray *mp)
28
扩展阅读
19
8.1.6图像,声音文件的读写
4.imfinfo函数:查询图像文件信息
innfo = imflnfo(filename)
5.wavread函数:用于读取扩展名为".wav"的声音文件
y=wavread(file) [y, fs, nbits]=wavread(file)
6.wavwrite函数:用于将数据写入到扩展名为"wav"的 声音文件中
26
8.2.3基于COM组件的接口编程
该方法的主要特点有: (1)应用程序完全脱离MATLAB工作环境; (2)MATLAB数学库和工具箱中包括的各种各 样的函数,所以降低了编写算法难度; (3)由于将算法程序做成了COM组件的形式, 所以实现了算法的保密.
27
8.2.4在C/C++语言中读写MAT数据文件
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); } }
(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!"); }
21
8.2 应用程序接口
MATLAB的外部接口应用包括如下内容:
(1)在MATLAB中调用已有的C/C++语言代码; (2)在C/C++语言中调用MATLAB的算法; (3)利用COM标准进行客户/服务器模式开发;
例如在Visual Basic程序或者Microsoft Excel中调用 MATLAB的算法
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
输出 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)
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 ...)
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);
相关主题