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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XiaoXuZaiZi/article/details/50501739
版权声明:

1、本着尊重原创,大家转载的时候请注明出处,此教程编写不易啊~~


下面开始介绍:MATLAB R2015b的Coder工具使用实例(二)


在我的上一篇博文《【MATLAB工程人员的福音】MATLAB R2015b的Coder工具使用实例(一)》中,我们已经将编写的MATLAB代码成功的转换为了C++代码,生成了如图1的一些文件与文件夹。现在就来讲解一些如何将它们应用到VS环境下。


图1  由MATLAB Coder生成的文件


以下是详细步骤。

第1步:

打开VS2008(在转C++代码时,你用的什么编译器,就打开什么编译器),新建一个控制台应用程序的空白项目,名称与目录自定,我的是“mytset”以及“C:\Users\WangXu\Desktop\mytest”,如图2。


图2 新建一个控制台应用程序的空白项目


第2步:

将图1中【用方框框起来的以及“examples文件夹下”的】.cpp与.h文件拷贝至“C:\Users\WangXu\Desktop\mytest\mytest”目录下,如图3。


图3 文件拷贝


第3步:

进入VS,将图3的文件添加到项目中,如图4


图4 向项目中添加文件


第4步:

双击打开“main.cpp”文件,这是MATLAB Coder为我们创建的一个演示文件,我们可以在这个文件下修改代码,从而来实现在MATLAB中实现的功能。


第5步:

我把“main.cpp”文件重命名为“main_wangxu.cpp”,并将其中的代码做了一番修改,把冗余的注释去掉,全部换为了中文注释,详细代码与详细注释如下:

// 包含的头文件(一个也不能少)
#include "rt_nonfinite.h"
#include "test.h"
#include "main.h"
#include "test_terminate.h"
#include "test_emxAPI.h"
#include "test_initialize.h"

// 输入输出流
#include <iostream>

// 标准名字空间
using namespace std;

// 主函数
int main(int, const char * const [])
{


	// 用户定义的输入参数mark_user、num_user、array_user
	double mark_user = 3;
	double num_user = 4;;
	int array_user[4]={1,6,9,8};

	// 声明一些最终要带入函数的参数
	double mark;
	double num;
	emxArray_real_T *array;
	emxArray_real_T *A;
	emxArray_real_T *B;

	// 初始化【最终】要计算的量 A B
	emxInitArray_real_T(&A, 2);
	emxInitArray_real_T(&B, 2);

	// 声明一个局部变量result
	emxArray_real_T *result;

	// 定义一个数组iv0,这个要视输入参数array_user的最大长度而定,如果最大长度为n,则iv0 = { 1, 2 ,...,n}
	// 在这里,array_user的最大长度为5,因此可以这样定义数组iv0:
	static int iv0[5];
	for(int j=0;j<4;j++)
	{
		iv0[j]=j+1;
	}

	

	// 计算局部变量result,其中,4指的是array_user的实际长度,5是array_user的最大长度,0这个数字不用管
	result = emxCreateND_real_T(4, *(int (*)[5])&iv0[0]);

	// 将array_user的各个分量赋给result的各个分量,其中,4指的是array_user的实际长度
	for (int idx1 = 0; idx1 < 4; idx1++) 
	{
		result->data[idx1] = (double)(array_user[idx1]);
	}

	// 计算需要带入函数的参数的值
	mark = mark_user;
	num = num_user;
	array = result;

	// 带入函数计算
	test(mark, num, array, A, B);

	// 至此,A B已经计算完毕,现在将它们在屏幕上输出
	// 首先得到A B的长度L1 L2
	int L1,L2;
	L1 = A->size[1];
	L2 = B->size[1];

	// 开始输出
	cout<<"A:"<<endl;
	for (int i=0;i<L1;i++)
	{
		cout<<A->data[i]<<endl;
	}
	cout<<"B:"<<endl;
	for (int i=0;i<L1;i++)
	{
		cout<<B->data[i]<<endl;
	}


	return 0;
}



第6步:

打开“test.cpp”文件,将变量“cs”的值全部改为array的长度4。


第7步:

运行,得到如图5结果,经验证,结果正确。

图5 运行结果


【总结】

我的这两篇博客仅仅起抛砖引玉的作用,其中第一篇是基础,也是比较简单的,严格按照步骤来,在检查问题时如果有错误,就按照错误提示一步一步改,直到转换成功即可;

而第二篇则有难度,针对不同的代码,修改方式不同,需要大家自己研究。最后,祝大家使用愉快!


猜你喜欢

转载自blog.csdn.net/XiaoXuZaiZi/article/details/50501739
今日推荐