举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤

转载 2013年12月03日 12:33:54

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码

使用MATLAB Coder产生代码的3个步骤:准备用于产生代码的MATLAB算法;检查MATLAB代码的兼容性(有些matlab代码语句并不能生成c/c++代码);产生最终使用的源代码或MEX。

利用MATLAB Coder生成c++代码,并在vs2008中验证:

一个简单的例子,两数相乘

1、安装matlab2011a或者更新版本;

2、简单生成一个foo.m文件;

function c = foo(a, b)%#codegen

%This function muliplies a and b

c = a * b

其中,%#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对话框,在MATLAB Expression中输入5,点击OK;同样变量b也进行相应操作,输入6;

8、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only;

9、点击More settings,GeneralàLanguage选择C++;Interface选项中去掉所有选项;Close;

10、点击Build,进行编译;点击View report,弹出Code Generation Report对话框,此时,变量a、b、c会显示相应的变量信息;

11、利用vs2008建立一个控制台应用程序,将生成的相关文件foo.h、foo.cpp、rtwtypes.h、foo_types.h拷到相关目录下并添加到应用程序中;

12、在foo.cpp文件中添加#include “stdafx.h”;//VC++6.0找不到这个库,实际测试时,忽略

13、test.cpp文件中代码为: //自行编写的一个测试文件

//#include "stdafx.h" //忽略

#include "foo.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]) //实际测试时改为 main()

{

double a = 0.0, b = 0.0, c = 0.0;

cin>>a>>b;

c = foo(a, b);

cout<<"c = "<<c<<endl;

return 0;

}

一个复杂的例子,求一个数的n次方根

1、 两个.m文件:

nrt.m:

function [nth_rt, iterations, hstry] = nrt(varargin)%#codegen

%This function will use a Newton Search Technique to find

%the nth root of a number, a, to the tolerance, tol.

%The square root

% nrt(10, 2), or nrt(10, 2, 1e-9)

%The "n" root

%nrt(10, n), or nrt(10, n, 1e-9)

a = varargin{1};

n = varargin{2};

if nargin ~= 3

tol = 1e-9;

else

tol = varargin{3};

end

if a < 0

nth_rt = 0;

iterations = 0;

hstry = 0;

else

[nth_rt, hstry] = newtonSearchAlgorithm(a, n, tol);

iterations = length(find(hstry ~= 0));

%iterations = sum(hstry ~= 0);

end

newtonSearchAlgorithm.m

function [x, h] = newtonSearchAlgorithm(b, n, tol) %#codegen

%Given, "a", this function finds the nth root of a

%number by finding where: x^n-a = 0

coder.inline('never'); %使其生成一个单独的c++文件

notDone = 1;

aNew = 0; %Refined Guess Initialization

a = 1; %Initial Guess

cnt = 0;

h = zeros(50, 1);

h(1) = a;

while notDone

cnt = cnt + 1;

[curVal, slope] = f_and_df(a, b, n); % square

yint = curVal - slope * a;

aNew = -yint / slope; %The new guess

h(cnt) = aNew;

if (abs(aNew-a) < tol) %Break if it's converged

notDone = 0;

elseif cnt > 49 �ter 50 iterations, stop

notDone = 0;

aNew = 0;

else

a = aNew;

end

end

x = aNew;

function [f, df] = f_and_df(a, b, n)

%Our function is f=a^n-b and it's derivative is n*a^(n-1).

f = a^n-b;

df = n*a^(n-1);

2、 在命令窗口输入coder(图形界面),回车,弹出MATLAB Coder Project对话框;

3、在New选项卡Name中输入一个工程名nrt.prj;点击Ok,弹出MATLAB Coder MEX Function对话框;

4、在Overview选项卡中,点击Add files,弹出对话框,选中nrt.m打开;

5、添加三个输入,分别为10、2、1e-9;两个输入也可以;

6、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only;

7、点击More settings,GeneralàLanguage选择C++;Interface选项中去掉所有选项;Close;

8、点击Build,进行编译;点击View report,弹出Code Generation Report对话框;

9、利用vs2008建立一个控制台应用程序,将生成的相关文件nrt.cpp、nrt.h、newtonSearchAlgorithm.cpp、newtonSearchAlgorithm.h、nrt_types.h、rtwtypes.h拷到相关目录下并添加到应用程序中;

10、分别在nrt.cpp、newtonSearchAlgorithm.cpp文件中添加#include “stdafx.h”;

11、test.cpp文件中代码为:

#include "stdafx.h"

