① matlab VC混合编程调用神经网络工具箱
调用MATLAB Engine虽然可以实现对神经网络工具箱的功能,但是因为这种方法是基于C/S模式的,效率很低,而且需要在matlab下实现其功能,无法脱离matlab直接运行,所以,基于这个原因,我放弃了利用MATLAB Engine来实现混合编程。利用C++数学库虽然可以脱离MATLAB直接运行,但是C++数学库并不支持神经网络工具箱,所以,无法实现基于神经网络的混合编程。利用mcc命令虽然可以直接生成.exe文件,并可以脱离MATLAB在VC++中直接运行,但是因为其自身的诸多缺点,这种方法并不能编译神经网络函数为C++文件,所以,也无法胜任这个任务。 最后,只有COM组件这一个办法了,由于COM组件技术的强大功能,利用matlab的COM Builder工具可以实现脱离matlab的混合编程,并成功的调用了神经网络工具箱。
② vc matlab 混合编程,哪种方式最好
调用matlab引擎:是要求MATLAB作为VC的一个后台来调用,从本质来说还是在MATLAB中运行的程序;
基于matcom:可以脱离MATLAB的环境,但是貌似有一部分MATLBA中的函数不能完全调用;而且方法简单;
基于COM的:这个我不太会也没有试过;
我推荐将MATLAB的程序编译成动态库在VC中调用,这也可以完全脱离MATLAB的环境,可以完美调用
③ Matlab混合编程之使用C\UDP动态链接库传输数据的秘诀
方法/步骤
1、启动两个matlab软件,分别加载Dll
loadlibrary('CSForUDLL.dll','CSForUDLL.h')
2、libfunctions
CSForUDLL
-full
查看一下Dll里的所有函数
3、在一个matlab运算add_server函数,作为启动Server端
我写的dll第一个参数为要发送的数字
calllib('CSForUDLL','add_server',2,2,0)
之行结束会发现Server端在一直等待。
4、在另一个matlab上运行add_client函数,作为启动Client端
同理,我的dll第一个参数用来发送数字;
calllib('CSForUDLL','add_client',2,2,0)
5、回车运行,会发现返回一个数字。
这个数字是从Server端发送过来的。
6、再看一下Server端,收到Client发送的数字1
。
④ labview与matlab混合编程时,matlab中fsolve函数在labview中怎样调用
在labview里面可以直接嵌入matlab程序的。里面有个function是“matlab script node”。在函数选板里面的“数学”-“脚本与公式”-“脚本节点”下。
你把m源文件可以放入进去,定义号输入参数 和输出(在你的例子里就是q(1)和q(2)了)。
输入参数和输出防在前面板上。方便观察。输出用“图形显示控件”下的波形表。输入用个数值输入就可以了。然后运行。在波形表里就可以看到q(1)和q(2)的输出了。你可以在一个波形表上看 一个波形(那么你需要放2个波形表来观察2个输出)。也可有在同一个波形表里看2个输出的曲线。这个需要程序里面加入“创建数组”函数,把2个输出构成一个2维数组送给波形表显示。
⑤ matlab混合编程怎么设置环境
脱离MATLAB工作环境,实现MATLAB与VisualBasic语言的混合编程
以下讨论是在MATLAB7.0软件和vc++6.0软件环境中进行:
一、将MATLAB的.m文件编译成.exe文件,实现MATLAB与Visual Basic语言的混合编程
1、将 \MATLAB7\toolbox\compiler\deploy\matlabrc.m 中的81行 set_param(0,'PaperType',defaultpaper)
和82行set_param(0,'PaperUnits',defaultunits)
注释掉,或者干脆删掉,否则,在没有安装MATLAB的机子上运行MATLAB与VisualBasic语言混合编成的程序时,会出现:“Undefinedcommand/function 'set_param'”的错误。
2、在Matlab7 的命令窗口运行下列命令:rehash toolboxcache
完成工具箱加载和更新。
3、在Matlab7 的命令窗口运行下列命令:
Mcc –m ***.m
将MATLAB的.m文件(M文件必须以Function开始,即必须是函数文件)编译成.exe文件,将编译生成的.ctf文件和.exe文件拷贝到VB工程的目录中,他们是脱离matlab环境运行必需的文件;
4、在VB工程中用下列语句对MATLAB的.m文件编译成的.exe文件进行调用:
lTask = Shell("rt2.exe",vbHide)
hProc= OpenProcess(PROCESS_QUERY_INFORMATION, False, lTask)
IflTask = 0 Then MsgBox "程序执行失败"
Do
GetExitCodeProcess hProc, lExit
DoEvents
LoopWhile lExit = STILL_ACTIVE
5、将VB工程进行打包,打包时,要将在MATLAB中编译生成的.ctf文件和.exe文件添加到VB工程包中,他们是脱离matlab环境运行必需的文件;
6、将打包好的VB工程安装包拷贝到客户计算机中,并将matlab7\toolbox\compiler\deploy\win32下的MCRInstaller.exe程序也一起拷贝到客户计算机中。
7、在客户计算机中,运行程序:MCRInstaller.exe,将matlab compiler runtime安装到客户计算机中。注意:安装目录必须位于它所在的文件夹;
8、运行VB工程安装包中的setup程序,进行VB工程的程序安装;
至此,在客户机中,即可正常运行MATLAB与Visual Basic语言混合编成的程序。
注意事项:
1、在VB工程所在目录中,不能有其它的.dll文件存在,否则在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,会出现下列错误提示:
“Warning:Failed to startthe Java Virtual machine.”
“Warning:Disabling Javasupport.”
“Undefined function orvariable ‘matlabrc’.”
二、将MATLAB的.m文件编译成.dll文件,实现MATLAB与Visual Basic语言的混合编程
1、将 \MATLAB7\toolbox\compiler\deploy\matlabrc.m 中的81行 set_param(0,'PaperType',defaultpaper)
和82行set_param(0,'PaperUnits',defaultunits)
注释掉,或者干脆删掉,否则,在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,会出现:“Undefined command/function 'set_param'”的错误。
2、在Matlab7 的命令窗口运行下列命令:rehash toolboxcache
完成工具箱加载和更新。
3、安装vc++6.0软件,为Matlab编译器的安装和配置做准备;
4、在Matlab7 的命令窗口运行下列命令:
mbuild –setup
对Matlab的编译器进行安装和配置;
5、在Matlab中创建COM组件
用Matlab COM生成器创建COM组件,包括4个步骤,即创建工程、管理m文件、生成组件、打包和分发组件。
在Matlab中创建COM组件步骤如下:
(1) 创建工程。在Matlab命令窗中键入comtool命令,调用Matlab编译器,打开Matlab COM Build主窗口。在该窗口中,选择File→New Project,创建一个新的工程,在此对话框中对新工程进行设置,输入组件名和类名,选择合适的编译器。
(2) 管理m文件。单击“AddFile”按钮,添加编写好的M函数文件(M文件必须以Function开始,即必须是函数文件)。
(3) 生成组件。使用Build--àCom object菜单,创建COM组件,将MATLAB的.m文件编译成.dll文件。
(4)打包和分发组件:编译成功并通过测试后,就可以把有关文件打包和分发给目标器。单击 “Component”→”Package Component”,创建自解压可执行程序。注意:在使用Component--àPackageComponent菜单,生成.exe文件时,要将“includeMCR”前的选择框选中,使生成的.exe文件中能包含MCRInstaller.exe程序。
6、将编译生成的.ctf文件和.dll文件以及.exe文件拷贝到VB工程的目录中;
7、创建VB工程并调用COM组件新建“标准EXE”工程,进入VB编程环境,在“工程”菜单中单击“引用”选项, 在列表中选中第5步中生成的这些组件,以及添加MWComUtil 7.0 Type Library,单击“确定”按钮。
在VB工程引用这些组件后,需按照以下步骤来调用Matlab文件:
Dim rt2 As rt2_1.rt2_1class '声明一个COM组件
Set rt2 = New rt2_1.rt2_1class
Call rt2.rt2 '执行rt2_1_1_0.dll文件
8、将VB工程进行打包,打包时,要将在MATLAB中编译生成的.ctf文件和.dll文件以及.exe添加到VB工程包中;
9、在客户计算机中,运行第5步中生成的.exe程序,对第5步中生成的.dll动态链接库进行注册,并自动运行MCRInstaller.exe程序,将matlab compiler runtime安装到客户计算机中。
10、将打包好的VB工程安装包拷贝到客户计算机中,运行VB工程安装包中的setup程序,进行VB工程的程序安装;
至此,在客户机中,即可正常运行MATLAB与Visual Basic语言混合编成的程序。
注意事项:
1、VB编译生成的MATLAB与Visual Basic语言混合编成的exe应用程序不能简单的移植,必须要打包,在打包时应带上dll文件,然后将打包好的VB工程安装包拷贝到客户机中,运行VB工程安装包中的setup.exe安装程序,进行VB工程的安装,VB工程安装完成后,再在客户机中,运行第5步中生成的.exe程序,就可以避免出现下列各种错误提示:
(1)“Warning:Failedto start the Java Virtualmachine.”
“Warning:Disabling Javasupport.”
“Undefined function orvariable ‘matlabrc’.”
(2)“Automation错误”或者“自动化错误”
(3)“运行时错误’429’:ActiveX部件不能创建对象”
(4)“MCR instance isnot available.”
2、在VB工程所在目录中,除了包含第5步中生成的.dll动态链接库文件外,不能有其它的.dll文件存在,否则在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,会出现下列错误提示:
“Warning:Failed to startthe Java Virtual machine.”
“Warning:Disabling Javasupport.”
“Undefined function orvariable ‘matlabrc’.”
3、如果直接将Vb工程程序拷贝到客户机中,而不是通过安装Vb工程程序,来运行MATLAB与VisualBasic语言混合编成的程序时,会出现:“Automation错误”或者“自动化错误”的错误提示,这时可以通过下列方法之一解决:
(1)在客户机中运行第5步中生成的.exe程序,对第5步中生成的.dll动态链接库进行注册,就可以解决“Automation错误”或者“自动化错误”引起的程序运行异常。
(2)在客户机中直接运行regsvr32.exe程序,对第5步中生成的.dll动态链接库进行注册,也可以解决“Automation错误”或者“自动化错误”引起的程序运行异常。
4、如果在客户机中,没有运行第5步中生成的.exe程序,对第5步中生成的.dll动态链接库进行注册,那么在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,就会出现:“运行时错误’429’:ActiveX部件不能创建对象”的提示,或者出现:“Automation错误”或者“自动化错误”的错误提示。
5、如果在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,出现:“MCR instance isnot available.”的错误提示时,可以通过将打包好的VB工程安装包拷贝到客户计算机中,运行VB工程安装包中的setup程序,进行VB工程的程序安装,就可以解决这种错误。
⑥ 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程序运算
⑦ matlaba与c混合编程中,函数的调用。
convolce.c也要编译,否则找不到函数的实现模块。
mexcorrDn.cconvolce.c
⑧ C#与matlab混合编程,调用dll文件时出现out of memory等一些问题,求高手帮忙
matlab可用内存有限,好像默认256M最多512M,超出的话就出错;不是混合编程的原因,直接在matlab也会出现这种错误。
这是网站上给的建议:
参考网站:http://www.mathworks.cn/cn/help/matlab/matlab_prog/resolving-out-of-memory-errors.html
Compress
data
to
rece
memory
fragmentation.
If
possible,
break
large
matrices
into
several
smaller
matrices
so
that
less
memory
is
used
at
any
one
time.
If
possible,
rece
the
size
of
your
data.
Make
sure
that
there
are
no
external
constraints
on
the
memory
accessible
to
MATLAB.
(On
UNIX®
systems,
use
the
limit
command
to
check).
Increase
the
size
of
the
swap
file.
We
recommend
that
you
configure
your
system
with
twice
as
much
swap
space
as
you
have
RAM.
See
Increasing
System
Swap
Space,
below.
Add
more
memory
to
the
system.
关于楼主说
单独使用matlab运行不会报错,C#调用时就会out
of
memory。
是不是可以这样理解,调用matlab的C#
会比淡出用matlab消耗内存更大,把数据量减半试试吧。
我是在直接用matlab做BP网络时,内存溢出,没有办法。