基于VC++和MATLAB混合编程绘制三维图形
VC与Matlab混合编程

VC与Matlab混合编程本⽂主要介绍VC与Matlab混合编程的两种⽅法,并详细介绍了VC向Matlab传递复杂数据:结构体的⽅法,有详细代码说明。
Matlab 主要⾯对科学计算、可视化以及交互式程序设计的⾼科技计算环境,但由于Matlab开发平台上开发的程序不能脱离Matlab运⾏环境,因⽽在处理⼀些实际应⽤问题时显得灵活性不⾜,⽽VC++则在⼀定程度上能够弥补这⼀漏洞,因此,将⼆者结合共⽤,各献其长,可以为科研⼯作和⼯程开发提供更为强⼤的技术⽀持。
Matlab作为控制系统设计的⼀种通⽤⼯具,它可以很⽅便的和VC进⾏连接。
⼀般⽽⾔,Matlab与VC混合编程的实现⽅法有很多种,这⾥主要介绍以下两种:1. VC调⽤Matlab Engine的⽅式:Matlab Engine是⼀组Matlab提供的接⼝函数,⽀持C/C++语⾔,Matlab Engine采⽤C/S(客户机/服务器)模式,Matlab作为后台服务器,⽽C/C++程序作为前台客户机,向Matlab Engine传递执⾏命令和数据信息,从Matlab Engine接收执⾏结果。
⽤户可以在前台应⽤程序中调⽤这些接⼝函数,实现对Matlab Engine的控制。
采⽤这种⽅法⼏乎能利⽤Matlab全部功能,但是需要在机器上安装Matlab软件,缺点是执⾏效率较低。
下⾯简单介绍下这种⽅式的实现步骤:1.1 API接⼝介绍先来介绍⼀组Matlab提供的引擎API接⼝:(仅作简单功能介绍,详细参数说明请参考Matlab帮助)Engine* engOpen(const char* startcmd)启动Matlab引擎int engClose(Engine* ep) 关闭Matlab引擎int engEvalString(Engine* ep, const char* string)执⾏Matlab表达式mxArray* engGetArray(Engine* ep, const char* name)获取⼀个变量数组的值int engPutArray(engine* ep, const mxArray* mp)设置⼀个变量数组的值int engPutVariable(Engine *ep, const char *name, const mxArray *pm)同上mxArray *engGetVariable(Engine *ep, const char *name)获取⼀个变量int engOutputBuffer(Engine* eP,char* p,int n)获取输出字符串1.2 VC环境配置要想在VC集成环境下调⽤Matlab引擎实现VC和Matlab的混合编程,⼀般需要经过以下⼏个必要的步骤:(以下以Matlab2008a和VS2005版本为例)(1)添加include路径:将“\extern\include”(在Matlab的安装路径下)路劲添加到VC编译器的include下(2)添加lib路径:将“\extern \lib\win32\microsoft” (在Matlab的安装路径下) 路径添加到VC编译器的lib下(3)加载lib:需要加载⾄少libmx.lib、libmat.lib、libeng.lib三个库(4)include头⽂件:在要使⽤ engine 函数的地⽅包含engine.h头⽂件1.3 引擎调⽤接下来就可以在VC中调⽤Matlab引擎了,简单的⽰例代码如下:#include "engine.h"#pragma comment(lib, "libeng.lib")#pragma comment(lib, "libmx.lib")#pragma comment(lib, "libmat.lib")void TestDeno(){Engine* pEng = NULL;if (!(pEng = engOpen(NULL))){printf("Open matlab enging fail!");return;}//call Engine plot A*sin(t)+B A=2 B=1mxArray *A = NULL;double init = 2;A = mxCreateDoubleMatrix(1, 1, mxREAL);memcpy((void*) mxGetPr(A), (void*)&init, sizeof (double));engPutVariable(pEng, "A", A);init = 1;memcpy((void*) mxGetPr(A), (void*)&init, sizeof (double));engPutVariable(pEng, "B", A);mxDestroyArray(A);Sleep(3*60*1000);engEvalString(pEng, "t=0:0.2:7;plot(t,A*sin(t)+B);");if(NULL != pEng){engClose(pEng);}}⽰例代码通过VC调⽤Matlab引擎,绘制正弦曲线,相对简单,就不再详细解释,效图如下:2. VC调⽤Matlab DLL的⽅式DLL是⼀个可执⾏的⼆进制⽂件。
基于COM接口的VC_与MATLAB混合编程

