第8章MATLAB高级应用

发布 2021-04-26 16:37:28 阅读 3213

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...