Matlab函数转c++

少于 1 分钟阅读

利用MATLAB coder.m文件转.cpp的方法

首先看一下要转换的代码(一个function文件),非常简单,只是用于测试,实际使用不会这么简单,因为还会涉及到:代码的优化,以及变量类型声明变量的维度动态变化等问题,这些都C++和MATLAB严重冲突的地方。

function sum = myadd(x,y)
sum = x+y;

1. 安装编译器

>> mex -setup
MEX 配置为使用 'MinGW64 Compiler (C)' 以进行 C 语言编译。

要选择不同的语言,请从以下选项中选择一种命令:
 mex -setup C++ 
 mex -setup FORTRAN

如果已经安装好可以跳过,如果没有安装好matlab会弹出安装下载链接,根据提示点击链接即可!

2. 安装matlab coder app

点击右上角附件功能输入coder下载安装(听说破解版MATLAB似乎无法安装,试一下吧)

3. 启动matlab coder app

>> coder

4. 添加函数开始转换

在此之前,为了不必要的麻烦,请大家将当前文件夹改为所要转换函数所在的文件夹。

4.1 添加函数

重点:要添加function而不是脚本!

4.2 声明变量类型

用命令在命令行声明或者手动选择

4.3 转换测试

如果有错误,根据对应的错误进行修改

4.4 设置一些东西

如果不懂,就按默认就好了,选一下要转换的类型

4.5 查看文件和报告

重点关注同名.cpp同名.h;main.cpp、main.h是测试文件,可以忽略,也可以看一下,是官方给的一个调用生成函数的例子,不会参与最终的代码!其他的文件按照需要进行选择,我这里只保留了同名.cpp和同名.h。

5. 在c++编译器中进行测试

我用的是VS2013,这不是MATLAB的重点,需要大家了解C++的代码,我仅仅给出改造的测试文件(我的B站视频有这部分的录屏):

//这是头文件.h

/*
 * Academic License - for use in teaching, academic research, and meeting
 * course requirements at degree granting institutions only.  Not for
 * government, commercial, or other organizational use.
 *
 * myadd.h
 *
 * Code generation for function 'myadd'
 *
 */

#ifndef MYADD_H
#define MYADD_H

/* Include files */
#include <cstddef>
#include <cstdlib>

/* Function Declarations */
extern double myadd(double a, double b);

#endif

/* End of code generation (myadd.h) */
//这是源文件.cpp
#include "iostream"
#include "myadd.h"
using namespace std;

int main(void)
{
	double result;
	double x = 1;
	double y = 2;
	result = myadd(x,y);
	cout<<result<<endl;
	cout << "按任意键继续……";

	cin.clear();//清空缓存区
	cin.sync();
	cin.get();
	/* 这是出现“无法查找或打开 PDB 文件”的解决方案,
	目前本机还没有更好的方法,但是大家不一定会出现这个问题
	以上四行可以换成,system("pause");但是不推荐
	*/
}

/* Function Definitions */
double myadd(double a, double b)
{
  return a + b;
}

/* End of code generation (myadd.cpp) */

最后,文字稿写的相对概括,如果不明白可以看我的B站视频(主页找找)。