这种方法可以很灵活的调用 Matlab 来编写应用程序,但要求 读者对 C/C++语言非常熟悉,并且这种模式不能包括所有的 Matlab 函数,尤其是无法充分使用 Matlab 提供的详尽的绘图 函数。 1.3 用 Matlab 自带的 Matlab Compiler
Matlab Compiler 的作用是将 m 文件转化成 C/C++代码 (也就是通常所用的 mcc 命令),这种源代码需要用 C/C++编 译器编译连接成独立应用程序,在将 m 文件转成独立应用程 序的过程中生成的 C/C++文件,原则上是可以被其它的 C/C++ 代码调用的,编译器可以通过设置 mcc 命令的选项,将 m 文 件编译成动态链接库文件、C/C++文件、可执行文件等一系 列文件。到 matlab R21.1 为止,Matlab Compiler 的 m 程序转 换成 C/C++代码功能有很多限制:
[3]ZSP 500 Digital Signal Processor Core, technical manual,
果为参照,不断地修改,为大规模复杂运算的实现提供了时 September 2003
间保障,满足了实时性要求,各种DSP尽管结构和指令集不
[4]ZSP 500 DSP Architecture, 2003
·58·
计算机与信息技术
软件纵横
⑵部分绘图语句无法实现或得不到准确图象,尤其是三 维图象;
⑶当涉及到的复杂函数调用时嵌套的文件数量很多。 因此在不涉及到三维做图以及 m 文件不大的情况下推荐 使用。 1.5 使用 Matlab 的 Combuilde 工具 COM 是 component object module 的简称,它是一种通用 的对象接口,任何语言只要按照这种接口标准,就可以实现 调用它。Matlab6.5 新推出来的 Combuilder 就是把用 Matlab 编写的程序做成 com 组件,供其他语言调用。该方法实现简 单,通用性强,而且几乎可以使用 Matlab 的任何函数(注意: 不支持脚本文件,脚本文件使用时要改为函数文件),因此在 程序较大、调用工具箱函数或调用函数较多时推荐使用,这 也是 Matlab 公司推荐的使用方法。
VisualStudio与Matlab实现混合编程

VisualStudio与Matlab实现混合编程环境:Win10vs2010Matlab2015⾥⾯有很多选做的内容,其中2、3必做1.Matlab环境设置:(选做)我没有做这步,因为打mbuild -setup指令不识别,缺少SDK,但是可以正常调⽤Matlab,这步是其他⽅式调⽤Matlab中的⼀步,使⽤Matlab⽣成DLL⽂件,VS引⽤要建⽴独⽴运⾏的C应⽤程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使⽤mbuild命令可以直接将C/C++源代码编译为独⽴运⾏程序,在这些源代码中可以使⽤Matlab提供的接⼝来调⽤Matlab数学库函数。
虽然⽣成的可执⾏程序可以脱离Matlab环境运⾏,但是它需要Matlab C/C++数学库⽂件或者图形库⽂件的⽀持才能运⾏。
但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调⽤,则不仅可以独⽴与Matlab环境,也不需要那两个库函数的⽀持。
在 Matlab 的Command Window 下输⼊命令。
mbuild – setup操作过程如下图:然后输⼊命令mex – setup以类似的⽅法配置编译器。
Matlab 的配置完成。
2.VS环境设置(必做)(1)设置Include 和Library ⽬录项⽬右键->属性->VC++⽬录->包含⽬录:添加<MATLAB>\R2010b\extern\include\win64 我的是:D:\RUANJIAN\Matlab\extern\include\win64<MATLAB>\R2010b\extern\include\ 我的是:D:\RUANJIAN\Matlab\extern\include项⽬右键->属性->VC++⽬录->库⽬录:添加<MATLAB>\R2010b\extern\lib\win32\microsoft 我的是:D:\RUANJIAN\Matlab\extern\lib\win64\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft截图::(2)设置⼯程⽬录: ( 我并没有设置)项⽬右键->属性->C/C++->常规->附件包含⽬录:添加<MATLAB>\R2010b\extern\include\win64<MATLAB>\R2010b\extern\include\项⽬右键->属性->链接器->常规:添加<MATLAB>\R2010b\extern\lib\win32\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft项⽬右键->属性->链接器->输⼊->附件依赖性:添加 (必做)libeng.liblibmat.liblibmex.liblibmx.lib 注:1.lib⽂件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减 2.附件依赖性在VS2010前以空格隔开,在VS2010后使⽤;隔开。
Matlab与VC(MFC)混合编程(介绍Matcom与Matlab 引擎两种方式)文库

