回 帖 发 新 帖 刷新版面

主题:vc与matlab混合编程问题

vc与matlab混合编程问题


我用vc编写了一个界面,要求点击一个按钮时,执行一段用matlab编写的程序完成运算 。
matlab源程序我已在matlab7下完成,部分源程序如下:

此matlab文件名为time.m:

clear, close all
%输入X序列
%将原始序列X转化为Y
disp('输入序列X:')
X=[129,121,73,65,77,117,158,154,173,124,135,114,98,117,145,174,206,203,95,129,118,119,87,103,100,115,61,70,79,99,126,142,152,121,57,60,72,99,136,157,65,74,74,114,155,149,152,158,132,127,99,101,134,135,162,150,112,71,94,127,149,80,72,61,96,68,68,84,84,64,81,68,82,71,63,114,111,127,126,79,67,86,93,105,140,81,84,101,115,151,80,58,67,94,97,95,65,75,86,64,130,154,120,72,79,83,92,369,62,92,87,79,91,94,81,90,91,116,76,71,83,65,85,70,58,48,52,74,88,98,93,74,69,71,71,67,87,71,77,96,76,88,73,74,70,58,82,88,77,72,93,88,73,81,105,89,91,95,81,104,81,142,138,85,94,95,95,92,110,98,88,78,73,95,66,53,58,91,76,72,63,71,71,77,77,75,85,86,70,92,111,69,65,67,59,102,62,88,81,72,87,126,96,88,89,73,50,56,74,84,87,73,56,42,51,77,102,157,180,152,61,69,54,62,63,80,67,69,91,110,99,76,74,70,95,99,103,83,88,82,62,38,86,67,68,95,74,72,60,60,73,74,84,101,121,107,94,90,91,121,77,53,58,69,82,88,101,94,66,87,76,74,50,40,45,46,51,62,70,89,115,159,92,55,40,37,56,60,77,77,94,86,63,72,77,93,100,99,83,101,91,123,83,90,103,146,80,115,118,118,110,84,39,53,64,84,90,110,127,106,109,128,97,106,98,73,95,112,119,123,103,104,97,101,104,119,126,117,117,123,97,52,82,153,133,128,143,155,159,180,145,101,96,83,89,111,118,122,113,82,86,90,87,65,83,91];
[i,me]=size(X)
[sum1,p0,Y,Y2,u,M,pr0]=transform(X);
%y(t)-b1y(t-1)-b2y(t-2)-……-bpy(t-p)=a(t)
%模型定阶和参数估计
[Z,p,B]=confirm_and_estimate(sum1,p0,Y,pr0);
[e,m]=size(Y2);
%显示图形
Y3(1:m-1)=Y2(1:m-1);
b=(m-1+m-p)/2;
i=m-p;
while i<=b
    a=Y2(i);
    Y2(i)=Y2(m-1-i+m-p);
    Y2(m-1-i+m-p)=a;
    i=i+1;
end
Y2(m-p:m-1)
Y3(m)=Z*Y2(m-p:m-1)';
i=m-p;
while i<=b
    a=Y2(i);
    Y2(i)=Y2(m-1-i+m-p);
    Y2(m-1-i+m-p)=a;
    i=i+1;
end
Y2(m-p:m-1)
figure(4)
plot(Y2,'r')%原始数据
hold on
plot(Y3,'+g')%预测数据
a=Y3(m)+M(m-1)+u
b=Y2(m)+M(m-1)+u
X(m);
if X(m)>a
   c=(X(m)-a)/X(m)
else  c=(a-X(m))/X(m)
end

现在如何将现有的matlab程序集成到vc++中去,高手给我答疑,谢谢了!

回复列表 (共5个回复)

沙发

做成DLL,VC中调用
   如何做成DLL:1.comtool
               2.mex/mcc

板凳

·在MATLAB中运行“mex -setup”,选择Microsoft Visual C/C++ version 6.0选项,安装MATLAB Add-in文件到VC++目录,确认;接着运行“mbuild -setup”,选择Microsoft Visual C/C++ version 6.0作为本地默认编译器;然后在MATLAB下运行“cdprefdir”和“mccsavepath”命令,MATLAB Add-in可以脱离MATLAB环境找到MATLAB路径。

·在VC++中选择“工具tools->定制(customize)->附加项和宏文件Add-ins and Macro Files页”,选中“MATLAB Add-in”。这样,在VC++工具栏出现MATLAB Add-in图标,在VC++新建工程对话框中会出现“MATLAB Project Wizard”。至此连接工作完成。

·打开VC++,在新建工程中选择“MATLAB Project Wizard”,按照提示,选择“Shalled M-dll”,输入M文件位置,VC++开始转换。如果M文件没有错误,在工程文件夹中会生成一系列.C文件。其中与M文件同名的.C文件即为转换的C代码。

3 楼

前面好象有个关于这个问题的,

你去找好好了,

也是vc与matlab混合编程的

4 楼

利用matcom可以把m文件转化为C++格式的文件,将转化后的文件添加到VC工程中,编译链接就好了。

5 楼

高手啊!我就是按你说的步骤做的,可是输入mccsavepath后,就会出现
??? Undefined function or variable 'mccsavepath'错误,这是什么意思啊?该怎么解决呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册