8.1 matlab应用接口。
8.1.1 mex文件。
mex文件具有以下几个方面的应用:
1) 对于已存在的c或fortran子程序,可以通过mex文件在matlab环境中直接调用,而不必重新编写m文件。
2) 由于matlab是解释性语言,运行如for等循环体时,会出现速度十分缓慢的现象,为了能提高速度,往往要使用mex程序。
3) 对于a/d、d/a卡,或其它pc硬件,可以直接用mex文件进行访问。
4) 利用mex文件,可以使用如windows用户图形界面等资源。
1. mex文件系统设置。
下面采用microsoft visual c/c++ 6.0编译器,在命令窗口使用“mex -setup”命令,对mex文件编译器进行配置:
> mex -setup
则会出现如下提示:
please choose your compiler for building external interface (mex) files:
would you like mex to locate installed compilers [y]/n? y
让用户选择是否同意mex命令自动定位已经安装的编译器,输入“y”后,回车出现如下提示:
select a compiler:
1] digital visual fortran version 6.0 in c:\program files\microsoft visual studio
2] lcc c version 2.4 in d:\matlab6p1\sys\lcc
3] microsoft visual c/c++ version 6.0 in d:\program files\microsoft visual studio
0] none
提供用户选择编译器作为默认的mex文件编译器,通过键盘输入“3”后,回车出现如下提示:
please verify your choices:
compiler: microsoft visual c/c++ 6.0
location: d:\program files\microsoft visual studio
are these correct?([y]/n):
确认所选择的编译器,通过键盘输入“y”后,回车出现如下提示:
the default options file:
d:\documents and settings\zjdcy\application data\mathworks\matlab\r12\"
is being updated from d:\matlab6p1\bin\win32\mexopts\
installing the matlab visual studio add-in ..
updated d:\program files\microsoft visual studio\common\msdev98\template\
from d:\matlab6p1\bin\win32\
updated d:\program files\microsoft visual studio\common\msdev98\template\
from d:\matlab6p1\bin\win32\
updated d:\program files\microsoft visual studio\common\msdev98\addins\
from d:\matlab6p1\bin\win32\
merged d:\matlab6p1\bin\win32\
with d:\program files\microsoft visual studio\common\msdev98\bin\
则表示编译器成功配置。
2. 测试配置。
在matlab环境的当前目录浏览器窗口中,将matlab的extern\examples\mex目录设置为当前目录,然后在命令窗口中输入:
mex 则在extern\examples\mex目录下,就生成了“文件,查看该文件的信息,在命令窗口中输入:
> which yprime
d:\matlab6p1\extern\examples\mex\
并调用文件:
> yprime(1,1:2:7)ans =
3. c语言mex文件的构成。
程序的构成主要由入口子程序和计算功能子程序两部分组成。
1) 入口子程序。
第一部分入口子程序的作用是在matlab系统与被调用的外部子程序之间建立通信联系。入口子程序必须是mexfunction,其构成形式为:
void mexfunction( int nlhs, mxarray *plhs,int nrhs, const mxarray*prhs
/*用来完成matlab与计算子程序之间通信任务的***/
mexfunction函数的参数含义为:
nrhs:为输入参数的数目。
prhs:为输入参数数组,是指针数组。
nlhs:为输出参数的数目。
plhs:为输出参数数组,是指针数组。
2) 计算功能子程序。
第二部分为计算功能子程序,包含所有的实际需要完成的功能源**,可以是用户以前所编写的算法和程序,以函数的形式存在。
4. c语言mex文件的建立。
1) 常用matlab api函数。
在mex文件中,常用matlab api函数有:
mxgetm:获得矩阵的行数。
mxgetn:获得矩阵的列数。
mxgetpr:获得矩阵的实数部分的数据指针。
mexerrmsgtxt:输出错误信息,并返回到matlab命令提示符下。
mxcreatestring:创建一个字符串矩阵。
mxcreatedoublematrix:创建一个二维未赋值的双精度浮点类型的矩阵。
mxisdouble:判断矩阵是否为双精度类型。
2) c语言mex文件的创建步骤。
通过创建计算一个数平方倒数值的程序,来介绍一个mex文件创建的过程。
例8.1】在microsoft visual c++6.0环境下创建一个mex文件,实现计算一个数平方的倒数值。
在microsoft visual c++6.0环境创建一个“c++ source file”文件,文件名为“
编写该文件的程序**如下:
#include ""
#include ""
*计算功能子程序ex0801,计算平方的倒数*/
void ex0801(double y,double x)
y[0]=1/(x[0]*x[0]);
return;
*入口子程序mexfunction*/
void mexfunction(int nlhs,mxarray *plhs,int nrhs,const mxarray *prhs)
double *x,*y;
unsigned int m,n;
/*检查输入变量的个数是否正确*/
if(nrhs!=1)
/*检查输出变量的个数是否正确*/
else if(nlhs!=1)
m = mxgetm(prhs[0]);
n = mxgetn(prhs[0]);
/*检查输入变量必须是非复数单个双精度数*/
if (!mxisdouble(prhs[0]) mxissparse(prhs[0]) mxiscomplex(prhs[0])|
m==1&&n==1))
/*创建矩阵变量为输出变量*/
plhs[0]=mxcreatedoublematrix(m,n,mxreal);
y = mxgetpr(plhs[0]);
x = mxgetpr(prhs[0]);
/*调用计算功能子程序*/
ex0801(y,x);
在matlab命令窗口的当前目录浏览器中将当前目录设置为用户的目录,输入命令创建mex文件并运行:
mex > y=ex0801(2)y =
扩展名为cpp是c++文件,在其同一文件夹中生成文件,运行文件的运算结果正确。
为该文件添加帮助m文件。
为了在matlab中可以方便地查看该文件的帮助信息,可以建立一个文件,并输入以下内容:
function y=ex0801(x)
计算一个数平方的倒数值。
y=1/(x^2)
copyright @ 2003-10-10
则在matlab命令窗口中,用help命令只能看到m文件来查看帮助信息:
> help ex0801
function y=ex0801(x)
计算一个数平方的倒数值。
y=1/(x^2)
copyright @ 2003-10-10
8.1.2 使用matlab编译器生成mex和exe文件。
1. mex文件与exe文件的区别。
mex文件只能在matlab环境中运行;而exe文件是可以独立与matlab环境运行的。
第8章SQL编程及高级应用
4学时 理论 2 实践 2 具体讲课内容如下。知识要点。常量是表示特定数据值的符号,其格式取决于它所表示的值的数据类型。常量也称为字面值。而变量是可以保存数据值的存储区域,每一个应用程序变量都有数据类型和大小。8.1.1 常量。常量指在程序运行中值不变的量。根据常量值的不同类型,分为字符串常量 整型...
MATLAB高级应用
求解微分方程 组 的matlab命令。1 常微分方程的符号解。其格式如下。r dsolve eq1,eq2,cond1,cond2,v 说明 该命令对给定的常微分方程 组 eq1,eq2,中指定的符号自变量v,与给定的边界条件和初始条件cond1,cond2,求符号解 即解析解 r 若没有指定变量v...
matlab第5章作业
信号与系统 课程研究性学习手册。姓名吕航 第十一组。学号 09213044 同组成员马琳。刘煜晨。朱志杰。王琛珏。指导教师魏杰。时间2010 11 专题研讨。三 信号与系统的复频域分析。研讨题目 m5 1 题目分析 1 分别取rc为0.0025 0.025 0.00001时的值。2 取rc为0.00...