本文由wolf1sky贡献doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
Matlab 与 VC 混合编程 1:一、采用 Matcom1、目标1. 测试在 VC 中调用 MatrixC++库,生成矩阵并显示 2. 测试 VC 中调用.m 文件2、步骤2.1 目标 1<1>建立 VC 工程,添加库 v4501v.lib,有两种方法:?向工程中添加文件 v4501v.lib 在 Setting/link 中添加库 v4501v.lib(这样写的前题是 VC 路径设置正确,即在 Options/Directories 中设置,否则请注明详细路径)二者选其一就可以了。
<2> 添加头文件 #include "matlib.h" (这样写的前题是 VC 路径设置正确,即在 Options/Directories 中设置,否则请注明详细路径)建议:最好在工程中把文件 matlib.h 添加进来,方便查看函数详细说明 <3>现在就可以调用 Matrix中的C++函数了,例子如下:// Init matcom initM(MATCOM_VERSION); winaxes(AfxGetMainWnd()->GetSafeHwnd()); Mm a,b; a = (BR(1),2,3,semi,4,5,6,semi,7,8,9); a = transpose(a); b = (BR(1),2,3,semi,4,5,6,semi,7,8,9); m_1.Format("%3f %3f %3f \r\n%3f %3f %3f \r\n%3f %3f %3f \r\n",a.r(1,1),a.r(1,2),a.r(1,3),a.r(2,1),a.r(2,2),a.r(2,3),a.r(3,1),a.r(3,2),a. r(3,3));//m_1 是一个 CEdit 控件 UpdateData(FALSE); exitM();2.2 目标 2<1>首先用 Matlab 调试成功以下两个有依赖关系的.m 文件文件 1:equation.m function y = equation(a,b) y = a * b; 文件 2:CallE.m % function name function [o1,o2] = CallE(x) if (nargin ~= 1) error('arguments must be inputed!'); endif (x == 1) a = reshape(1:9,3,3); elseif (x == 2) a = reshape(11:19,3,3); else error('input error'); end b = magic(3); o1 = equation(a,b); o2 = o1 + 1; <2>将以上两个文件放在同一个目录下,启动 MatCom 编译运行 CallE.m, >> CallE(2) 则在同一目录下生成一个 DEBUG(或者是 Release,在 MatCom 的菜单项 Configuration 中选择)目录下可以找到相应的.cpp 及.h 文件,把它们全部拷贝到 VC 工程目录下,也可以自己建一个文件夹 <3>在 VC 项目中添加这些文件,并在头部添加相应.h 的引用,如下: #include "./matlib/equation.h" #include "./matlib/calle.h" <4>添加调用函数的代码,如下: Mm a,b,c; a = BR(2); 表示输入参数到输出参数的间隔,《MatrixLIB user's 详见calle(a,i_o,b,c); //i_o 是一个间隔符,Guide》m_2.Format("%3f %3f %3f \r\n%3f %3f %3f \r\n%3f \r\n",b.r(1,1),b.r(1,2),b.r(1,3),b.r(2,1),b.r(2,2),b.r(2,3),b.r(3,1),b.r(3,2),b. r(3,3)); %3f %3fUpdateData(FALSE);3、遇到的问题及解决方案<1>当在 VC 工程中添加由 Matcom 转换的 cpp 及 h 文件后,注:如果在编译中出现下列错误:fatal error C1010: unexpected end of file while looking for precompiled headerdirective 解决:进行下列设置:工程->设置-> C/C++ 选择 precompiled headers 选解决:择第一或第二项:自动选择预补偿页眉,如图:<2>使用Matcom 后,生成Debug 版没问题,而生成Release 时链接出错,nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMT.lib(delete.obj) 解决:解决:将"Project 属性" -> "C/C++" -> "代码生成(codegeneration)" -> "运行时库(run-time library)" 项下修改应用程序的默认标准库版本,我修改成 Debug Multithreads 就可以了,原因是安装Matcom 时库为调试版<3>在其它机器上运行出错解决:解决:将 ago4501.dll v4501v.dll glu32.dll opengl32.dll 附带发布即可 <4>关闭程序后进程没有退出解决:解决:添加语句winaxes(m_hWnd);参考文献1、何东健等.《数字图像处理》.西安电子科技大学出版社.20032、邓科.浅析 VC 与matlab 接口编程(一). VC 知识库,41 期3、邓科.浅析 VC 与 matlab 接口编程(二). VC 知识库,42 期4、Matcom 参考手册Matlab 与 VC 混合编程 2:二、通过 Matlab 引擎与 VC 混合编程--飞狼编程宝典--明明知道选择你是一个错误,却为何那么地坚持这个错误……基于 Matlab 引擎的混合编程方式无法脱离 Matlab 环境,却为何还要使用它?根据本人的实践,对于一般应用,如矩阵运算,图像操作等,使用 Matcom 就已经足够,而且能够脱离 Matlab 那个巨大的环境而独立运行,但是,对于很多好用的 Matlab 工具箱,我们却无法直接在 VC 中调用。
VC和matlab混合编程画图实践

