栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二、Matlab调用C/C++之传地址

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二、Matlab调用C/C++之传地址

我们在Matlab中使用C/C++时,需要传入和传出参数,以下我们将以实例完成该功能。

1、外部接口设计

a=test([1,1,1,2,4],4)

参数:b=[1,1,1,2,4]为输入的数组;4为计算参数p;a为返回数组,为p*b;

2、C程序设计

#include "mex.h"

void GetValueFunction(double *x, int dim,int functionNum, double y[]){//
    //int length = 0;
    //length = sizeof(x);///sizeof(x[0]);
    //double *y=new double[sizeof(x)*dim];
    mexPrintf("functionNum:%dn", functionNum);
    if(functionNum == 1){
        for(int i=0;i             *(y+i) = 1.0*x[i];
    } else {
        for(int i=0;i             *(y+i) = functionNum*x[i];
    }
    //for(int i=0;i     //        *(y+i) = 22;//2.0*x[i];
    mexPrintf("*y=%dn",dim);
    for(int i=0;i     mexPrintf("n*x=");
    for(int i=0;i     //return -1;
}

//设置接口
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
    double* a;
    double b, c;
    double *x,*y;
    int mrows = mxGetM(prhs[0]);//获得输入数据矩阵的行数
    int ncols = mxGetN(prhs[0]);//获得输入数据矩阵的列数
    int dim = ncols;
    mexPrintf("output nlhs = %d mrows=%d ncols=%dn", nlhs,mrows,ncols);

    plhs[0] = mxCreateDoubleMatrix(mrows, ncols, mxREAL);//分配输出矩阵的内存
    int functionNum = *(mxGetPr(prhs[1]));//第三个输入参数,第几个函数
    x = mxGetPr(prhs[0]);
    y = mxGetPr(plhs[0]);//获取输出指针的第一个参数a[]的地址
    mexPrintf("input nrhs = %dn", nrhs);//nrhs输入参数的数量
    
    mexPrintf("functionNum  = %dn", functionNum);
    mexPrintf("dim = %dn", ncols);
   
    mexPrintf("y=");
    for(int i=0;i     mexPrintf("nx=");
    for(int i=0;i     mexPrintf("n");

    GetValueFunction(x,ncols,functionNum,y);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012698.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号