915200-MATLAB程序设计与应用-第13章 MATLAB外部程序接口技术__源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
#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