VC和Matlab混合编程画图实践2013-03-14【摘要】在DSP软件开发中,基于代码的可移植性的需要,首先要基于VC平台开发出纯C定点版本。
为了对定点代码的精度和性能进行充分测试,需要对其进行定点仿真并与浮点的性能比较。
浮点代码的性能可以很容易的通过Matlab仿真得到,但由于VC与Matlab对仿真结果的保存形式不同,比对结果的过程需要人为完成。
并且VC对定点仿真的结果保存为文本形式,不够直观。
当仿真或测试条目较多时,这一过程将变得重复而繁琐,因此为了将这一过程变得更自动化、更直观,本实践介绍了一种利用VC调用Matlab动态链接库的方法,通过VC直接调用Matlab的方法进行画图,能够更直观、更方便的分析定浮点仿真结果的差异。
【关键词】Matlab Engine动态链接库VC定点仿真Matlab画图一、问题的提出在VC平台软件开发中,需要对实现的定点代码进行定点仿真,观测最后的BER曲线,并与浮点的结果做对比,观察其性能差异。
然而,VC平台的仿真结果只是保存在数组中的结果,不能直观的展示给测试人员,仍需人为的提取分析,这样便造成重复劳动和时间上的浪费,因此需要寻找一种简单易行的方法,实现将VC的仿真结果画图呈现出来。
二、解决思路Matlab作为数据仿真分析的工具十分强大,其包含了非常丰富的数学运算库和与外部工具的接口,众所周知,利用Matlab画图是十分方便的,只需将仿真结果,外加画图的参数传递给Matlab的命令函数,就能非常方便的完成画图,简单易行。
Matlab与VC的接口方式有很多种,如引擎的形式,COM 组件的形式,动态链接库的形式等等,因为动态链接库的形式在之前的实践中已经研究过,并且相对成熟,因此本实践将着重介绍将Matlab的函数编译成动态链接库供VC调用方法,对于引擎的和其他方式略做简单介绍。
三、实践情况3.1 工具与环境准备1)Matlab环境准备:本实践中采用的Matlab版本为R2011b。
基于VC_和MATLAB混合编程绘制三维图形