#include "nrt.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

double varargin_1 = 0, varargin_2 = 0, varargin_3 = 1e-9;

cin>>varargin_1>>varargin_2;

double nth_rt = 0, iterations = 0;

double hstry_data[50] = {0};

int hstry_sizes[1] = {0};

nrt(varargin_1, varargin_2, varargin_3, &nth_rt, &iterations, hstry_data, hstry_sizes);

cout<<"nth_rt = "<<nth_rt<<endl;

cout<<"iterations = "<<iterations<<endl;

cout<<"hstry_data = "<<endl;

for (int i=0; i<50; i++)

{

cout<<hstry_data[i]<<endl;

}

cout<<"hstry_sizes = "<<hstry_sizes[0]<<endl;

return 0;

}

参考:

1、录制的网上研讨会的MATLAB Coder视频http://v.youku.com/v_show/id_XMzA3MTA3NDQ4.html

2、http://www.mathworks.cn/products/matlab-coder/

原文: http://blog.sina.com.cn/s/blog_7839068101016buh.html

MATLAB Coder从MATLAB生成C/C++代码步骤

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码。 使用MATLAB Coder产生代码的3个步骤: 准备用于产生代码的MATLAB算法; 检查MATL...
  • ranjiewen
  • ranjiewen
  • 2016年09月20日 14:10
  • 423

使用 MATLAB Coder 将 MATLAB 代码生成 C/C++ 代码

MATLAB Coder 可以将 MATLAB 代码生成独立的、可读性强、可移植的 C/C++ 代码。 使用 MATLAB Coder 产生代码的3个步骤: 准备用于产生代码的MATLAB算法;检...
  • xgf415
  • xgf415
  • 2017年01月12日 20:05
  • 1219

MATLAB Coder(转自恒润科技)

MATLAB Coder --> ——从MATLAB代码生成C/C++代码       MATLAB  Coder™ 可以从MATLAB®代码生成独立的、...
  • wangw89
  • wangw89
  • 2011年08月16日 11:29
  • 8614

Matlab R2014a由.m文件产生C代码,在VS2010中运行

1、首先,准备.m文件:mySub.mfunction c = mySub(a,b)%#codegen c = a - b; end其中,%#codegen可以防止出现警告错误2、在matlab的命令...
  • Joan_Lee
  • Joan_Lee
  • 2016年04月07日 16:21
  • 3295

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码。 使用MATLAB Coder产生代码的3个步骤:①准备用于产生代码的MATLAB算法;②检查MATL...
  • sunanger_wang
  • sunanger_wang
  • 2012年09月10日 14:41
  • 2859

matlab2015b matlabcoder浅入门

matlabcoder浅入门 MATLAB Coder 工具可以将MATLAB 函数直接生成 C 代码。下面在matlab2015b上面做一个简单的测试。 步骤1:简单生成...
  • aimuHeart
  • aimuHeart
  • 2016年04月22日 09:37
  • 1083

基于MATLAB Coder将matlab代码转换成C代码

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码。本文基于matlab2015a编制,但是也适用于matlab 2014~2016的版本。 1. 使用MATL...
  • zyqdragon
  • zyqdragon
  • 2017年05月09日 22:54
  • 4699

MATLAB coder (2014b)将.m文件转c++源码

注意: 1.通过matlab coder转c++文件不需要考虑win32或x64环境 2.在运行速度上通过matlab coder转c++文件,运行速度要比matlab转dll文件在vs里运行起来要快...
  • yyzguoyanyan
  • yyzguoyanyan
  • 2017年05月11日 13:26
  • 647

【MATLAB工程人员的福音】MATLAB R2015b的Coder工具使用实例(一)

版权声明: 1、这篇教程参考如下: 参考1: 参考2: 参考3: 2、这篇文章用的实例不会太简单,也不会太复杂,力求可以把问题说清楚。 3、本着尊重原创,大家转载的时候请注明出处,此教程编写不易啊...
  • XiaoXuZaiZi
  • XiaoXuZaiZi
  • 2015年12月24日 15:42
  • 9008

matlab 生成调用c/c++ 代码 mex 简单实用

目标:在matlab中送入一张图像,对图像进行处理,输出为一副图像。 第一步:在matalb 当前目录下放人fun_name.cpp文件。如定义hello.cpp文件在当前路径下:       #i...
  • xiaoyanghijk
  • xiaoyanghijk
  • 2016年08月30日 16:33
  • 1572
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤
举报原因:
原因补充:

(最多只允许输入30个字)