MATLAB外部程序接口技术.doc_第1页
MATLAB外部程序接口技术.doc_第2页
MATLAB外部程序接口技术.doc_第3页
MATLAB外部程序接口技术.doc_第4页
MATLAB外部程序接口技术.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十一章 MATLAB外部程序接口技术11.1 M编译器的功用和前提准备11.2 创建MEX文件11.2.1 MEX文件编译的验证【例11.2-1】验证mex应用程序把C码文件编译成MEX文件的正确性。(1)先将matlabexternexamplesmex目录下的yprime.c文件复制到用户自己的工作目录(比方d:mywork),然后将此文件名改为my_yprime.c。(2)运行以下指令cd d:myworkmex my_yprime.cmy_yprime(1,1:4)which my_yprime ans = 2.0000 8.9685 4.0000 -1.0947d:myworkmy_yprime.dll 说明l 应该指出:mex的编译操作也可以象图11.2-1那样在DOS环境中进行,结果相同。图 11.2-1 在DOS状态下进行编译操作【例11.2-2】验证mcc应用程序把M码文件编译成MEX文件的正确性。(1)先将matlabexternexamplesmex目录下的yprime.m文件复制到用户自己的工作目录(比方d:mywork),然后将此文件名改为my_yprime_m.m。(2)运行以下指令cd d:mywork%把用户目录指定为当前目录mcc -x my_yprime_mmy_yprime_m(1,1:4)which my_yprime_m ans = 2.0000 8.9685 4.0000 -1.0947d:myworkmy_yprime_m.dll 11.2.2 由M文件创建C MEX文件的算例【例11.2-3】先编写一个“判断方阵是否奇异”的M文件,然后由该M文件生成相应的MEX文件。(1)在MATLAB的编辑器中,编写下面的函数文件exm1.m 。exm1.mfunction y=exm1(A)m,n=size(A);if m=n;error(An input matrix should be n-by-n.)endr=rank(A);if r=mdisp(This matrix is nonsigular)elsedisp(This matrix is sigular)end(2)把该函数文件存放于用户目录d:mywork下。(3)在MATLAB命令窗中,运行以下指令对exm1.m进行编译。 mcc -x exm1 %编译m文件。 (4)调用MEX文件exm1.dll 进行计算A=1,0,1;2,1,0;4,1,4 exm1(A) which exm1 A = 1 0 1 2 1 0 4 1 4This matrix is nonsigulard:myworkexm1.dll 【例11.2-4】产生一个绘圆的MEX文件。本例演示:(A)M脚本文件不能被编译;(B)如何把脚本文件改写成函数文件;(C)改写后的M函数文件可被正确编译。(1)原始的绘圆脚本文件circle.mclf;r=2;t=0:pi/100:2*pi;x=r*exp(i*t);plot(x,r*);axis(square)(2)对该脚本文件直接编译将因错误而失败mcc -x circle ? Error: File circle is a Script M-file and cannot be compiled with the current Compiler.Error in = H:MATLAB53toolboxcompilermcc.dll (3)把脚本文件改写成函数文件circle_f.m:function circle_f(r)clf;t=0:pi/100:2*pi;x=r*exp(i*t);plot(x,r*);axis(square)(4)再对circle_f.m进行编译,将顺利通过mcc -x circle_f (5)运行生成的MEX文件circle_f.dllcircle_f(0.5) which circle_f d:myworkcircle_f.dll图11.2-2 MEX文件circle_f.dll所画的圆11.3 创建独立的外部应用程序11.3.1 M编译器的预配置 一 对M编译器mbuild应用程序的设置 二 配置正确性的验证【例11.3-1】验证mbuild应用程序把C码文件编译成EXE文件的正确性。(1)先将matlabexternexamplescmath 目录下的ex1.c文件复制到用户自己的工作目录(比方d:mywork),然后将此文件名改为my_ex1.c。(2)在MATLAB指令窗中运行以下指令,将在d:mywork目录下产生my_ex1.exe。cd d:myworkmbuild my_ex1.c(3)打开Windows的DOS窗口,并使d:mywork成为当前目录,运行my_ex1.exe,若得到结果与图11.3-1相同,就表示mbuild应用程序工作正常。图 11.3-1 在DOS窗口运行验证程序my_ex1.exe所得的结果【例11.3-2】验证mcc应用程序把M文件编译成EXE文件的正确性。(1)先将matlabexternexamplescompiler目录下的hello.m文件复制到用户自己的工作目录(比方d:mywork),然后将此文件名改为my_hello.m。(2)在MATLAB指令窗中运行以下指令,便在d:mywork目录下产生my_hello.exe。mcc -p my_hello.m (3)打开Windows的DOS窗口,并使d:mywork成为当前目录,运行my_hello.exe,若得到结果与图11.3-2相同,就表示MATLAB编译器工作正常。图11.3-2 在DOS窗口运行验证程序my_hello.exe所得的结果【例11.3-3】验证mbuild、mcc工作正确性也可以在DOS状态下进行。(1)为确保验证过程的可信度,首先删除d:mywork目录上的所有文件。(2)将MATLAB自带的ex1.c和hello.m文件复制到用户自己的工作目录d:mywork ,并将它们分别改名为my_ex1.c和my_hello.m 。(3)然后打开Windows的DOS窗口,进行如图11.3-3的操作。(4)假如所得结果与图11.3-3相同,则表明工作正常。图 11.3-3 在DOS状态验证编译指令11.3.2 独立外部程序的工作特点和创建过程 一 独立外部程序与MEX文件的不同工作特点 二 独立外部程序创建过程说明11.3.3 关于指令mbuild11.3.4 科学计算和结果可视化独立应用程序的创建 一 创建独立应用程序时mcc的使用格式 二 由全M源文件产生EXE科学计算应用程序【例11.3-4】创建一个适应“超定”、“恰定”、“欠定”线性方程求解的示例性应用程序。(1)编写以下两个M函数文件。LLS.mfunction LLS()Ae=5;Av=2;A,b=LLSDATA(Ae,Av);x=Ab;%以下都是为获得较清晰的显示而编写S=恰定;if AeAv S=超定;elseif AeAe A=WA(1:Ae,:);endb=ones(Ae,1);(2)对存放在d:mywork上的这两个文件进行编译。图 11.3-4 独立应用程序LLS.exe解超定方程示例(3)把LLS.m文件第2、3行改为Ae=3;Av=5,将文件另存为LLS1.m并重新编译、运行。mcc -p LLS1 !LLS1 外部独立程序求欠定方程 Ax=b 解,其中 A = 17 24 1 8 15 b = 1 23 5 7 14 16 1 4 6 13 20 22 1 方程的解 0.013372 x = 0.0063953 0 0 0.041279 三 可视化应用程序的产生和使用【例11.3-5】产生一个能绘制类似图6.3-3所示图形的C+独立应用程序。(1)将例6.3-3中的代码加上function“头”后保存为函数文件grph.m,function grphX0,Y0,Z0=sphere(30); %产生单位球面的三维坐标X=2*X0;Y=2*Y0;Z=2*Z0; %产生半径为2的球面的三维坐标surf(X0,Y0,Z0); %画单位球面shading interp %采用插补明暗处理hold on,mesh(X,Y,Z),colormap(hot),hold off%采用hot色图hidd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论