第 16 卷第 1 期 2 0 08年 2 月 文章编号: 1005- 1228( 20- 17 作者简介: 张 慧( 1980- ) , 女, 江苏徐州人, 在读硕士, 研究方向: 焊接设备及自动化; 杨 峰( 1978- ) , 男, 安徽凤阳人, 讲师, 硕士, 研究 方 向 : 焊 接 质 量控制及装备。
第 16 卷第 1 期
张 慧, 等: 基于 VC++和 MATLAB 混合编程绘制三维图形
0 引言
MATLAB 进行二维、三维图形显示时, 程序语法简 单, 图形精度高, 用 VC++则需要几十行甚至数百行的 程序, 但 VC++容易做出各种用户界面。在 VC++环境 下调用 MATLAB 中的图形显示函数, 将二者结合进行 编程, 则可实现 VC++和 MATLAB 在此功能上的互补 及数据共享和数据可视化。
·30·
电脑与信息技术
2008 年 2 月
z
B a c k wid th(mm)
本 例 中 用 到 的 数 据 minx=- 4, maxx=4, miny=- 4, maxy=4, 所得图形如图 3 所示:
编译器使用了 C\C++库函数, 需要使用 mbuild - setup 和 mex- setup 对编译器进行配置。这两条命令是 自动搜索系统上安装的编译器, 然后对所选择的进行 核对, Matlab 下的环境配置设置一次即可。 2.1.2 mcc 编译 M 文件
编写绘制三维曲面的 M 函数文件, 命名为 tripic- ture.m, 程序如下所示:
Matlab与VC混合编程

浅析VC与matlab接口编程(一)作者:孙科QQ:44760299邮箱:c_dinco@Matcom是mathTools公司推出的一个能将M文件转化成相同功能C++代码的工具。
相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便得多。
本文将结合作者编程经验,以VC6.0和Matcom为例,详细介绍如何利用Matcom进行VC与Matlab的联合编程。
Matcom安装安装Matcom前要已求安装VC6.0。
在安装过程中出现选择编译器对话框,选择“是”(图一)。
出现选择是否安装Matlab时,选“否”。
其他选项采用默认设置。
Matcom可以独立于Matlab运行,但需要外部的C++编译器,指定Matlab的位置是为了让编译文件中需要的一些系统函数找到路径用的。
图一安装完成后,启动界面MIDEVA(图二)。
MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几部分,并有详细的帮助文档。
图二Matcom命令输入方法与Matlab相同。
如果安装在中文版操作系统时,输入命令前加一空格。
(如图三)。
图三下面详细介绍如何将m文件编译后放入VC中。
1、启动MIDEVA ,File->New,新建如下Test1.m文件:x=1:0.1:10; y=sin(x); plot(x,y);将文件保存(如图四)。
图四m文件保存的默认位置为:matcom安装目录\matcom45,生成的C++文件保存的默认位置为:matcom安装目录\matcom45\Debug\,本例matcom安装目录为C盘即 C:\matcom45\Debug\,在该目录下将会产生Test1.h、Test1.cpp、Test1.r 、Test1.obj文件。
2、在VC中用MFC Wizard(exe)创建一个基于对话框名为Example的工程。
在面板上添加一个ID为IDC_BUTTON1按扭。
MATLAB与Visual C++混合编程在储层三维建模系统中的应用

MATLAB与Visual C++混合编程在储层三维建模系统中的应用摘要:利用Visual C++与MATLAB进行混合编程,开发了三维储层建模系统。
解决了MATLAB 不能实现端口操作、实时控制和V isual C++处理复杂数值运算效率低的问题,二者功能互补,为三维储层建模的复杂计算及计算结果的可视化提供强大的技术支持。
MATLAB将河流储层建模系统中计算模块转化成V isual C++的代码,并将代码用V isual C++编译器编译连接成独立应用程序。
V isual C++编写的可视化交互操作界面对MATLAB 编译后的动态链接库文件进行调用,实现复杂计算功能。
关键词:MATLAB;V isual C++;混合编程;储层三维建模对河流相进行储层建模,我们通常采用自回避随机游走算法,约定游走粒子不允许到达曾经访问过的位置。
这样得到的建模结果就不会产生与自身相交,形成闭合环的现象,符合古河流沉积规律,但是所形成的游走路径是二维空间中的一条折线,脱离了地质构造形态本身,对建模结果的认识不够直观。
因此我们采用空间插值方法建立三维储层建模,以便观察河流空间分布模式。
空间插值常用于将离散点的测量数据转化为连续的数据曲面,本文采用最近邻点插值法对各小层的顶、底面进行建模。
最近邻点插值法又称泰森多边形法,它将空间分割成不同的多边形区域,每一区域的属性值使用距它最近位置点的属性值。
三维插值计算实现代码如下:%编译命令:mcc -W cpplib:libtestgrid -T link:lib testgrid (生成C++的动态库)%编译命令:mcc -W lib:libtestgrid -T link:lib testgrid (生成C的动态库)function testgrid(filename,step,bView)[x,y,top, bottom] = textread(filename, '%*s %f %f %*s %*s %f %f %*f');x=x/1000.0;y=y/1000.0;step = step / 1000.0;mid = (top + bottom)/2;max_x = max(x)+0.2;min_x = min(x)-0.2;xi =(min_x:step:max_x);max_y = max(y)+0.2;min_y = min(y)-0.2;yi=(min_y:step:max_y);[xx,yy]=meshgrid(xi,yi);if (bView)zz_top=griddata(x,y,-top,xx,yy,'nearest');zz_bottom=griddata(x,y,-bottom,xx,yy,'nearest');figure('NumberTitle','off','Name','小层构造模型');mesh(xx,yy,zz_top),hold on;mesh(xx,yy,zz_bottom);plot3(x,y,-bottom,'r.'), hold off;xlabel('X(Km)');ylabel('y(Km)');zlabel('z(m)');title('小层构造模型','FontName','隶书','FontSize',20) 2混合编程2.1实现混合编程的环境配置要成功地实现混合编程,达到混合编程的要求并最终作为独立的应用程序发布, 首先要对MATLAB 及V isual C+ + 进行环境的配置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
·30-电脑与信息技术2008年2月
本例中用到的数据minx=-4,maxx=4,rainy=一4,maxy=4,所得图形如图3所示:
圈3利用MATLAB编译器绘图结果
2.2MATLAB引擎
从编程复杂度的角度来说,最简单的途径就当属利用MATLAB的引擎功能闭。
与其它各种接口方式相比,引擎所提供的MATLAB功能支持是最全面的。
2.2.1VC环境设置
用MFCAppWizard(exe)建立一个应用程序,并作如下设置:
(1)通过菜单Tools/Options…,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Includefiles,添加路径D:WIATLAB6p5\extem\include再在下拉框中选择Libraryfiles,添加路径D:、MA’ILAB6p5、extenluib\win32\IIlicrosofc\lIlsvc60
(2)选择菜单Project/Settings…,打开工程设置属性页,进入Link页面,在Object/librarymodules编辑框中,添加文件名libmx.1iblibmat.1iblibeng.1ib,以空格隔开。
2.2.2VC++中程序说明
调用命令engOpen打开引擎,然后将mxArray转换成在MATLAB中可操作的形式。
具体方法是:在MATLAB中将一个自定义的数据结构复制到mx.Array中,后将此矩阵放人MATLAB计算引擎的工作区中,把命令以字符串的形式传递给函数engEvalString进行执行。
使用引擎,计算程序中必须添加头文件#include“en6ne.h”,程序开始后需要打开引擎,运算完成后要释放内存并关闭引擎。
本例绘制的是一个TIG焊焊接质量神经网络中输出背面熔深(BackWidth)与两个输入参数电流Cur-rent)、清洁度(Cleaning)之间的变化曲线。
已知两个输入参数的最小值与最大值(minx=80,maxx=100,miny=30,maxy=60),采样个数取为50,即共有51个数。
X【5H,y【51】中存储了采样后的两个输入变量值,数组matdatai]中存储的是其余参数不变时,电流每变化1次,清洁度变化51次后,神经网络运算出的背面熔深的结果。
主要程序代码部分:
倒建矩阵并命名赋值
mxmatdata=mxCreateDoubleMatrix(51,51,mxREAL);
xx=mxCreateDoubleMatrix(51,1,mxREAL);
yy=mxCreateDoubleMatrix(51,1,mxREAL);
memcpy(mxGetPr(mxmatdata),matdata,51451。
sizeddou-ble));
memcpy(mxGet_Pr(xx),x,51*sizeof(double));
memcpy(mxGetPr(yy),Y,51*sizeof(double));
鸺变量写到matlab工作空间并命名
ensPutVariable(ep,"mxmatdata”,atxmatdata);
engPutVariable(ep,"】【】【”,xx);
ell【gPutVariable(ep,"yy”,yy).
engEvaIString(ep,"【)【,Y]=meshgrid(xx,)ry);”);
en#valString(ep,"mesh(X,Y,mxmatdata);”);
程序运行后得到的图形如图4所示:
图4利用MAlrIAB引擎绘图结果
3结论
本文通过两个实例把VC++与MATLAB的数值计算、图形显示功能进行了结合,既保持了VC++的良好用户界面和高执行效率,又保持了MATLAB的优良算法,使VC++和MArlLAB各自的优势能够得到充分发挥。
当VC与MATLAB互传的参数比较简单或无参数传递时,使用MATLAB编译器实现相对简单方便,且可以脱离MATLAB环境运行,但图形不方便存储;当需要互传大量数据,则使用MATLAB引擎更容易实现,图形方便存储,但不能脱离MATLAB环境。
参考文献:
【l】1李天昀,葛临东.综述MATI.AB与vc++的交互编程叽计算机仿真,2004,21(9):193—196.
【2】何强,何英.MATLAB扩展编程[MI.北京:清华大学出版社,2002.【31柏晟.VC++与MATLAB混合编程的方法研究与实现忉.电脑开发与应用,2006,19(4):24-27.
【4】潘爱民,王国印.Visualc++技术内幕【M】.北京:清华大学出版社,1998.
【51飞思科技产品研发中心.MATLAB6.5应用接口编程【M】.北京:电子工业出版社。
2003.
【61周灵.基于COM的vC调用Madab的方法及实现【J】.中国科技信息,2006,24:131—133.
忉张志涌.精通MATLAB6.5版【明.北京:北京航空航天大学出版社,2003.
18】张威.MATLAB外部接121编程【M】.西安:西安电子科技大学出版社。
2004.
基于VC++和MATLAB混合编程绘制三维图形
作者:张慧, 杨峰, ZHANG Hui, YANG Feng
作者单位:江苏科技大学材料科学与工程学院先进焊接技术省级重点实验室,江苏镇江,212003刊名:
电脑与信息技术
英文刊名:COMPUTER AND INFORMATION TECHNOLOGY
年,卷(期):2008,16(1)
被引用次数:1次
1.张威MATLAB外部接口编程 2004
2.张志涌精通MATL AB 6.5版 2003
3.周灵基于COM的VC调用Matlab的方法及实现[期刊论文]-中国科技信息 2006(24)
4.飞思科技产品研发中心MATLAB6.5应用接口编程 2003
5.潘爱民;王国印Visual C++技术内幕 1998
6.柏晟VC++与MATLAB混合编程的方法研究与实现[期刊论文]-电脑开发与应用 2006(04)
7.何强;何英MATLAB扩展编程 2002
8.李天昀;葛临东综述MATLAB与VC++的交互编程[期刊论文]-计算机仿真 2004(09)
1.沈颖.宋文强基于VC++和Matlab的图像处理比较研究[期刊论文]-电脑知识与技术 2009(16)
本文链接:/Periodical_dnyxxjs200801010.aspx。