Matlab代码迁移至C++(下)

本文介绍如何将Matlab代码转换为C++代码,并在Visual Studio环境中进行编译和运行。通过具体步骤展示了如何设置项目、添加转换后的文件、修改主函数以及运行程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我的上一篇博文——Matlab代码迁移至C++(上)中,我们已经将编写的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 运行结果

【总结】
我的这两篇博客仅仅起抛砖引玉的作用,其中第一篇是基础,也是比较简单的,严格按照步骤来,在检查问题时如果有错误,就按照错误提示一步一步改,直到转换成功即可;
而第二篇则有难度,针对不同的代码,修改方式不同,需要大家自己研究。最后,祝大家使用愉快!

转自:http://blog.youkuaiyun.com/xiaoxuzaizi/article/details/50501739

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值