MATLAB编译器和API.doc

上传人:丁** 文档编号:1561079 上传时间:2019-10-28 格式:DOC 页数:20 大小:443.50KB
返回 下载 相关 举报
MATLAB编译器和API.doc_第1页
第1页 / 共20页
MATLAB编译器和API.doc_第2页
第2页 / 共20页
MATLAB编译器和API.doc_第3页
第3页 / 共20页
点击查看更多>>
资源描述
1 12 MATLAB 编译器和 API 几乎所有使用过 MATLAB 的科技人员,无不为该软件的简洁、便捷和功能之强大和 可靠所震撼,同时也对 MATLAB 产生了新的期望:一,希望程序能运行得更快;二,希 望获得可摆脱 MATLAB 环境而独立运行的可执行软件;三,希望从其他 “非 MATLAB” 的外部程序中调用 MATLAB。 本章前 6 节介绍 MATLAB 版编译器(Compiler)。由于 1.2 版与 2.0 版差异较大,又 由于 2.0 版缺少 1.2 版具有的优化功能,因此内容安排上将兼顾地论及两个版本。值得指出 的是:除 Mathworks 外,还有其他一些公司生产的编译器,其中比较著名的是 MathTools 公司的 Mediva;据该公司自称,性能优于 Mathworks 的,且具有绘图功能。 本章第 7 节论及 API 应用程序接口,扼要地介绍不同平台间的数据传送和 MATLAB 引擎技术。节后算例演示了,如何从外部调用 MATLAB 引擎。 12.1编译器 2.0 概述 12.1.1编译器 2.0 的功能 12.1.2编译器 2.0 的性能改进 12.1.3编译器 2.0 的局限性 12.1.4把脚本文件改写为函数文件 【例 12.1.4-1】有一个绘圆的 M 脚本文件 circle.m 如下。希望获得一个 MEX 绘圆程序。 (1 )原始的绘圆脚本文件 circle.m clf;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 %mcc是编译指令,详见 12.4节。 2 (5 )运行生成的 MEX 文件 circle_f.dll circle_f(0.5) %调用 circle_f绘制一半径为 0.5的圆 which circle_f %查询所调用的 circle_f的路径全称。 d:myworkcircle_f.dll 5 1 2 3 4 5 图 12.1.4-1 MEX 文件 circle_f.dll 所画的圆 12.2编译器的安装和配置 12.2.1配置 MATLAB 编译器的前提准备 图 12.2.1-1 【Select MATLAB Componets】对话窗的选项局部图 12.2.2为产生 MEX 文件进行预配置 3 12.2.2.1 对 MATLAB 编译器应用程序 mex 的设置 图 12.2.2.1-1 为产生 MEX 文件所产生的配置屏 1 图 12.2.2.1-2 为产生 MEX 文件所产生的配置屏 2 12.2.2.2 配置正确性的验证 (1 ) mex 应用程序的验证 4 cd d:mywork %把用户目录指定为当前目录 mex my_yprime.c %由 my_yprime.c文件生成 my_yprime.dll文件 my_yprime(1,1:4) %运行 my_yprime.dll文件 which my_yprime %获得 my_yprime.dll文件的位置信息 ans = 2.0000 8.9685 4.0000 -1.0947 d:myworkmy_yprime.dll (2 )在 MATLAB 命令窗中验证 mcc 应用程序 mcc -x my_yprime_m % my_yprime_m(1,1:4) which my_yprime_m ans = 2.0000 8.9685 4.0000 -1.0947 d:myworkmy_yprime_m.dll (3 )在 DOS 提示符后验证 mex、mcc 应用程序 图 12.2.2.2-1 在 DOS 状态下验证编译指令 12.2.3为产生独立外部应用程序进行预配置 12.2.3.1 对 MATLAB 编译器 mbuild 应用程序的设置(2.0 版) 图 12.2.3.1-1 为产生独立外部应用程序所产生的配置屏 1 5 图 12.2.3.1-2 为产生独立外部应用程序所产生的配置屏 2 12.2.3.2 对 MATLAB 编译器 mbuild 应用程序的设置(1.2 版) 12.2.3.3 配置正确性的验证 (1 ) mbuild 应用程序的验证 cd d:mywork %把用户目录指定为当前目录 mbuild my_ex1.c %在 d:mywork下生成 my_ex1.exe文件 图 12.2.3.2-1 在 DOS 窗口运行验证程序 my_ex1.exe 所得的结果 (2 ) mcc 应用程序的验证 mcc -p my_hello.m % 6 图 12.2.3.2-2 在 DOS 窗口运行验证程序 my_hello.exe 所得的结果 (3 )在 DOS 状态下验证 mbuild、mcc 工作正确性 图 12.2.3.2-3 在 DOS 状态验证编译指令 12.3MATLAB 编译器使用入门 12.3.1由 M 文件创建 C MEX 文件的入门算例 【例 12.3.1-1】先编写 M 文件,然后生成相应的 MEX 文件。该文件用以判断方阵是否奇 异。 cd d:mywork (1 )在 MATLAB 的编辑器中,编写下面的函数文件 exm1.m 。 exm1.m function y=exm1(A) m,n=size(A); if m=n; error(An input matrix should be n-by-n.) end r=rank(A); if r=m disp(This matrix is nonsigular) else disp(This matrix is sigular) end (2 )把该函数文件存放于用户目录 d:mywork 下。 7 (3 )在 MATLAB 命令窗中,运行以下指令对 exm1.m 进行编译。 mcc -x exm1 %编译 m文件。 (4 )调用 MEX 文件 exm1.dll 进行计算 A=1,0,1;2,1,0;4,1,4 exm1(A) %调用 exm1来判断矩阵 A是否奇异。 which exm1 %查询所调用的 exm1的路径和全称。 A = 1 0 1 2 1 0 4 1 4 This matrix is nonsigular d:myworkexm1.dll 12.3.2由 M 文件创建外部应用程序的入门算例 【例 12.3.2-1】建立一个脱离 MATLAB 环境,可独立运行的外部程序。该程序的功能是: 对于给定矩阵 A,如果存在 S 使得 S-1AS=,则要求出一个 S,否则给出信息说明所给的 矩阵 A 不能对角化。 (1 )编写两个 M 函数文件:exm2.m 和 exm2_f.m 。(第一个文件是主文件。) exm2.m function exm2 A=4,0,0;0,3,1;0,1,3; S=exm2_f(A) exm2_f.m function S=exm2_f(A) m,n=size(A); if m=n error(输入矩阵应是方阵!); end; e=eig(A); %检查输入矩阵的特征值是否各异 same=0; for i=1:m-1 for j=(i+1):m if e(j)=e(i) same=1; end end end % A可以对角化的条件是A具有互异特征值或者A为埃尔米特矩阵。 if any(any(A-A) end v,d=eig(A); S=v; (2 )把这两个函数文件存放于用户自己的目录 d:mywork,并在 MATLAB 中运行检验。 exm2 S = 1.0000 0 0 0 0.7071 0.7071 0 0.7071 -0.7071 8 (3 )生成独立的外部可执行程序。在 MATLAB 指令窗中,运行如下指令 mcc -m exm2 exm2_f (4 )打开 DOS 窗口,在 d:mywork 目录下,运行 exm2.exe,得如图 12.3.2-1 的结果。 图 12.3.2-1 在 DOS 窗口运行生成程序 exm2.exe 所得的结果 12.4编译指令 mcc 简介 12.4.1 mcc 的基本调用格式 12.4.2 mcc 的选项标志 12.4.2.1 编译器 2.0 选项简介 12.4.2.2 在命令行中指定选项标志 【例 12.4.2.2-1】假设当前目录上存在一个文件 exm3.m ,现要求利用 M 编译器将它转换为 C+语言的源码文件,并要求将原 M 文件中那注释区的内容作为所得 C+源码文件的注 释。 mcc -t -L Cpp -A annotation:comments exm3 %得到 exm3.cpp和 exm3.hpp 12.4.2.3 设置缺省选项 【例 12.4.2.3-1】假设已在 d:mywork 下创建了文本文件 mccstartup (请注意:该文件不可 带扩展名),该文件的内容包括若干编译指令的选项。现要求利用该文件,从 exm3.m 出 发得到 C+语言的源文件。 cd d:mywork %将 d:mywork设为当前工作目录 type mccstartup %打印文本文件 mccstartup的内容 -t -L C -A annotation:none !copy mccstartup h:y9857temp %将 mccstartup转移到临时目录下 !copy exm3.m h:y9857temp %将待编译 M源码转移到临时目录下 !del mccstartup , %删除 mccstartup !del exm3* %删除原有的编译后文件 dir mccstartup %当前目录下是否含有 mccstartup dir h:matlab53binmccstartup %bin下是否含该文件 dir exm3* %当前目录下是否含有 exm3* 1 file(s) copied 9 1 file(s) copied mccstartup not found. h:matlab53binmccstartup not found. exm3* not found. !copy h:y9857tempexm3.m d:mywork mcc -L Cpp exm3 % 1 file(s) copied ? Error: The options specified will not generate any output files. Please use one of the following options to generate an executable output file: -x (generates a MEX-file executable using C) -m (generates a stand-alone executable using C) -p (generates a stand-alone executable using C+) -S (generates a Simulink MEX S-function using C) Or type mcc -? for more usage information. Error in = H:MATLAB53toolboxcompilermcc.dll !copy h:y9857tempmccstartup d:mywork %将 mccstartup拷贝到当前目录 mcc -L Cpp exm3 % dir exm3* % !del mccstartup 1 file(s) copied exm3.cpp exm3.hpp exm3.m 12.4.2.4 编译器 1.2 选项简介 【例 12.4.2.4-1】要求利用 1.2 版编辑器对文件 exm4.m 进行操作,目标是获得 C MEX 文件 和 C 语言的独立可执行文件。 (1 )在 5.3 版 MATLAB 指令窗中的执行指令 mcc -V1.2 exm4 mcc -V1.2 -em exm4 (2 )为完成同样任务在 5.2 版指令窗中的执行指令 mcc exm4 mcc -em exm4 12.5编译文件的性能优化 12.5.1优化原 M 文件的性能 12.5.1.1 提高向量化程度 【例 12.5.1.1-1】本例演示: M 文件与 MEX 文件、向量运算与循环运算的速度比较。 (1 )编写如下两类函数 M 文件。 function y=sa(x) x=x+(x=0)*eps; y=sin(x)./x; function y=saf(x) n=length(x); for k=1:n x(k)=x(k)+(x(k)=0)*eps; y(k)=sin(x(k)/x(k); end 10 (2 )在 MATLAB 指令窗中,对 sa_mex.m 和 saf_mex.m 进行编译。 cd d:mywork mcc -x sa_mex % mcc -x saf_mex % (3 )运行四个文件,记录运算时间 t=-2*pi:pi/500:2*pi; tic;sa(t);tt(1)=toc; tic;saf(t);tt(2)=toc; tic;sa_mex(t);tt(3)=toc; tic;y=saf_mex(t);tt(4)=toc; (4 )结果显示和比较 plot(t,y,r-);grid 2 4 6 8 图 12.5.1.1-1 disp(运算速度比较) disp( sa.m saf.m sa_mex.dll saf_mex.dll) disp(tt) 运算速度比较 sa.m saf.m sa_mex.dll saf_mex.dll 0.3300 2.9100 0.3800 2.5800 12.5.1.2 对数组进行预置 【例 12.5.1.2-1】以上节例 12.5.1.1-1 为基础。saf.m 文件中数组变量 x 和 y 的大小随循环进 行而增长,这大大减慢了运算速度。本例演示:在循环前对进行变量预置的好处。 (1 )编写如下文件,以 saf_pro.m 和 saf_pro_mex.m 为名,将之保存在当前目录下。 function y=saf(x) n=length(x); x=zeros(1,n);y=zeros(1,n); for k=1:n x(k)=x(k)+(x(k)=0)*eps; y(k)=sin(x(k)/x(k); end (2)产生编译文件 mcc -x saf_mex mcc -x saf_pro_mex (3 )运行 11 t=-2*pi:pi/500:2*pi; tic;saf(t);tt(1)=toc; tic;saf_pro(t);tt(2)=toc; tic;saf_mex(t);tt(3)=toc; tic;y=saf_pro_mex(t);tt(4)=toc; (4 )速度比较 disp(运算速度比较) disp( saf.m saf_pro.m saf_mex.dll saf_pro_mex.dll) disp(tt) 运算速度比较 saf.m saf_pro.m saf_mex.dll saf_pro_mex.dll 2.8600 0.6600 2.6300 0.4400 12.5.1.3 避免调用复数域函数 12.5.2利用 mcc(-V1.2)的优化性能 12.5.2.1 编译时指定优化选项-r 和-i 【例 12.5.2.1-1】求如下非线性差分方程组在 10000 个点上的值。观察原 M 文件、无选项 和有选项 MEX 文件运行速度的不同。0,3.041021 yxxyxkk (1 )利用 MATLAB 编辑窗口编写如下 M 函数文件 function x,y=m_henon(n) x=zeros(1,n);y=zeros(1,n); for k=1:n-1 x(k+1)=1+y(k)-1.4*x(k)2; y(k+1)=0.3*x(k); end (2 )对 M 文件分别选用编译器 2.0 和 1.2 进行编译如下。 cd d:mywork mcc -x mex20_henon %用 2.0编译器产生普通 MEX文件 mcc -V1.2 -ri ri_mex12_henon %用 1.2编辑器产生优化的 MEX文件 (3 )计算各文件运行时间费用的相对值。 n=10000; t=zeros(3,2); for k=1:2 %运行两次,以做比较 tic;m_henon(n);t(1,k)=toc; tic;mex20_henon(n);t(2,k)=toc; tic;ri_mex12_henon(n);t(3,k)=toc; end t=t/t(1,1); (4 )显示比较结果 filename= m_henon; mex20_henon; ri_mex12_henon; disp( 各文件运行开销的相对值比较表) disp(blanks(1) %产生一个空行 disp( 文件名 第一次运行 第二次运行) disp(filename blanks(3) blanks(3) num2str(t) 12 %blanks产生两个空列 各文件运行开销的相对值比较表 文件名 第一次运行 第二次运行 m_henon 1 0.78086 mex20_henon 0.69753 0.59259 ri_mex12_henon 0.015432 0 12.5.2.2 利用变量类型申明优化性能 12.5.2.3 利用编译注记优化性能 【例 12.5.2.3-1】编译注记 %#ivdep 的应用举例。 (1 )编写如下两个函数 M 文件,并存放在 d:mywork 目录上。 ivdep0.m function A=ivdep0( ) A=1:10; A(5:9)=A(3:7); ivdep.m function A=ivdep( ) A=1:10; %#ivdep A(5:9)=A(3:7); (2 )分别对这两个文件进行编译。 cd d:mywork mcc -V1.2 ivdep0 mcc -V1.2 ivdep (3 )在 MATLAB 指令窗中运行以下指令。 tic;A0=ivdep0;t0=toc; tic;A=ivdep;t=toc/t0; (4 )显示结果。 A0,A disp(使用编译注记%#ivdep 后的运用时间仅为原来的 num2str(t) A0 = 1 2 3 4 3 4 5 6 7 10 A = 1 2 3 4 3 4 3 4 3 10 使用编译注记%#ivdep 后的运用时间仅为原来的 0.15152 12.6创建独立的外部应用程序 12.6.1独立外部程序的工作特点和创建过程 13 12.6.1.1 独立外部程序与 MEX 文件的不同工作特点 12.6.1.2 独立外部程序创建过程说明 12.6.2关于指令 mbuild 12.6.3借助编译指令 mcc 创建独立应用程序 12.6.3.1 创建独立应用程序时 mcc 的使用格式和常用选项标志 12.6.3.2 由全 M 源文件产生 EXE 应用程序 【例 12.6.3.2-1】创建一个适应 “超定”、“恰定”、“欠定 ”线性方程求解的示例性应用 程序。 (1 )编写以下两个 M 函数文件。 LLS.m function LLS() Ae=5; % Av=2; % A,b=LLSDATA(Ae,Av); x=Ab; %以下都是为获得较清晰的显示而编写 S=恰定; if AeAv S=超定; elseif AeAe A=WA(1:Ae,:); end 14 b=ones(Ae,1); (2 )对存放在 d:mywork 上的这两个文件进行编译。 图 12.6.3.2-1 独立应用程序 LLS.exe 解超定方程示例 (3 )把 LLS.m 文件第 2、3 行改为 Ae=3;Av=5,重新编译、运行,结果见图 12.6.3.2-2。 图 12.6.3.2-2 独立应用程序 LLS.exe 解欠定方程示例 12.6.3.3 由含 feval 指令的 M 文件生成 EXE 文件 【例 12.6.3.3-1】采用编译指定法 生成一个可以计算方阵各种特征量的独立外部应用程序。 (1 )编写函数 M 文件:mat_feat.m 和 my_det.m 。 mat_feat.m function mat_feat(f_name) % disp(被分析矩阵) % A=magic(4) %给定的被分析矩阵 N=8; %为字符串比较而设的字符串长度 8 。 n=size(f_name,2); %测量输入字符串的长度 ff_name=f_name blanks(N-n); %给输入字符串补充空字符,使长度为8。 if ff_name=my_det blanks(2) disp(矩阵 A 的行列式值 = ) 15 elseif ff_name=rank blanks(4) disp(矩阵 A 的秩 = ) elseif ff_name=norm blanks(4) disp(矩阵 A 的2-范数 = ) elseif ff_name=cond blanks(4) disp(矩阵 A 的条件数 = ) elseif ff_name=eig blanks(5) disp(矩阵 A 的特征值 = ) elseif ff_name=svd blanks(5) disp(矩阵 A 的奇异值 = ) else disp(您输入的指令,或者不是本函数文件所能解决的,或是错误的!) end d=feval(f_name,A); disp(d) my_det.m function d=my_det(A) d=det(A); (2 )创建计算给定矩阵秩的 EXE 文件 mcc -V1.2 -pm mat_feat f_name=rank (3 )所生成的 mat_feat.exe 可脱离 MATLAB 而独立运行。 !mat_feat WARNING: Reference to uninitialized variable 被分析矩阵 16 2 3 13 ; 5 11 10 8 ; 9 7 6 12 ; 4 14 15 1 矩阵 A 的秩 = 3 (4 )求矩阵行列式值的 EXE 文件创建指令、验证运行指令、及运行结果。 mcc -V1.2 p m mat_feat f_name=my_det !mat_feat 被分析矩阵 16 2 3 13 ; 5 11 10 8 ; 9 7 6 12 ; 4 14 15 1 矩阵 A 的行列式值 = 0 【例 12.6.3.3-2】采用编译注记法 生成一个可以计算方阵行列式值的独立外部应用程序。 (1 )假定想创建一个计算矩阵行列式值的独立应用程序,那么只要在上例 mat_feat.m 文 件的第和行之间插入以下两行指令,而 M 文件的其余部分都不必改动。 %#function my_det f_name=my_det; (2 )用以下指令对 M 文件进行编译,便可得到正确的 EXE 文件。 16 mcc p mat_feat 【例 12.6.3.3-3】当 feval 调用的是 MATLAB C+库中的函数时,可以采用更简单的 feval 输入宗量直接赋值法,实现 EXE 文件的创建。如创建一个计算方阵特征值的独立外部应用 程序。 (1 )只要在例 12.6.3.3-1 的 mat_feat.m 文件第和行中间插入如下一条指令即可。 f_name=eig; (2 )用以下指令对 M 文件进行编译,便可得到正确的 EXE 文件。 mcc p mat_feat (3 )以下是运行指令和结果 !mat_feat 被分析矩阵 A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 矩阵 A 的特征值 = 34.0000 8.9443 -8.9443 -0.0000 12.6.3.4 由含泛函指令的 M 文件生成 EXE 程序 【例 12.6.3.4-1】创建一个求一元函数 局部最小值的独立外部应用程序。)sin(16.0xey (1 )为了让读者了解函数 ,对将生成的 EXE 文件的运行结果正确性做)si(6.0x 直观的判断。先运行以下指令绘制如图 12.6.3.4-1 所示的函数曲线。 xx=0:0.01:5; yy=SAA(xx); %SAA.m文件见本例第 2步 plot(xx,yy) x0=2; x=fmins(SAA,x0); y=SAA(x); plot(xx,yy,b-,x,y,r.,MarkerSize, 20),grid 17 0 1 2 3 4 5 图 12.6.3.4-1 函数 在 2 附近的局部最小值)sin(6.0xey (2 )编制以下 M 函数文件,并存放在用户自己的工作目录上。 fcpp.m function fcpp(fun) %#function SAA %被泛函调用函数的编译注记是必须的。 fun=SAA; %对泛函指令中第一输入宗量具体化也是必须的。 xs=1; x=fmins(fun,xs); y=feval(fun,x); disp(blanks(2) disp(独立外部程序 fcpp.exe 运行结果显示) disp(blanks(2) ss=sin(exp(0.6x)/x 函数在 x = num2str(xs) 附近达最小值的坐标为 ; disp(ss); disp(blanks(1); disp( ( num2str(x) , num2str(y) ) SAA.m function y=SAA(x) x=x+(x=0)*eps; y=sin(x.*exp(0.6*x)./x; (3 )在 MATLAB 指令窗或 DOS 环境中运行以下编译指令,在用户目录上产生 fcpp.exe 。 mcc p fcpp (4 )在 DOS 中运行 fcpp.exe 的操作情况和结果如图 12.6.3.4-2。 18 图 12.6.3.4-2 生成的独立程序 fcpp.exe 在 DOS 中的运行结果 12.6.3.5 由 C/C+源码和 M 源码文件混合生成 EXE 应用文件 【例 12.6.3.5-1】主程序为 C 源码文件,被调用程序为 M 文件。 (1 )主文件 fileinc.c 和被调用的 mrank.m 文件如下 fileinc.c #include #include “matlab.h“ #include “templib.h“ int main(int argc, char *argv) int n ; mxArray *r; mxArray *N; TemplibInitialize(); n = 5; N=mxCreateDoubleMatrix(1,1,mxREAL); *mxGetPr(N)=n; r = mlfMrank(N); mlfPrintMatrix(r); mxDestroyArray(r); mxDestroyArray(N); TemplibTerminate(); return 0; mrank.m function r=mrank(n) r=zeros(n,1); for k=1:n r(k)=rank(magic(k); end (2 )编译混合源码文件 mcc t W lib:Templib -T link:exe mrank fileinc.c mcc t W lib:Templib -T link:exe fileinc.c mrank (3 )在 DOS 中分别运行 mrank.exe 和 fileinc.exe 的结果如图 12.6.3.5-1。 19 图 12.6.3.5-1 混合源码产生的 mrank.exe 和 fileinc.exe 运行结果 12.7API 应用程序接口 12.7.1 MEX 文件 12.7.2数据的输入输出 12.7.2.1 数据输入 12.7.2.2 数据输出 12.7.2.3 不同平台间数据传递 12.7.3 MATLAB 引擎 【例 17.7.3-1 】在 C 源程序中调用 MATLAB 引擎来计算三次多项式 的根。523x (1 )编写源程序 engexam.c。 #include #include #include #include “engine.h“ int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) Engine *ep; mxArray *P=NULL,*r=NULL; char buffer301; double poly4=1,0,-2,5; /*三次多项式的系数*/ 20 /*启动本机 MATLAB引擎,如果出错则退出程序。 如想启动远程主机上的 MATLAB,则用相应主机名代替0*/ if (!(ep=engOpen(“0“) fprintf(stderr,“nCant start MATLAB enginen“); return EXIT_FAILURE; /*创建变量 P,将 poly变量中定义的多项式系数值拷贝至该变量 P*/ P=mxCreateDoubleMatrix(1,4,mxREAL); /*给变量 P取名为 p,将 P传递到引擎空间,p 将被运用于 MATLAB表达式中*/ mxSetName(P,“p“); memcpy(char *)mxGetPr(P),(char *)poly,4*sizeof(double); engPutArray(ep,P); /*利用 MATLAB求解多项式根,并写至缓冲区*/ engOutputBuffer(ep,buffer,300); engEvalString(ep,“r=roots(p)“); /*将缓冲区中的内容输出屏幕窗口,关闭 MATLAB引擎,释放指针 P。*/ MessageBox(NULL,buffer,“Engexam.c-多项式 x3-2x+5的根“,MB_OK); engClose(ep); mxDestroyArray(P); return EXIT_SUCCESS; (2 )编译连接源程序 mex -f h:matlab53binbccengmatopts.bat engexam.c (3 )运行 engexam.exe 图 12.7.3-1 运行程序 engexam.exe 得到的信息窗口
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 各类标准


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!