matlab接口编程
‘壹’ matlab和c混合编程如何运行
简单点的,你就用matlab写一个接口程序,封装你的c程序,类似下面这种:(matlab的例子,实现数组相乘,文件为arrayProct.c)
#include "mex.h"
/* 你的c */
void arrayProct(double x, double *y, double *z, mwSize n)
{
mwSize i;
/* multiply each element y by x */
for (i=0; i<n; i++) {
z[i] = x * y[i];
}
}
/* 接口程序 */
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
/*初始化输入输出*/
double multiplier; /* input scalar */
double *inMatrix; /* 1xN input matrix */
mwSize ncols; /* size of matrix */
double *outMatrix; /* output matrix */
/* 参数检查,如果程序较简单也可以不用做*/
if(nrhs!=2) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:nrhs","Two inputs required.");
}
if(nlhs!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:nlhs","One output required.");
}
/* make sure the first input argument is scalar */
if( !mxIsDouble(prhs[0]) ||
mxIsComplex(prhs[0]) ||
mxGetNumberOfElements(prhs[0])!=1 ) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:notScalar","Input multiplier must be a scalar.");
}
/* check that number of rows in second input argument is 1 */
if(mxGetM(prhs[1])!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProct:notRowVector","Input must be a row vector.");
}
/* get the value of the scalar input */
multiplier = mxGetScalar(prhs[0]);
/* create a pointer to the real data in the input matrix */
inMatrix = mxGetPr(prhs[1]);
/* get dimensions of the input matrix */
ncols = mxGetN(prhs[1]);
/* create the output matrix */
plhs[0] = mxCreateDoubleMatrix(1,ncols,mxREAL);
/* get a pointer to the real data in the output matrix */
outMatrix = mxGetPr(plhs[0]);
/* call the computational routine */
arrayProct(multiplier,inMatrix,outMatrix,ncols);
}
这个看起来复杂,其实很简单的,就几步:
1、使用mxGet*将输入变为matlab兼容形式
2、使用mxSet*初始化输出空间
3、使用你的C程序运算
‘贰’ matlab是什么编程语言
matlab编程语言是:C++语言
Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。
MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。
使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
MATLAB程序接口:
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。
允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。
工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
以上内容参考:网络-MATLAB
‘叁’ matlab输入x, y的值,并把它们的值互换后输出 怎么做啊
%demoswap.m
x = input('x=');
y = input('y=');
disp ([x,y]);
t=x;
x=y;
y=t;
disp ([x,y]);
>>demoswap
x=100
y=200
100 200
200 100
>>
或:
x=input('x=');
y=input('y=');
t=x;
x=y;
y=t;
(3)matlab接口编程扩展阅读:
MATLAB数学函数库包括了大量的计算算法。从基本算法如四则运算、三角函数,到复杂算法如矩阵求逆、快速傅里叶变换等。
MATLAB应用程序接口(API)是一个使MATLAB语言能与C、Fortran等其它高级编程语言进行交互的函数库。该函数库的函数通过调用动态链接库(DLL)实现与MATLAB文件的数据交换,其主要功能包括在MATLAB中调用C和Fortran程序,以及在MATLAB与其它应用程序间建立客户、服务器关系。
‘肆’ 怎么在MATLAB中编写程序,把simulink仿真出来的图形用MATLAB实现
Simulink的命令行仿真方式:
[t,x,y]=sim('modelname')
利用对话框参数进行仿真,返回输出矩阵;
[t,x,y]=sim('modelname', timespan, options, ut)
利用输入参数进行仿真,返回输出矩阵;
[t,x,y1,y2,...yn]=sim('modelname', timespan, options, ut)
利用输入参数进行仿真,返回逐个输出;
参数说明:
'modelname' 运行的模型名(不包含扩展名),必须在Matlab的搜索路径上。
timespan 指定仿真的时间区间,可以采取以下几种格式:
(1)[] 空,利用模型对话框设置时间;
(2)T_final 标量,制定终止仿真时间;
(3)[T_start T_final] 二元向量,指定仿真时间区间;
(4)outputTimes 任何指定输出时间记录点的向量。
options MATLAB特定的一种数据结构,具有最高优先权,可以覆盖模型参数对话框中的设置。
ut 赋给仿真对象数入口模块的量,具有最高优先设置,它是形为[t,u1,u2...]的数值矩阵,每个为时间序列或输入序列。
‘伍’ 如何调用matlab生成的dll文件进行编程
通常在实现图像处理的算法时我们使用Matlab编程,因为它具有丰富的库函数以及操作方便,然而在工程项目中通常使用C/C++语言。如果我们将matlab代码完全重写成C++代码会很麻烦,最好的办法是借助matlab与C/C++接口将.m程序转成dll文件!
一、使用matlab将.m转成dll文件
1、在命令行中输入mex
-setup
提示你是否要在本地安装matlab
compilers,然后选择compiler类型,有matlab自带的编辑器以及检测到的其他编辑器,比如“Microsoft
Visual
C/C++
version
6.0
in
E:\Program
Files\Microsoft
Visual
Studio”,根据自己实际情况选择。
2、在命令行中输入mbuild
-setup
这里的选项和上面类似,依次选择环境确定。
3、生成dll文件
一句命令mcc
-W
cpplib:add
-T
link:lib
add.m
前面的add表示生成的dll文件名,后面的add.m顾名思义是.m文件名。生成后会多出8个文件,有用的是add.ctfadd.dll
add.lib
add.h4个文件,据说新版的Matlab不会生成.ctf文件。
二、VC6.0中调用生成的dll文件
上面生成的dll文件,我们可以借助VC6.0的Depends工具查看导出函数名,但是我们要调用导出函数必须要知道函数的形参返回类型等,这里要借助.h文件,它包含了导出函数的声明,下面以实例来讲解使用方法:
1、add.m文件
function
[a,b]=add(x,y)
a=2*x+y;
b=3*y;
end
注意了add函数有两个返回值,可以猜测一下在C++中是如何处理的;
2、add.h文件
截取其中一段关键代码如下:
extern
void
add(int
nargout,
mwArray&
a,
mwArray&
b
,
const
mwArray&
x,
const
mwArray&
y);
实际上函数的返回是变相的放到形参中的,依次是输出参数个数,输出参数,输入参数。PS
现在做的这个项目中用户自定义算法dll使用的规则和这里类似!
3、C++中调用dll文件
(1)新建空工程,将上面提及的4个文件放到工程目录下;
(2)VC++目录中包含目录:matlab
内的include目录
比如我的是
E:\MATLAB7\extern\include
(3)VC++目录中库目录:matlab
内的lib目录
E:\MATLAB7\extern\lib\win32\microsoft\msvc60,要根据VC++版本修改!
(4)工程属性-》连接-》输入-》附加依赖项
输入:add.lib
mclmcrrt.lib
mclmcr.lib,第一个是生成的。或者在预处理中加入下面代码
#pragma
comment(lib,
"mclmcrrt.lib")
#pragma
comment(lib,
"mclmcr.lib")
#pragma
comment(lib,
"add.lib")
4、C++代码
#include
<iostream>
#include
"add.h"
using
namespace
std;
int
main()
{
if(!addInitialize())
{
cout<<"initilize
failed!!!"<<endl;
return
-1;
}
mwArray
a(1,1,mxDOUBLE_CLASS);
mwArray
b(1,1,mxDOUBLE_CLASS);
a(1,1)=20;
b(1,1)=30;
mwArray
x(1,1,mxDOUBLE_CLASS);
mwArray
y(1,1,mxDOUBLE_CLASS);
//输出参数个数,输出参数,输入参数。
add(2,x,y,a,b);
double
*i=new
double;
double
*j=new
double
;
x.GetData(i,1);
y.GetData(j,1);
cout<<"x="<<*i<<"
y="<<*j<<endl;
getchar();
return
0;
}
注意:addInitialize()一定要!
‘陆’ matlab是什么编程语言
matlab编程语言是:C++语言。
Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。
MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。
使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
MATLAB程序接口:
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。
允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。
‘柒’ Matlab 里 premnmx tramnmx postmnmx 分别表示什么
premnmx函数:用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在[-1,1]区间内。tramnmx:使用网络时所用的新数据和样本数据接受相同的预处理函数。
postmnmx:常用的函数,网络输出结果需要进行反归一化还原成原始的数据。postmnmx语句的语法格式是:[PN] = postmnmx(P,minp,maxp)。
MATLAB包括拥有数百个内部函数的主包和三十几种工具包。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能。学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。
(7)matlab接口编程扩展阅读:
MATLAB应用程序接口(API)是一个使MATLAB语言能与C、Fortran等其它高级编程语言进行交互的函数库。
该函数库的函数通过调用动态链接库(DLL)实现与MATLAB文件的数据交换,其主要功能包括在MATLAB中调用C和Fortran程序,以及在MATLAB与其它应用程序间建立客户、服务器关系。
‘捌’ matlab代码是什么
matlab编程语言是:C++语言。而且这个Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。
开发环境
MATLAB开发环境是一套方便用户使用的MATLAB函数和文件工具集,其中许多工具是图形化用户接口。它是一个集成的 用户工作空间,允许用户输入输出数据,并提供了M文件的集成编译和调试环境,包括MATLAB桌面、命令窗口、M文件编辑调试器、MATLAB工作空间和在线帮助文档。
‘玖’ matlab !!!!
摘要:由于MA7ⅡAB不能直接对硬件端12进行读写操作,缺乏了实时性,使得工程上的应用受到了
极大的限制。而通过MATI.AB应用程序接口Mex调用C++语言,可实现在MATLAB环境下对硬件端
12信号的读写。为此,笔者对Mex接口文件进行了详细介绍,包括Mex接口的各种特殊功能、详细编
写规则和具体编译要求,具体阐述了Mex接口在MA啊AB环境下的调用及使用。并根据Mex接口的
相关功能。对MATLAB数据采集系统的设计在理论上进行了探讨,以图对MATLAB功能进行进一步
的扩展。
关键词:MATLAB:接口;数据采集
Research of Data—Collection System Based onⅣ队TLAB
Wang Hailong,Chen Shanjie,Li Qian,Zhang Peng,Ku Tao,Xu Dahua
(Co//ege ofEngieering,Nanjing Agriculture University,Nanjing 210031)
Abstract:Since MATLAB can not write directly to hardware available for operation.and it lacks of a re。
al-time,it works on the applications has been significantly hampered.MATLAB applications through rede—
ployment C++language interface Mex.Achievable in the MATI。AB environment for the specific hardware
interface signals.Therefore,author of a paper details Mex interfaces,inchding interfaces Mex various spe—
cial functions,and specific translation rules for the preparation of detailed,enuncimed the transfer and the
use of Mex interfaee in the MA’nAB environment.And in accordance with the relevant functional interface
Mex.MATIAB data acquisition system for the design in theory explored in a bid to further expand the
functions of MA7n。AB.
Key words:MA,11AB,Interface,Data collection
MATLAB产品系列被广泛地应用于包括信号与
图像处理、控制系统设计、通讯、系统仿真等诸多领域。
它的一大特性是有众多的面向具体应用的工具箱和仿
真块,包含了完整的函数集用来对信号图像处理,控制
系统设计,神经网络等特殊应用进行分析和设计。其他
的产品延伸了MATLAB的能力,包括数据采集,报告
生成,和依靠MATLAB语言编程产生独立C/C++代
码等等。
正因为其强大的科学计算与可视化功能、简单易
用的开放式可扩展环境以及所拥有的各种面向不同领
域而扩展的工具箱(ToolBox)t11,使得MATLAB在许多
学科领域中成为计算机辅助设计与分析、算法研究和
应用开发的基本工具和首选平台。
但是,MATLAB也存在局限性,就是不能直接对
硬件端口进行读写操作,从而影响了它在测控系统开
发上的应用范围。但它提供了应用程序接口API,通过
该接口,用户可以方便地完成MATLAB与外部环境
的交互(如图1所示)。为此,如何通过接口文件调用其
它语言编写的程序(如C_卜}),再通过其实现对硬件端
口的读写操作,最终实现在单一MArⅡAB环境中进
行测控系统的开发,便成了一项值得探讨和研究的问
题。
1 MATLAB应用程序接口文件Mex
MATLAB应用程序接口(APD主要包括3部分:
Mex文件(外部程序调用接13),Mat文件(数据输入输
出接口)及MATLAB计算引擎函数库。它们实现的一
般功能分别为:(1)在MATLAB环境中调用C/c++
语言或FORTRAN语言编写的程序,以提高数据处理
效率;(2)向MATLAB环境传送数据或从MATLAB
环境接收数据,即实现MATLAB系统与外部环境的
数据交换;(3)在MATLAB和其他应用程序间建立客
户机/服务器关系,将MATLAB作为一个计算引擎,
在其他应用程序中调用从而降低程序设计的工作量。
以下重点介绍Mex文件的应用。
1.1眦X是一种动态链接的子程序,其具体功能如下
(1)对于某些已有的C程序,可以通过Mex方式
在MATLAB环境中直接调用;
(2)对于影响MATLAB执行速度的FOR__I,OOP
等循环体,可以编写相应的C程序完成相同功能,并
编译成Mex文件,提高运行速度;
(3)对于A/D或D/A卡,或其他PC硬件,可以直
接用Mex文件进行访问,扩展MATLAB的功能;
(4)利用MEX文件,还可以使用一些软件,如
Windows的用户界面资源等。
1.2 Mex文件的编程规则
(1)编制自己的C++算法程序;
(2)编制MEX源文件代码;
MEX文件的源文件主要有两个部分组成:
①计算子例行程序(Computational Routine)。它是
链接的外部子程序,包含所有要完成计算功能的源代
码,用来完成实际的计算工作。
②入口子例行程序(Gateway Routine)。它是计算
子例行程序和MATLAB环境之间的接口,用于完成
两者间的数据交互。入口子例行程序是MATLAB调
用C抖程序所必需的部分,计算子例行程序可以由入
口子例行程序调用以完成其特定的功能要求。入口子
例行程序具体的使用格式如下:
#include"mex.h"void MexFunction(int nlhs,
mxArray牛pills[],
int nrhs,const mxArray·prhs[])
{
//C语言代码
)
其中,入口子程序的函数名必须为MexFunction。
prhs为一个结构体类型的指针数组,该数组元素按顺
序指向所有的输入参数;nrhs为输入参数的个数;plhs
与prhs的类型一致,它指向所有的输出参数;nlhs表
示输出参数的个数。该函数通过prhs获得输入数据,
对这些输入数据的处理后经由plhs获得结果,该结果
作为输出数据与其它程序进行数据交互嘲。
1.3 Mex文件的编译和调用
在编译Mex文件之前,必须先在MATLAB下安
装好Mex编译器,安装方法如下:在MATLAB命令窗
口中输入mex.setup然后按照提示向导逐步安装即
可。
Mex文件在MATLAB命令窗口中直接编译,方
式如下:mex filename,然后按回车键,如果编译通
过,系统就会生成同名字的DLL文件,在以后的程序
中可以像调用MATLAB的内建函数一样直接调用此
函数。原理如图2。
由上可知,Mex文件可以作为一个MATLAB的
内建函数来处理,但这个函数又具有强大的接口功能,
可以完成对硬件端口信号的读写操作。其对硬件端口
读写操作的总流程如图3所示:
2基于MATLAB的数据采集系统的概念设计
拟采用MATLAB和C的交互编程来处理数据采
集问题,这样系统不仅具有传统计算机数据采集系统
的全部功能,而且还具有很强的数据处理能力,实际上
构成了智能虚拟仪器t3]。
初步设计系统由三个模块构成,MATLAB模块的
功能包括图形显示和存取、数据分析和处理等,C语言
模块主要实现串行通信功能,而硬件设备则完成对物
理量的变换[4,5/。如图4所示。
当采样对象确定后硬件设备也就随之而定,而C
语言部分实现通信功能也是固定的,故所有的数据处
理功能设置都在MATLAB环境中的人机界面中实
现。该系统的3个界面实现功能如下。
主界面主要由一个图形框和4个按钮构成。图形
框借助于MATLAB的图形处理功能,以最佳匹配模
式动态显示实时采样数据,实现自动示波器功能。4个
按钮名称分别尚酽设置串口”、“开始采集”、“数据处理”
和“退出系统”,鼠标点击即可实现相应功能。
在主界面选择了“串口设置”后,就进入通信协议.
设置界面。这个界面主要由5个弹出式菜单和2个按
钮构成,弹出式菜单的名称和选项分别是:端口选择
(COMI--COM4)、波特率(300-19200)、数据位m8)、停
止位(o~2)和校验位(无、奇、偶),而2个按钮则分别对
所设参数进行确认或者修正。
在主界面选择了“数据处理,,后,则进入数据处理
界面。这个界面的功能与采样对象有关,需由用户自己
针对任务要求进行编程。
3结束语
MATLAB具有各种丰富的数值运算及图形处理
功能,大量实用控制工具箱的存在更为其控制应用奠
定了坚实的基础;而C语言则对硬件系统具有强有力
的处理能力,可方便地实现数据采集、串行通讯等功
能嘲。Mex文件是MATLAB调用C++和其他语言(如
Visual Fortran等)的简易接口,它极大地扩展了
MATLAB的应用范围,使MATLAB系统成为真正意
义上的开放的、功能完善的、自包容的程序设计和数据
处理集成环境Isl。
参考文献
【l】王正林,王盛开,陈国顺.MATLAB/Simulink与控制系统仿真嗍.
北京:电子工业出版社,2005:11-13.
【2】张威.MATLAB外部接121编程嗍.西安:西安电子科技大学出版
社,2004:50-85.
【3】廖良斌,喻方平.基于DSP和USB的图像采集系统的研究叨.武汉
理工大学学报(交通科学与工程版),2006,.30(1):120.123.
[4】申鼎才,郭庆平.基于Interact的分布式数据采集与分析在岩土工
程中的应用研究明.武汉理工大学学报(交通科学与工程版),
2005,29(6):974-976,992.
【5】王志冰,李汉强.基于USB总线的数据采集系统的设计与实现叨.
武汉理工大学学报(交通科学与工程版),2005,29(5):758.761.
[6】杨义伟,蒋大明,戴胜华.驼峰信号微机监测系统的数据采集阴.武
汉理工大学学报(交通科学与工程版),2005,.29(1):154-156.
[7】杨健,张慧慧.基于DSP和ARM的网络化数据采集与信号分析终
端田.计算机工程,2006,32(8):269-271.
【8】李尧坤,史忠科,毕业等.Matlab在基于B/S模式的决策支持系统
中的应用叨.计算机工程,2006,32(5):255-256,282.