Ok截至目前最新版的matlab是2015b,怎么安装上就不说了。这里介绍的是在matlab2015b下的使用。为什么选择2015b,肯定越新的版本支持的越多,要知道matlab并不是能把其自带的所有内部函数都转化为c代码的,也不是所有的matlab数据类型都可以转化的,比如2015b之前的版本,如果你的matlab代码中存在cell结构的数据时你是转换不成c代码的,不支持,2015b也才刚刚支持,所以如果碰到cell结构的数据,在以前的版本你还得去转换成其他格式,cell数据类型的数还挺麻烦,不好弄。新本还有一些其他新加功能,详细可参考官网和用户指导手册。
下面介绍简单实例,求取两个4*4矩阵相加后,在求取最大值与最小值。这里先用一个函数实现,再分成两个函数实现,因为有的时候函数可能会涉及到函数调用。
单个函数示例如下:
function [a,b] = min_max(m,n)
temp = m+n;
a = max(max(temp));
b = min(min(temp));
对了,Matlab代码生成只能生成函数,对于脚本是无法生成C代码的(像上面这个带function的叫函数,没有function的m文件是脚本)。好了可以打开matlab coder了。
选择刚刚的那个函数,下一步
由于这里只有一个函数,也不用调用其他的函数(当然matlab内部自带的函数不用管了,想min与max),所以也不用添加其他函数。下一步
这一步是指定输入数据类型的,比如说你的两个相加矩阵是多大的呀,是int还是double等等。这里有两种方式,一种是根据函数的使用实例自动确定输入类型,一种是自己手工确定输入矩阵大小等等。那么一般的话,如果你知道你的矩阵大小,或者简单的函数,用第二种完全可以,但是有些时候,比如说我们的输入是一个大结构体,结构体里面超复杂,你怎么去一个个确定里面的什么输入(这种情况常见于我们使用别人的工具箱的函数的时候)。这个时候第一种第一种很好了,那么第一种方式什么意思呢?就是让你自己建立一个脚本(不是函数),然后脚本你们包含了你的这个函数的用法。这里假设我的两个矩阵为4*4的矩阵,好了再建立一个实例化的test脚本如下:
M1 = rand(4,4);
M2 = rand(4,4);
[a,b] = min_max(M1,M2);
然后按照方式一选择这个test.m
脚本:
点击自动确定输入类型,点完后就会出现自动确认的输入类型了。下一步
这是检验一下测试的脚本行不行,如果你上述不是自动确认输入方式的话可能没有这一步,然后下一步
到这里才是真正产生c与c++代码的时候了,当然还有些默认参数可以修改,正常你就不要改了。直接选个c或者c++,产生吧。完了以后会看到。
有一堆,但是也有几个主要的(用到c++中不知道选哪个就都选上吧),这么个简单的matlab函数转换成c++有160多行,算了,反正也不是自己写,管他多少行。在下一步打包就完成了。
Ok转换完的c++怎么在vs(我的是vs2013)上使用呢?
打开vs,新建c++工程,等等等等,最后把这个生成的一大堆复制粘贴放到vs所在的那个文件夹下的那个工程中去,在vs中的源文件下添加现有项目,把刚才复制的cpp都添加进去,h文件添加到头文件(注意要在C/C++ → \rightarrow →常规下面添加附加包含目录),也可以把matlab生成的example文件夹里的main的cpp与h添加进去,最后添加完的如下:
这个时候直接运行main是可以运行的,不过结果什么也没有,因为main函数里面随机生成4*4的矩阵是这样的,
全是0,且在c++这里,你也没有让它显示cout出来
Ok,把这个main函数改一下,生成随机数也改一下,生成1-10随机数
显示出来,注意加点头文件。现在再去运行结果如下:
前面是两个矩阵(拍成一列了),对应相加再去求最大最小,发现是对的吧。Ok结束。
下面把这个矩阵求和然后在求最大最小分成两个m函数,如下:
addadd.m
function mn = addadd(m,n)
mn = m+n;
min_max(m,n)
function [a,b] = min_max(m,n)
temp = addadd(m,n);
a = max(max(temp));
b = min(min(temp));
这样再去生成c++代码:
在添加函数这一块,可以把用到的都添加进去,也可以只添加最终的那个,像这里就是min_max是最终的,它会调用addadd,所以addadd加不加都可以,matlab在下一步会自动添加的 ,注意,这一步如果没有将addadd.m添加进去,可能会没有addadd(m,n,temp)这个函数,matlab会将其转换为相应的代码,同时注意添加*.m的顺序,最好是按照函数调用的先后顺序,后调用的放置在前面,先调用的放置在后面** 。接下来类似,那么来看看识别出来的输入对象:
生成的代码如下,可以看到这个时候不再是一个min_max.cpp,还多了个addadd.cpp,并且在min_max函数中调用了如下:
如前面所述,后面的过程类似。。。
转载自:
博主:我i智能
博文地址:https://blog.csdn.net/on2way/article/details/49204511#commentBox
来源:CSDN