美文网首页
vc与matlab 混编

vc与matlab 混编

作者: Drlilian | 来源:发表于2019-06-26 09:21 被阅读0次

2011-05-05
己写好的matlab*.m文件做成动态链接库dll的形式,然后呢,vc动态调用它

废话少说。上例子。

一、 编写matlab 函数

myfun.m

function y=myfun(timeend)

t=0:0.001:timeend;

y=sin(2*pi*50*t);

plot(y);

二、Matlab编译环境的设置

输入命令   mbuild  -setup                  %你选择vc6.0那个

输入命令       cd(prefdir);

输入命令   mex   -setup                        %你选择vc6.0那个

输入命令      cd(prefdir);

输入命令   mcc -B csglsharedlib:mylib myfun               %mylib是你命名的生成的库,myfun是你的m文件名,中间还有分号

到此生成了.c; .h;. lib; dll等文件。

三、VC工程环境的设置

这里比较乱。

 1) 设置Include 和Library 目录

在VC++ IDE 中选择Tools->Options->Directories。

a  在Show directoris for:中选择Include files, 添加如下两个目录:

D:\program files\matlab\extern\include\win32

D:\program files\matlab\extern\include

b  在Show directoris for:中选择Library files, 添加如下两个目录:

D:\program files\matlab\extern\lib\win32\microsoft

D:\program files\matlab\extern\lib\win32

2) 工程(project)本身的一些设置

在VC++ IDE 中选择Project->Setting->C/C++

在Category 中选择Code Generation, 在Use run-time library 中选择Multithreaded DLL。

在Category 中选择Precompiled Headers,选择Automatic use of precompiled headers, 并且在Through header 下面添加stdafx.h。

在Category 中选择Preprocessor , 在preprocessor definitions 中添加MSVC,MSWIND,IBMPC.

在VC++ IDE 中选择Project->Settings->Link

在Categories 中选择Input, 在Ignore libraries:中填入: msvcrt.lib。

                                             在Object\libraries module 填入:libmex.lib libut.lib mclmcrrt.lib libeng.lib mylib.lib libmx.lib

( 3) 为工程添加相应的文件

把刚才生成的mylib.h  mylib.lib 和D:\program files\matlab\extern\lib\win32\microsoft下的所有*.lib文件复制到VC++工程的文件夹

下, 并且用add files to project … 添加的工程中。把mylib.dl添加到工程中的debug里面。

四 vc程序

建立一个对话框工程mypro

mypro.dlg 源文件里加入#include "mylib.h"

确定按钮里面写函数

void CMyproDlg::OnOK() 

{

//注册动态链接库

mylibInitialize();

CString str;

double x=0.04;

//创建mxArray 型数据并对其赋值

mxArray * pArrayIn=NULL;

mxArray *pArrayOut=NULL;

pArrayIn=mxCreateDoubleMatrix(1,1,mxREAL);

memcpy(mxGetPr(pArrayIn),&x,sizeof(double));

//或者使用t=mxCreateDoubleScalar(x)

//或者使用Matlab 数学库中的函数mlfAssign()等

//使用mylib.dll 中的函数

mlfMyfun(1,&pArrayOut, pArrayIn);

double * md=mxGetPr(pArrayOut);

double    result1=md[0];

str.Format ("It is : %f",result1);

::AfxMessageBox(md);

//销毁t, 释放内存

mxDestroyArray(pArrayIn);

mxDestroyArray(pArrayOut);

//注销动态链接库

mylibTerminate();

CDialog::OnOK();

}

另一个实现x1+x2的vc程序如下

void CMattDlg::OnButton1() 

{

//在matlab中定义的m文件:myfun,其功能是完成两个数的相加操作。

               CString str;

            UpdateData(true);

            pppInitialize();

            //为了调用matlab中的函数,必须使用数组数据类型,并其后调用matlab函数将其转化为矩阵格式(matlab的基本数据类型是矩阵)

            static double x1[1]={1.0};

            static double x2[1]={2.5};

            double result1;

            //调用matlab创建3个矩阵

            mxArray *A=NULL;

            mxArray *B=NULL;

mxArray *C=NULL;

A=  mxCreateDoubleMatrix(1,1,mxREAL);

B=  mxCreateDoubleMatrix(1,1,mxREAL);

* (mxGetPr(A))=1.0;

* (mxGetPr(B))=1.0;

mlfMyfunct(1,&C,A,B);

//将matlab中的矩阵的指针传递给C语言中的指向double的指针

            double * md=mxGetPr(C);

            result1=md[0];

            //释放这些矩阵

            mxDestroyArray(A);

            mxDestroyArray(B);

            mxDestroyArray(C);

            str.Format ("It is : %f",result1);

            ::AfxMessageBox(str);

}

参考文献http://blog.csdn.net/answermj/archive/2010/04/21/5513219.aspx

 http://blog.sina.com.cn/s/blog_61e6344d0100ive3.html

http://hi.baidu.com/%D3%F9%BD%A3%D1%B0%CF%C9%C9%CF%B9%E3%BA%AE/blog/item/dd98e8f2c1eec65a342acc6a.html

http://wenku.baidu.com/view/1b73a7db50e2524de5187e6b.html百度文库

              浅谈matlab 与混编技术.ppt 电脑里编程练习里面存的。

相关文章

  • vc与matlab 混编

    2011-05-05己写好的matlab*.m文件做成动态链接库dll的形式,然后呢,vc动态调用它 废话少说。上...

  • 图像处理入门书推荐

    《MATLAB图像处理实例详解》 《数字图像处理》 冈萨雷斯 《图像识别与项目实践――VC++、MATLAB技术实...

  • MATLAB与vistualstudio混编

    MATLAB 2017avs2017有内容在更新,本次先记录一下 电脑里面软件:eclipse(java,jdk1...

  • Swift

    混编 15、OC与Swift的混编_海森堡_lichangan的博客-CSDN博客_oc swift 混编[htt...

  • VC Dimension

    VC Dimension 定义定义解释 M与VC Dimension VC Bound变形 总结 总结

  • 自制Framework:swift与OC混编,自定义module

    为何要swift与oc混编 在ios开发中,swift与oc的混编,几乎是不可避免的。2014年,Apple在开发...

  • php基本语法 day2(2019.4.9)

    一、PHP基本语法 1.PHP标记 1)标准的标记 PHP 支持与HTML混编 ,混编的文...

  • php-day2

    一、PHP基本语法 1.PHP标记 1)标准的标记 PHP 支持与HTML混编 ,混编的文...

  • matplotlib作图

    类MATLAB API 加载方式from pylab import * 图形绘制与matlab相似 matplot...

  • iOS项目中的ARC与MRC切换,混编

    项目中ARC与MRC模式的切换方法: ARC与MRC混编:

网友评论

      本文标题:vc与matlab 混编

      本文链接:https://www.haomeiwen.com/subject/qelzxctx.html