使用Matlab Coder将Matlab文件转换为C++文件并导入项目
创作时间:
作者:
@小白创作中心
使用Matlab Coder将Matlab文件转换为C++文件并导入项目
引用
CSDN
1.
https://blog.csdn.net/doudou2weiwei/article/details/131291656
本文将详细介绍如何使用Matlab Coder将Matlab文件转换为C++文件,并将其导入到项目中。以下是具体步骤:
- 打开Matlab Coder
- 选择相应的Matlab文件,然后点击next
- 定义输入变量或全局变量
选择"让我直接输入输入或全局类型"
弹出以下内容,可以进行相应的变量定义,以及可以添加全局变量。确定好变量信息后,选择next - 点击next
- 在Matlab中进行相应的编译设置,输入
mex -setup,选择mex -setup C++ - 在编译前可以进行相应的设置,使得编译后的文件更加简洁,去除冗余
- 选择more settings
- 如果不需要用到,可以取消勾选这两个选项,需要根据自己的代码确定
- 如果不需要输入输出的size发生变化,可以取消以下勾选
- 把所有函数放到同一个文件,可以简化程序,这个选项一般默认是一个函数一个文件
- 对于示例文件,可以选择不生成示例文件,减小源文件冗余
- 选择生成generate,等待生成相应的C++源文件,生成后的页面如下
- 选择next,并将相应的源文件打包
- 将转换好的源文件导入到项目中,注意要在属性附加目录中包含相应的目录,否则,无法读取头文件
- test文件为main文件,可调用r1进行旋转角度计算,具体代码如下
// test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//以上为文件说明
#include <iostream>
#include"r1.h"
using namespace std;
//下面要用到的cout包含在头文件iostream中,如果希望只要用cout来进行输出,可以补充上面的语句
int main()
{
cout << "请输入角度:";
//cout类似print
double theta;
//调用前必须先声明
cin >> theta;
//输入角度
double r[9] = { 0,0,0,0,0,0,0,0,0 };
r1(theta, r);
//调用旋转矩阵计算公式
cout << r[0] << " " << r[3] << " " << r[6] << "\n" << r[1] << " " << r[4] << " " << r[7] << "\n" << r[2] << " " << r[5] << " " << r[8] << endl;
cout << "检验顺序:\n";
double b[9] = { 0,1,2,3,4,5,6,7,8 };
cout << b[0] << " " << b[1] << " " << b[2] << "\n" << b[3] << " " << b[4] << " " << b[5] << "\n" << b[6] << " " << b[7] << " " << b[8] << endl;
//以上两个语句用于观察相应的数组顺序
}
其中,r1为利用Matlab文件转换获取的,Matlab源文件如下
function r1=r1(theta)
r1=[cos(theta) 0 -sin(theta) ;
sin(theta) 0 cos(theta);
0 -1 0 ;];
end
转换成C++后的源文件如下
#include "r1.h"
#include <cmath>
// Function Definitions
//
// Arguments : double theta
// double b_r1[9]
// Return Type : void
//
void r1(double theta, double b_r1[9])
{
double b_r1_tmp;
double r1_tmp;
// 当为坐标系编号奇数时的旋转矩阵,即对应theta1,3,5,7;对应q2,4,6,因为q1为移动变量
r1_tmp = std::sin(theta);
b_r1_tmp = std::cos(theta);
b_r1[0] = b_r1_tmp;
b_r1[3] = 0.0;
b_r1[6] = -r1_tmp;
b_r1[1] = r1_tmp;
b_r1[4] = 0.0;
b_r1[7] = b_r1_tmp;
b_r1[2] = 0.0;
b_r1[5] = -1.0;
b_r1[8] = 0.0;
}
//
// Arguments : void
// Return Type : void
//
void r1_initialize()
{
}
//
// Arguments : void
// Return Type : void
//
void r1_terminate()
调用时,要注意以下,我们Matlab和C++的数组顺序有些不同。
以下为C++计算结果和Matlab计算结果的对比,由于编号方法略微不同,所以在进行输出调用的时候,需要注意转换的r1.h中的顺序采用的是Matlab中的编号顺序。因此在输出时,为0,3,6;1,4,7;2,5,8;其中还要注意一点就是C++起始编号为0。
cout << r[0] << " " << r[3] << " " << r[6] << "\n" << r[1] << " " << r[4] << " " << r[7] << "\n" << r[2] << " " << r[5] << " " << r[8] << endl;
最后,结果一致,转化成功!
热门推荐
杜甫笔下的秋葵:唐朝蔬菜界的“百菜之主”
慕尼黑协定背后的希特勒野心揭秘
希特勒占领下的捷克文化:一场悲剧的“德意志化”
温柔走心的晚安祝福:让每个夜晚都充满温暖与关怀
温馨晚安心语送给你最爱的家人
朋友圈里的温暖:一句晚安,治愈你我
温柔月光下的晚安祝福语
《穿越火线》高清竞技大区(CFHD)与普通版的全面对比分析
一文读懂跨境电商物流中常见的四种物流模式
苏州虎丘庙会:春节最火打卡地
苏州虎丘新春庙会:龙腾虎跃喜乐开年
商鞅变法:秦朝统一背后的黑科技
商鞅变法:古代最强“法治”改革
药物配伍禁忌与联用药品指导培训
福鼎肉片:从渔家小吃到全国美食
冬日霞浦摄影指南:宁德最美景点推荐
《某某某》教你如何在恋爱中建立信任
冬季护肤全攻略:6大保湿成分+7大误区,教你远离干燥
冬季护肤这样做:从保湿原理到产品推荐
不只葡萄柚和柚子!這些中藥也不能和5種西藥一起吃
陈冲新书《猫鱼》:从影后到作家,一部9.2分的个人史诗
对初恋抱有遗憾的星座有哪些
厦门至哈尔滨自驾全攻略:穿越六省,邂逅冰雪世界
半边天牌血康口服液的药理作用详解
永安市旅游打卡指南:吃住行玩全攻略
永安抗战旧址群:一座城市的红色记忆
永安旅游打卡圣地:桃源洞、鳞隐石林、贡川古镇
广西米粉大比拼:螺蛳粉 vs 桂林米粉 vs 老友粉
柳州螺蛳粉PK桂林米粉,谁才是广西美食之王?
提升恋爱沟通的小窍门:建立深层次的情感链接