文档介绍:第五讲 Matlab程序设计(2)
通信与信息工程学院
2012~2013学年冬季学期
第1页,共47页。
2022/8/10
1
MATLAB作为一种高级语言,它不仅能以一种人机交互式的命令行的方式工作,还可以像BASI以分成两个程序,也可以共写在同一个程序中。
第9页,共47页。
2022/8/10
9
列出具有实现两个双精度实数标量加法的C++ MEX源码程序;对C++ MEX源码程序进行编译链接;在MATLAB中调用生成的DLL文件。
“计算子程序”
#include ""
void myplus(double y[],double x[],double z[])
{
y[0]=x[0]+z[0];
}
第10页,共47页。
2022/8/10
10
“接口子程序”
void mexFunction(int nlhs,mxArray *plhs[],
int nrhs,const mxArray *prhs[])
{
double *x,*y,*z;
int mrows0,ncols0;
int mrows1,ncols1;
……………
}
第11页,共47页。
2022/8/10
11
mex
a=;b=;
c=exm(a,b)
c =
第12页,共47页。
2022/8/10
12
3、matlab引擎技术
Matlab引擎库函数可使用户在自编的应用程序中方便地实现对matlab的调用。
用户自编的界面运行在前台,而matlab作为计算引擎运行在后台。
引擎函数本身用C或Fortran编写。
Matlab在其它语言编制的程序中被当作数学库程序调用,充分利用matlab指令简单、计算可靠的优点,大大节省用户的开发时间。
第13页,共47页。
2022/8/10
13
用C语言编写调用MATLAB引擎计算三次多项式根的源程序。
#include ""
 int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
Engine *ep;
mxArray *P=NULL,*r=NULL;
char buffer[301];
double poly[4]={1,0,-2,5};
if (!(ep=engOpen(NULL))) {
fprintf(stderr,"\nCan't start MATLAB engine\n");
return EXIT_FAILURE;}
…………………
第14页,共47页。
2022/8/10
14
mex -f D:\MATLAB6p5\bin\win32\mexopts\
。
第15页,共47页。
2022/8/10
15
4、Matlab中ActiveX技术
ActiveX技术是各种面向对象技术的集合。借助ActiveX技术,开发商和终端用户就能把来自不同商家的ActiveX组建无缝地集成在自己的应用程序中,从而完成特定的目的。避免低水平的重复开发。
Matlab支持两种ActiveX技术: ActiveX控件封装集成和ActiveX自动化。
ActiveX控件是指那些可视、可编程的集成于ActiveX容器的应用组件。最常见有Internet Explorer和Web Browser Control。
第16页,共47页。
2022/8/10
16
ActiveX自动化使matlab能施控和受控于其它组件。当matlab受控于其它组件时,表现为自动化服务器。当matlab控制其它组件时,表现为自动化客户。
matlab自动化服务器的功能包括:在matlab空间中执行命令;与matlab空间直接交换数据。
matlab自动化客户的功能仅是matlab ActiveX控件封装集成功能的子集。
第17页,共47页。
2022/8/10
17
第18页,共47页。
2022/8/10
18
第19页,共47页。
2022/8/10
19
第20页,共47页。
2022/8/10
20
第21页,共47页。
2022/8/10
21
八、M文件调试
编写M文件