Matlab--m代码转C与C++代码)1(简单示例涉及到函数调用)
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
Matlab--m代码转C与C++代码)1(简单示例涉及到函数调用)相关推荐
- 静态网页制作代码php,php生成静态页面的简单示例
发布新闻,实现新闻页面静态化,真静态 add.php 新闻标题: 新闻内容: config.php define("HOST", "localhost"); d ...
- matlab 指数拟合原理,matlab指数增长和阻滞增长拟合代码.doc
matlab指数增长和阻滞增长拟合代码 代码: t=1:13; x=[3.04,6.63,11.13,28.43,49.22,87.85,134.11,200.00,208.69,303.03,410 ...
- 阻滞增长函数matlab拟合,matlab指数增长和阻滞增长拟合代码讲课稿
<matlab指数增长和阻滞增长拟合代码讲课稿>由会员分享,可在线阅读,更多相关<matlab指数增长和阻滞增长拟合代码讲课稿(7页珍藏版)>请在人人文库网上搜索. 1.资讯类 ...
- 光伏并网逆变器设计方案,附有相关的matlab电路仿真文件,以及DSP的程序代码
光伏并网逆变器设计方案,附有相关的matlab电路仿真文件,以及DSP的程序代码,方案.仿真文件.代码三者结合使用效果好,事半功倍 ID:6910671781885764
- 《数字图像处理原理与实践(MATLAB版)》一书之代码Part3
本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part3,辑录该书第135至第184页之代码,供有需要读者下载研究使用.代码执行结果请参见原书配图. --------- ...
- 自学Matlab必备的60个小程序代码
自学Matlab必备的60个小程序代码 转载自:http://ishare.iask.sina.com.cn/f/9253907.html
- 对角阵在matlab,MATLABSimulink实现对角阵解耦(模型和代码).pdf
MATLABSimulink实现对角阵解耦(模型和代码) MATLAB/Simulink 实现对角阵解耦 (模型和代码) 1.耦合与解耦: 在控制系统中,不同被控量之间往往存在相互影响,比如某封闭罐体 ...
- sbm预测matlab,**matlab计算非期望产出sbm模型代码**
matlab计算非期望产出sbm模型代码 data1=xlsread('E:\论文材料\毕业论文\02.xlsx',1) data2=xlsread('E:\论文材料\毕业论文\02.xlsx',2) ...
- 频域平滑滤波 matlab,用MATLAB实现频域平滑滤波以及图像去噪代码
用MATLAB实现频域平滑滤波以及图像去噪代码 提问时间:2018-01-18 19:06:50 是数字图象处理的实验,麻烦高人给个写好的代码,希望能在重要语句后面附上一定的说明,只要能在MATLAB ...
最新文章
- ExecutorService shutdown()和shutdownNow()方法区别
- c语言 增加 删除 修改的功能 不用链表,不用链表,单是结构体写入文件后,是否可以进行修改删除...
- python介绍和用途-Python --- Python的简介
- hdu5389(DP)
- Python基础概念_10_异常处理
- 空间自相关的知识总结
- SpringBoot集成Shiro进行权限控制和管理
- 在线生成艺术字_生成艺术:如何修改绘画
- C++ 中结构体的继承关系
- C加密 java_c语言的des加密,怎么用java解密
- WIN32汇编 状态栏的使用
- Win10要是个人,也算是鬼门关走过一遭了 1
- 大数据分析难不难好学吗?
- Windows定期删除过期文件
- Spring Boot项目出现问题: Whitelabel Error Page
- react中input输入框显示字数
- Python日记——柿子要捡软的捏,记第一只小爬虫
- 【flex chat】 p2p视频语音聊天室 欢迎你的测试
- 计算机英语大专期末考试,电子科技大学《大学英语2(专科)》20春期末考试【标准答案】...
- 我的择偶标准(丫咧,看清楚了啊)
热门文章
- Oracle数据库的备份与恢复技术
- 消息队列面试 - 如何解决消息队列的延时以及过期失效问题?
- OSPF——优化技术(含配置)
- ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
- Docker实战部署JavaWeb项目-基于SpringBoot
- 添加谷歌翻译到你的网站
- C#LeetCode刷题之#744-寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)
- 面向对象设计原则之5-接口隔离原则
- golang import中的.和_的使用,import的几种方式点,下划线,别名
- razor页面跳转_如何在Blazor中使用Razor页面创建单页应用程序