915199-MATLAB程序设计与应用-第13章 MATLAB外部程序接口技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第13章 MATLAB外部程序接口技术
4.mx函数
在C程序中,使用MATLAB数据时还用到MATLAB 提供的接口函数中的mx函数,以完成对mxArray对 象的操作。MATLAB的矩阵运算是以mxArray结构 体(C++中是mwArray类)为核心构建的。
C 语言 mx 函数 char *mxArrayToString(const mxArray *array_ptr); mxArray *mxCreateDoubleMatrix(int m,int n, mxComplexity ComplexFlag); mxArray *mxCreateString(const char *str) void mxDestroyArray(mxArray *array_ptr); int mxGetM(const mxArray *array_ptr); int mxGetN(const mxArray *array_ptr); void mxSetM(mxArray *array_ptr,int m); void mxSetN(mxArray *array_ptr,int m); double *mxGetPr(const mxArray *array_ptr); double *mxGetPi(const mxArray *array_ptr); void mxSetPr(mxArray *array_ptr,double *pr); void mxSetPi(mxArray *array_ptr,double *pr); void *mxCalloc(size_t n,size_t size);
x=fscanf(fid,'%5d',100);
y=fscanf(fid,'%5d',[10,10]);
第13章 MATLAB外部程序接口技术
(2)fprintf函数 fprintf函数可以将数据按指定格式写入到文本文 件中,其调用格式为:
count=fprintf(fid,fmt,A)
例13-1 计算当x=[0.0,0.1,0.2,…,1.0]时, f(x)=ex的值,并将结果写入文件demo1.txt。 程序如下: x=0:0.1:1; Y=[x;exp(x)]; fid=fopen('demo1.txt','w'); fprintf(fid,'%6.2f %12.8f\n',Y); fclose(fid);
为了在Word环境下调用MATLAB的计算功能,需 要调用MATLAB的Notebook软件工具,它为Word 提供M-Book.dot模板。利用该模板创建的Word文 档通常称为M-Book文档。 1.Notebook的安装与启动 >> notebook -setup
第13章 MATLAB外部程序接口技术
第13章 MATLAB外部程序接口技术
(3)fgetl与fgets函数 除上述对文本文件进行读写操作的函数外,读取文本文 件的函数还有fgetl和fgets,它们按行读取数据,其调用 格式为: line=fgetl(fid) line=fgets(fid,nchar)
例13-2 读出例13-1生成的文件demo1.txt中的数据。 fid=fopen('demo1.txt','r'); while 1
[A,count]=fscanf(fid,fmt,size)
格式符 %d %u %o %x %e
含义 十进制整数 无符号的十进制整数 八进制整数 十六进制整数(0~9,a~f) 指数形式的实数
例如:
格式符 %f %g %c %s
含义 小数形式的实数 根据输出项的大小自动选择 e 格式或 f 格式 字符 不包含空格的字符串
line=fgetl(fid); if line<0
break end disp(line) end fclose(fid);
第13章 MATLAB外部程序接口技术
(4)textscan函数
如果一个文件中的数据全部由ASCII字符组成,且 数据间有间隔符(如空格、逗号、分号、制表位), 则文件称为有格式文件。有格式文件可以使用文本 输入函数textscan读取数据,函数调用格式为:
2.Notebook菜单项
M-Book模板定义了Word与MATLAB进行通信的 宏指令、文档样式和工具栏。
菜单命令 Define Input Cell Define AutoInit Cell Define Calc Zone Undefine Cells Purge Selected Output Cells Group Cells Ungroup Cells Hide Cell Markers Toggle Graph Output for Cell Evaluate Cell Evaluate Calc Zone Evaluate MATLAB Notebook Evaluate Loop Bring MATLAB to Front Notebook Options
fid=fopen('textdemo.txt','r');
grades=textscan(fid,'%s %d %d %d',3,'headerlines',1);
第13章 MATLAB外部程序接口技术
(5)fread函数 该函数从文件中读入二进制数据,其调用格式为: [A,count]=fread(fid,size,precision,skip)
第13章 MATLAB外部程序接口技术
(2)fclose函数 fclose函数用于关闭已打开的文件,其调用格式为: status=fclose(fid)
第13章 MATLAB外部程序接口技术
2.文件的读写 (1)fscanf函数 fscanf 函数用于读取文本文件的内容,并按指定 格式存入矩阵,其调用格式为:
第13章 MATLAB外部程序接口技术
第13章 MATLAB外部程序接口技术 13.1 MATLAB与Office软件的混合使用 13.2 MATLAB数据接口 13.3 MATLAB与其他语言的接口
第13章 MATLAB外部程序接口技术
13.1 MATLAB与Office软件的混合使用
13.1.1 在Word中使用MATLAB
a=1:5; fid=fopen('fdat.bin','w'); fwrite(fid,a,'int16'); fclose(fid); fid=fopen('fdat.bin','r'); status=fseek(fid,6,'bof'); four=fread(fid,1,'int16'); position=ftell(fid); status=fseek(fid,-4,'cof'); three=fread(fid,1,'int16'); status=fclose(fid);
第13章 MATLAB外部程序接口技术
13.2 MATLAB数据接口
MATLAB提供多种方法支持将磁盘文件和剪贴板 中的数据导入到MATLAB的工作区,最简单的办 法是使用数据导入向导(可通过在“主页”选项 卡“变量”命令组中选择“导入数据”命令按钮 或在命令行窗口执行uiimport命令来激活它), 而在M文件中则可以使用MATLAB文件操作函数。
13.1.2 在Excel中使用MATLAB
通过Spreadsheet Link,可以在Excel工作区和 MATLAB工作空间之间进行数据交换,也可以使 用插件方式在Excel中调用MATLAB的算法。 1.Spreadsheet Biblioteka Baiduink的安装与启动
第13章 MATLAB外部程序接口技术
2.Spreadsheet Link的操作 (1)将Excel表格中的数据导出到MATLAB工作空间 中 (2)从MATLAB工作空间导入数据到Excel表格中 (3)调用MATLAB函数进行运算
第13章 MATLAB外部程序接口技术
3.单元的使用 在MATLAB Notebook中,凡是在Word与 MATLAB之间进行传递的内容称为单元(cell), 它是Notebook与MATLAB交互的基本单位。 (1)输入输出单元 定义输入单元的方法 输入单元执行后产生蓝色的输出单元。 (2)自动初始化单元 (3)单元组
第13章 MATLAB外部程序接口技术
3.数据文件定位
(1)fseek函数 该函数用于定位文件位置指针,其调用格式为:
status=fseek(fid,offset,origin)
例如:
fseek(fid,0,-1)
%指针指向文件头
fseek(fid,-5,'eof') 字节
%指针指向文件尾前第5个
例13-4 假设文件alphabet.txt的内容是按顺序排列的26个 大写英文字母,读取前5个字母的ASCII和这5个字符。 程序如下: fid=fopen('alphabet.txt','r'); c=fread(fid,5); frewind(fid); d=fread(fid,5,'*char'); fclose(fid);
C=textscan(fid,fmt,N,param,value)
例13-3 假定文件textdemo.txt中有以下格式的数据:
Name English Chinese Mathmatics
Wang
99 98
100
Li
98 89
70
Zhang 80 90
97
Zhao
77 65
87
从该文件中将前3个数据读入到grades的程序段如下:
功能
定义输入单元 定义自初始化单元 定义计算区 去除单元定义 删除选择的输出单元 定义单元组 将单元组转换为单个单元 隐藏单元标志 嵌入生成的图形 运行当前单元或单元组 运行计算区 运行 M-Book 文档中的所有输入单元 循环运行输入单元 将 MATLAB 调到前台运行 设置 Notebook 的选项
第13章 MATLAB外部程序接口技术
13.2.2 MAT文件与应用
1.MAT文件 save命令可以将MATLAB系统内部数据保存为 MAT文件,而load命令可以将磁盘上的MAT文件 中的数据读入到MATLAB系统中。 MATLAB提供的用于操作MAT文件的API函数封 装于两个标准库文件中:libmat.lib和libmx.lib。 前者用于对MAT文件的操作,后者用于对MAT文 件中矩阵的操作 2.C语言MAT函数 用于在C程序中对MAT文件进行操作。
第13章 MATLAB外部程序接口技术
4.计算区 计算区(calc zone)是一个由普通Word文本、输 入单元和输出单元组成的连续区,用于描述某个 具体的作业或问题。在计算区里,用户可以根据 描述问题的需要,安排段落、标题、分栏,而不 受计算区外的有关格式的约束。 定义计算区的方法
第13章 MATLAB外部程序接口技术
第13章 MATLAB外部程序接口技术
(3)feof函数 该函数用来判断当前的文件位置指针是否到达文件 尾部: status=feof(fid) 当到达文件结束位置时,测试结果为1,否则返回0。 (4)ferror函数 用来查询最近一次输入或输出操作中的出错信息: message=ferror(fid)
第13章 MATLAB外部程序接口技术
13.2.1 文件操作
1.文件打开与关闭 (1)fopen函数 fid=fopen(filename,permission) r 以读方式打开一个文件。 w 以写方式打开一个文件。 a 打开一个文件,随后的操作可在该文件末尾添加数据 r+ 以读和写方式打开一个文件 fopen默认打开二进制文件,如果打开的是文本文件,则需在 上述允许方式后加t,如rt、wt等。例如: F1=fopen('old.txt','rt') F2=fopen('new.dat','r+')
第13章 MATLAB外部程序接口技术
3.MAT文件的基本操作
在C程序中,通过指向MAT文件的指针对文件进 行操作,定义指向MAT文件的指针的格式为: MATFile *mfp; (1)打开MAT文件 mfp=matOpen(filename,mode)
第13章 MATLAB外部程序接口技术
(2)读写MAT文件 ① 向MAT文件中写入一个矩阵。 matPutVariable(mfp,name,mp) matPutArrayAsGlobal(mfp,mp) ② 获取MAT文件中的变量列表。 matGetDir(mfp,num) ③ 从MAT文件中读取一个矩阵。 matGetVariable(mfp,name) (3)关闭MAT文件。 matClose(mfp)
(2)ftell函数
该函数用来查询文件指针的当前位置,其调用格式为:
position=ftell(fid) f数te。ll函若数返的回返值回为值-1为,从表文示件获头取到文指件针当当前前位位置置失的败字。节
第13章 MATLAB外部程序接口技术
例13-6 下列程序执行后,变量four、position和 three的值是多少?
第13章 MATLAB外部程序接口技术
(6)fwrite函数 fwrite 函数按照指定的数据类型将矩阵中的元素写入 到文件中,其调用格式为: count=fwrite(fid,A,precision) 例13-5 建立一数据文件magic5.dat,用于存放5阶魔 方阵。 程序如下: fid=fopen('magic5.dat','w'); cnt=fwrite(fid,magic(5),'int32'); fclose(fid);