我编写的m文件比较大,vc怎样调用matlab中的m文件啊?最好能详细点。

作者&投稿:蹉强 (若有异议请与网页底部的电邮联系)
VC 如何调用 matlab的m文件~

Matlab是一个强大的数学计算/仿真工具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数。但在很多情况下,我们不得不使用VC编程。那么,如何在VC中利用matlab的资源呢? 在这里我简要的以一个简单的例子来说明一下如果在VC中调用matlab中定义的.m文件。繁多的理论就不说了,简明扼要的说一个实例。相信大家看过之后都会马上学会的J
其中灰色底显示的部分是需要我们手工输入的部分。
步骤如下:
一当然是先建立matlab的m文件。
这里为了简单起见,我在matlab中定义了一个函数, 其m文件如下:
function y = add_zh(a,b)
y=a+b
保存为myfunct.m
二下面来对matlab编译环境进行设置。打开matlab,在命令行状态下键入:mex-setup
然后出现如下提
Select a compiler:
[1] Borland C++Builder version 5.0 in C:/Program Files/Borland
[2] Lcc C version 2.4 in F:/SOFT/SHARE/MATLAB65/sys/lcc
[3] Microsoft Visual C/C++ version 6.0 in C:/Program Files/Microsoft Visual Studio
[0] None

Compiler:
这里我们选择’3’。(如果使用其他的编译器比如BCB,那么就可以相应的选择’1’)

然后,继续在命令行状态下输入:
mbuild –setup
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? y
Select a compiler:
[1] Borland C++Builder version 5.0 in C:/Program Files/Borland
[2] Lcc C version 2.4 in F:/SOFT/SHARE/MATLAB65/sys/lcc
[3] Microsoft Visual C/C++ version 6.0 in C:/Program Files/Microsoft Visual Studio
[0] None

Compiler:
这里需要几步确认。大家按情况操作即可。
三对VC的编译器环境进行设置。在Tools-options-directory里面设置include和lib的路径,分别添加一项,指向matlab安装目录中的/extern/include和 /extern/lib
四这一步比较关键。在这一步中,将matlab中的.m文件转换为dll。
在matlab命令行中输入:
mcc -t -h -L C -W lib:ppp -T link:lib myfunct.m
至此,可以发现在myfunct.m所在的目录中产生了一大堆文件。我们只用其中3个:
ppp.h ppp.lib ppp.dll
五新建一个VC工程。这里取名为mat。为了简单,我们在这里建立一个对话框来进行演示。如下:


然后,将上面这3个文件拷贝到VC工程所在的目录中,以便VC调用之。
六进行VC编程。
首先,在cpp文件中加入: #include “ppp.h”
然后,设置VC的链接库。在project-settings-link下的object/library modules中加入:
ppp.lib libmx.lib libmatlb.lib libmmfile.lib
至此,VC的编译环境设置完毕。下面就是编程部分了。
七编程部分的关键:接口和数据类型的转换
先给出VC实现的源代码:
void CMatDlg::OnButton1()
{ //在matlab中定义的m文件:myfunct,其功能是完成两个数的相加操作。
CString str;
UpdateData(true);
pppInitialize();
//为了调用matlab中的函数,必须使用数组数据类型,并其后调用matlab函数将其转化为矩阵格式(matlab的基本数据类型是矩阵)
static double x1[1]={1.0};
static double x2[1]={2.5};
double result;
//调用matlab创建3个矩阵
mxArray *A=mclGetUninitializedArray();
mxArray *B=mclGetUninitializedArray();
mxArray *C=mclGetUninitializedArray();
//将C语言中的变量值赋给matlab中的矩阵
mlfAssign(&A,mlfDoubleMatrix(1,1,x1,NULL));
mlfAssign(&B,mlfDoubleMatrix(1,1,x2,NULL));
mlfAssign(&C,mlfMyfunct(A,B));
//将matlab中的矩阵的指针传递给C语言中的指向double的指针
double * md=mxGetPr(C);
result=md[0];
//释放这些矩阵
mxDestroyArray(A);
mxDestroyArray(B);
mxDestroyArray(C);
str.Format ("It is : %f",result);
::AfxMessageBox(str);
相信看到里面的注释就明白的差不多了。
VC编程以实现对matlab函数的调用,例如VC中我们实现两个double型的相加,则需要做上述的编程:首先定义两个数组并存入我们要进行函数操作的数据(也就是所谓的实参);然后将这两个数组转换为matlab可以识别的矩阵;然后调用m文件中自定义的函数,对矩阵进行操作;最后将结果再转回VC支持的数据格式:
double * md=mxGetPr(C);
result=md[0];
至此,经matlab函数处理过的数据已经存入了VC中的result变量。

mlfAssign(&C,mlfMyfunct(A,B));
大家可以看出来,在进行调用的时候,我们使用的是m文件的文件名myfunct,而不是m文件中定义的add_zh(a,b)

主要是调用它的引擎,就是包含特定的头文件,然后在VC里面调用引擎函数进行计算就行了。当然方法很多,你可以借或买一本MATTLAB编程类的书,MATLAB混合编程,MATLAB程序设计之类的···

关于VC和Matlab的混合编程,你可以查一下
engine.h,mat.h
这两个头文件
还有就是mex的调用方法。

有一本书叫matlab和VC++接口编程,你可以借来看一看。

matlab提供deploytool工具把你的代码编程dll,然后在vc下调用dll,命令行输入deploytool可以打开工具。不过要脱离matlab环境必须安装MCRInstaller。


MATLAB编写一个M文件,计算从1到10000中,能被40整除的数共有多少,并计算...
aa = 1:10000;bb =mod(aa,40);sum(aa(bb==0))ans = 1255000

.m文件是什么类型的
.m文件是MATLAB程序文件类型。详细解释如下:1. .m文件的定义 .m文件是MATLAB中常用的程序文件类型。MATLAB是一款用于数值计算、数据分析以及可视化的高级编程环境。在MATLAB中编写的代码通常保存在以“.m”为后缀的文件中。这些文件包含了MATLAB程序和函数,可以用于执行各种数学和逻辑运算。2. .m文件的内...

如何把大的(100M)RM文件缩小?用什么软件?
用winrar适用于携带..或者先把它转换成MP3 然后再转换回来..转换回来的时候质量差点..就可以了

matlab编写m脚本文件,输出1000-9999之间的所有水仙花数,并统计其个数...
m1=fix(m\/1000);m2=rem(fix(m\/100),10);m3=rem(fix(m\/10),10);m4=rem(m,10);i=1;if m==m1^4+m2^4+m3^4+m4^4 disp(m)n(i)=m;i=i+1;end end 结果

ug建模文件太大,有100多m怎么办
消除参数就可以缩小文件体积

应用MATLAB编写一个m文件,要求可将传递函数变换为状态空间方程的能控...
if a == 1 A = input('请输入A:');B = input('请输入B:');C = input('请输入C:');D = input('请输入D:');[num,den]=ss2tf(A,B,C,D);tf(num,den)else num = input('请输入分子:');den = input('请输入分母:');[A,B,C,D]=tf2ss(num,den);end 差不多就这样了...

word文档太大,40M,邮箱发布过去,怎么办? 切实能做的到的,不要长篇大...
一般不太会有这么大的文档的,估计楼主在WORD文档中插入了太多的图。在某一张图上点右键》设置图片格式》压缩》应用于“文档中所有图片”,然后确定,这样虽然在WORD中图片的实际大小变小了,但不至于影响打印效果。经这样处理后,文档肯定大大缩小。如果不是这个问题,只好用WINRAR分卷压缩,每个卷的大小...

m文件是什么
m文件是Matlab语言中的脚本或程序文件。详细解释:1. m文件的基本定义 m文件是Matlab语言中的核心组成部分。Matlab是一种广泛用于算法开发、数据可视化、数据分析以及数值计算的高级编程语言及环境。在Matlab中,以“.m”为后缀的文件通常包含用Matlab语言编写的脚本或程序。2. m文件的内容 这些m文件包含了...

matlab求救! 编写一个函数M文件,它的功能:没有输入量时,画出单位圆(见...
t = linspace(0,2*pi);x = sin(t);y = cos(t);plot(x,y)title('单位圆') ;return;end if ((n<3)||(n~=fix(n)))disp('n必须不小于3,且不能为非自然数!');return;else t = linspace(0,2*pi,n+1);x = sin(t);y = cos(t);plot(x,y)title(['正',num2str(n),...

在matlab中,如何编写一个m文件,运行时使得产生的5随机数组中的每个数...
两种方法 可以随机产生1个 然后根据这个提供下个随机生成的范围 以此类推 另外一种方法 随机产生数值 然后 每个数值除以和 这样化成和1的要求

本溪市18015442254: VC 如何调用 matlab的m文件 -
通哲田可: Matlab是一个强大的数学计算/仿真工具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数.但在很多情况下,我们不得不使用VC编程.那么,如何在VC中利用matlab的资源呢? 在这里我简要的以一个简单的例子来说明一...

本溪市18015442254: 请问大家vc调用matlab引擎可以执行自己编写我M文件吗? -
通哲田可: 主要是调用它的引擎,就是包含特定的头文件,然后在VC里面调用引擎函数进行计算就行了.当然方法很多,你可以借或买一本MATTLAB编程类的书,MATLAB混合编程,MATLAB程序设计之类的···

本溪市18015442254: c++,vc读取文件的时候,怎样可以指定读取的位置,和读取的大小,比如说有个几百M的文件我要读取, -
通哲田可: CreateFileMaping.....把文件句柄传入就行了,像指针一样操作他

本溪市18015442254: 如何用C#调用Matlab的m文件 -
通哲田可: 2.MATLAB .NET builder 优点:不用安装Matlab缺点:授权很贵3.MATLAB compiler (C/C++)优点:不用安装matlab缺点:大量的P/Invoke 第二种是可以用来和C#整合的,具体如下: 假设我们有如下m程序, function result = calculator(input) ...

本溪市18015442254: 【小白贴】别人给了我个用C语言编写的很大的一个程序工程,里面有很多个文件夹.我如何用VC6.0运行调试呢
通哲田可: 我是用的是vs,但是和vc差不多,只要找到一个后缀为.sln的东西,点击打开就可以,这个就是工程的启动,就可以加载全部文件和程序集

本溪市18015442254: c++调用matlab的程序,想将matlab的m文件生成dll调用,但是matlab程序有好多m文件,怎么办 -
通哲田可: 通常在实现图像处理的算法时我们使用Matlab编程,因为它具有丰富的库函数以及操作方便,然而在工程项目中通常使用C/C++语言.如果我们将matlab代码完全重写成C++代码会很麻烦,最好的办法是借助matlab与C/C++接口将.m程序转成dll...

本溪市18015442254: C++怎样调用Mathematica程序包,具体的操作和使用软件 -
通哲田可: .m文件是objc语言中的主程序,这个是c语言无法调用的.反过来是可以的,在.m文件中可以调用c或者c++程序.只要引入Cfile.h头文件就可以了.你可以把.m程序转换成c语言方法就可以顺理成章调用了.

本溪市18015442254: vc中如何快速的显示大量数据(如文件为2G或更大)在控件上. -
通哲田可: 映射到内存以后,最主要的问题是文件的解析.里面的数据是批量的?固定结构的? 还是不定的.映射到内存以后,解析就占主要的运行速度.如果能顺利把数据解析出来,显示的话就容易很多.如果用listctrl的话,网上有很多提高速度的方法可以查找!映射跟解析这两部分,如果时间长,建议开线程,不然就卡……

本溪市18015442254: Matlab的.m文件用Matlab生成了DLL文件,我想在VC中的MFC中,按相应的控件可以动态链接DLL,请问怎么弄? -
通哲田可: 1. 先用VC写个dll,练习在MFC中调用dll的一般方式2. 写个简单的控制台的应用程序,练习调用matalb的dll.3. 最后,再尝试在MFC里调用matlab的dll.

本溪市18015442254: 用VC6.0编写的程序 有十几M 怎么把它变小
通哲田可: 压缩包压缩 你怕太浪费时间直接用变速齿轮啊 百度上有几十M没好大不影响机子

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网