915200-MATLAB程序设计与应用-第13章 MATLAB外部程序接口技术__源程序

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

第13章MATLAB外部程序接口技术

例13-1计算当x=[0.0,0.1,0.2,…,1.0]时,f(x)=e x的值,并将结果写入文件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);

例13-2 读出例13-1生成的文件demo1.txt中的数据。

程序如下:

fid=fopen('demo1.txt','r');

while 1

line=fgetl(fid);

if line<0

break

end

disp(line)

end

fclose(fid);

例13-3假定文件textdemo.txt中有以下格式的数据:

Name English Chinese Mathmatics

Wang 99 98 100

Li 98 89 70

Zhang 80 90 97

Zhao 77 65 87

此文件第一行为标题行,第2~5行的第1列为字符型,后3列为整型。从该文件中将前3个数据读入到grades的程序段如下:

fid=fopen('textdemo.txt','r');

grades=textscan(fid,'%s %d %d %d',3,'headerlines',1);

例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);

1

例13-5 建立一数据文件magic5.dat,用于存放5阶魔方阵。

程序如下:

fid=fopen('magic5.dat','w');

cnt=fwrite(fid,magic(5),'int32');

fclose(fid);

上述程序段将5阶魔方阵以32位整数格式写入文件magic5.dat中。下列程序则可实现对数据文件magic5.dat的读操作。

fid=fopen('magic5.dat','r');

[B,cnt]=fread(fid,[5,inf],'int32')

fclose(fid);

>> cnt

例13-6下列程序执行后,变量four、position和three的值是多少?

a=1:5;

fid=fopen('fdat.bin','w'); %以写方式打开文件fdat.bin

fwrite(fid,a,'int16'); %将a的元素以双字节整型写入文件fdat.bin

fclose(fid);

fid=fopen('fdat.bin','r'); %以读数据方式打开文件fdat.bin

status=fseek(fid,6,'bof'); %将文件指针从开始位置向尾部移动6个字节

four=fread(fid,1,'int16'); %读取第4个数据,并移动指针到下一个数据

position=ftell(fid); %ftell的返回值为8

status=fseek(fid,-4,'cof'); %将文件指针从当前位置往前移动4个字节

three=fread(fid,1,'int16'); %读取第3个数据

status=fclose(fid);

例13-7创建对MA T文件进行操作的C程序。

程序如下:

#include

#include /* 定义EXIT_FAILURE,EXIT_SUCCESS */

#include

int main()

{

MATFile *pmat; /* 定义MAT文件指针*/

mxArray *pa1,*pa2,*pa3;

double data[9]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9};

const char *file="c_matfile.mat";

int status;

/* 打开一个MAT文件,如果不存在则创建一个MAT文件,如果打开失败,则返回到系统环境 */ pmat=matOpen(file,"w");

if (pmat==NULL) {

printf("创建失败\n");

return(EXIT_FAILURE); }

2

/* 创建3个mxArray对象 */

pa1=mxCreateDoubleScalar(1.234);

if (pa1==NULL) {

printf("创建失败\n");

return(EXIT_FAILURE); }

pa2=mxCreateDoubleMatrix(3,3,mxREAL);

if (pa2==NULL) {

printf("创建失败\n");

return(EXIT_FAILURE); }

memcpy((void *)(mxGetPr(pa2)),(void *)data,sizeof(data)); pa3=mxCreateString("MAT文件示例");

if (pa3==NULL) {

printf("创建失败\n");

return(EXIT_FAILURE); }

/* 向MAT文件中写数据,失败则返回到系统环境 */

status=matPutVariable(pmat,"LocalDouble",pa1);

if (status!=0) {

printf("赋值失败\n");

return(EXIT_FAILURE); }

status=matPutVariableAsGlobal(pmat,"GlobalDouble",pa2);

if (status!=0) {

printf("赋值失败\n");

return(EXIT_FAILURE); }

status=matPutVariable(pmat,"LocalString",pa3);

if (status!=0) {

printf("赋值失败\n");

return(EXIT_FAILURE); }

/* 清除矩阵 */

mxDestroyArray(pa1);

mxDestroyArray(pa2);

mxDestroyArray(pa3);

/* 关闭MAT文件 */

if (matClose(pmat)!=0) {

printf("关闭失败\n");

return(EXIT_FAILURE); }

printf("完成\n");

return(EXIT_SUCCESS);

}

例13-8 编写求两个数的最小公倍数的C语言MEX文件。

程序如下:

#include

/* 求最小公倍数子程序 */

void com_multi(double *z,double *x,double *y)

{

3

相关文档
最新文档