MATLAB程序生成C或C++代码
来源:互联网 发布:Linux解压rar 编辑:程序博客网 时间:2024/05/16 10:54
matlab程序转C/C++代码
常用的4种方式
第一种使用Mideva,涉及线程问题,并且永远只使用matlab6以前的版本
第二种就是使用Matlab引擎来调用m文件,也比较简单,但是必须在目标机器上安装matlab才行,这往往是不现实的。
第三种使用mcc将m文件编译成为C/C++代码,然后导入Vc编译,因为常常生成很多源代码,使用很繁琐。
第四种就是使用mcc将m文件编译为头文件、dll和lib然后导入VC编译。目前这是最可行的一种方法。
但是这几种方法都不利于维护,且程序没有可读性。能否适用要看结合自己的情况。这几种方法在这篇博客有比较详细的介绍——使用MATLAB Coder从MATLAB生成C/C++代码。
一个简单的例子
这里是第3种方式的简单例子:
1、安装matlab2013a或者更新版本;
2、以简单一个简单的例子,两数相乘。生成一个foo.m文件;
function c = foo(a, b)%#codegen%This function muliplies a and bc = a * bend
其中,%#codegen可以防止出现警告错误
3、在命令窗口,输入mex -setup
,选中一个存在的编译器;
4、在命令窗口输入coder
(图形界面),回车,弹出MATLAB Coder Project对话框;
5、在New选项卡Name中输入一个工程名foo.prj;点击Ok,弹出MATLAB Coder MEX Function对话框;
6、在Overview选项卡中,点击Add files,弹出对话框,选中foo.m打开;
7、单击变量a,选择Define by Example…,弹出MATLAB Coder Define by Example对话框,设置变量的类型。函数所传递的参数的类型和维数是必须确定的。
)
8、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only;
9、点击More settings,Generalate Language选择C++;Close;
10、点击Build,进行编译;点击View report,弹出Code Generation Report对话框,此时,变量a、b、c会显示相应的变量信息;
11、利用vs2008建立一个控制台应用程序,将生成的相关文件.h头文件和.cpp文件拷到相关目录下并添加到应用程序中;
实际转化复杂一点的函数时有可能出错
例如matlab存在以下代码:
%解方程T1^3+2*V_start*T1/J-L/J=0得到T1 %V_end2=V_start+J*T1^2a=1;b=0;c=2*V_start/J;d=-L/J;x=roots([a b c d]);T1=x(abs(imag(x))<1e-6);T3=T1;%时刻定义time1=0:T:T1;
当Matlab函数的代码中存在time=0:T:T1;其中T是传进来的参数,T1是根据传进来的几个参数计算得到的。这样的代码有可能会出错,提示colon operand must be a real scalar.(冒号操作数必须是实数标量。)。
这里T1这个变量的维数以及是否是实数是不确定的。但是在time1=0:T:T1;
语句中的冒号的操作数必须是实数标量。因此这样的代码需要确定T1是实数的标量。
12、在foo.cpp文件中添加#include “stdafx.h”;如果转化生成很多的.cpp文件,那么需要在所有的.cpp文件中添加#include “stdafx.h”。
13、test.cpp文件中代码为:
#include "stdafx.h"#include "foo.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ double a = 0.0, b = 0.0, c = 0.0; cin>>a>>b; c = foo(a, b); cout<<"c = "<<c<<endl; return 0;}
这样就完成了。
小结
对于简单的matlab程序转为c/c代码确实很方便。但是对于复杂的程序则会很多可能会出现很多问题,且转化得到的代码量常是原代码量的十倍。因此如果代码需要经常修改和维护的最好不要使用matlab转,而直接用c/c++写会更加好。
参考资料
举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤
使用MATLAB Coder从MATLAB生成C/C++代码
- MATLAB程序生成C或C++代码
- matlab C代码生成
- Matlab生成c代码
- Matlab生成C代码
- Matlab C代码生成 2
- Matlab生成C代码 3
- Matlab C代码生成 4
- 【matlab/C++】MATLAB直接生成Java&C/C++代码
- 使用 MATLAB Coder 将 MATLAB 代码生成 C/C++ 代码
- MATLAB Coder从MATLAB生成C/C++代码步骤
- 使用MATLAB的MCC命令生成C/C 程序
- 使用MATLAB的MCC命令生成C/C++程序
- 使用MATLAB的MCC命令生成C/C++程序
- matlab 生成调用c/c++ 代码 mex 简单实用
- Matlab调用c程序
- MATLAB调用C程序
- Matlab调用C程序
- matlab调用c程序
- LA --- 2678 子序列 【思维】
- php的auth权限类源码
- 大话设计模式——代理模式
- 使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug
- poj 1273 Drainage Ditches
- MATLAB程序生成C或C++代码
- 程序设计语言基础
- 学习嵌入式LINUX的开始
- 198. House Robber
- MyBatis框架的认识
- 异常处理
- Dubbo基本原理机制
- reverse number
- 【C语言】【unix c】同名局部变量之间关系