c++程序里如何调用MATLAB中的函数

我们的c++程序有很多种方法调用Matlab中的函数,但是我最喜欢的方法是直接调用Matlab的动态库,这样生成的程序在没有安装Matlab的机子上也可以运行。具体的方法如下:


上面提到的Matlab“动态库”是指Matlab6.5的动态库,6.5以上不支持这样直接调用程序了,所以没有提供类似的动态库。安装MATLAB6.5后,在安装路径下的extern文件夹下就是我们要的所有东西了。

其中:

...extern\include,里的文件就是我们需要包含文件,将...\extern\include和...\extern\include\cpp添加到VS里的工具\选项\项目和解决方案\包含文件中;

...extern\lib,里的文件就是我们在编译时要用到的库文件,将...\extern\lib\win32和...\extern\lib\win32\microsoft\msvc60添加到VS里的工具\选项\项目和解决方案\库文件中;

...extern\lib\win32\dll\bin\win32里的文件就是动态库文件,发布程序时,我们将这些文件拷贝到和我们程序.exe文件同级的目录下,一起发布,这样目标机上不用安装matlab也可以运行了。


下面举个在C++中如何调用Matlab函数的例子:

int CurveSmooth(double *x1,double* y1,const int count1,double *x2,double *y2,const int count2)
{
    //启用Matlab自动内存管理
    mlfEnterNewContext(0, 0);

    mxArray *x = NULL;                    //中心波长系数中间一列的矩阵
    mxArray *y = NULL;                     //中心波长系数中间一列的矩阵
    mxArray *xi = NULL;                      //输入的像元向量矩阵
    mxArray *yi = NULL;                    //输出的像元向量矩阵
    //封装为matlab矩阵    
    mlfAssign(&x, mlfDoubleMatrix(1,count1,x1, NULL));
    mlfAssign(&y, mlfDoubleMatrix(1,count1,y1, NULL));
    mlfAssign(&xi, mlfDoubleMatrix(1,count2,x2, NULL));    

    //开始进行样条插值
    mlfAssign(&yi,mlfSpline(x,y,xi));
    //获取矩阵数据指针
    double *vo=mxGetPr(yi);

    //填充输出数组
    for (int i=0;i<count2;i++)
    {
        y2[i]=vo[i];
    }

    mxDestroyArray(x);
    mxDestroyArray(y);
    mxDestroyArray(xi);
    mxDestroyArray(yi);

    //关闭Matlab内存自动管理
    mlfRestorePreviousContext(0, 0);

    return 1;
}

以上为计算曲线样条插值的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值