Matlab调C/C++简单模板例子

如果你是需要快速搭建一个matlab调c/c++环境,这篇文章可以参考

有了c代码,想在matlab里面调用,可以参考我这个模板

matlab调用代码:

复制代码
clear all
close all
clc

input1 =1;
input2 =2;

[output1,output2] = mexfunction(input1,input2);

output1
output2

这里面强调两个概念

1、Matlab里面所有变量都是矩阵,包括单变量也是1*1的矩阵

2、Maltab矩阵按列优先访问,这个和fortran保持一致

Cpp代码:

复制代码
#include "mex.h"

void c_func(double input1,double input2,double *output1,double *output2) 
{
    
}


void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
{	
	double *pdata; 
	// mcnoidal(waveheight,waveperiod,0.02,waterdeepth ,0, datanum,1, waveheight,flapdeepth);
     
	pdata=mxGetPr(prhs[0]); 
	double input1 = *pdata;
 	
    int M = mxGetM(prhs[0]);
    int N = mxGetN(prhs[0]);
    
    printf("%d * %d\n",M,N);
    
 	pdata=mxGetPr(prhs[1]); 
	double input2 = *pdata;
	
	int m = 3;
	int n = 2;
	plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL); 
	double *output1;	
	output1 = mxGetPr( plhs[0]);
 	
    //列优先排列
 	output1[0*m+0] = 1;
    output1[1*m+0] = 2;
 	output1[0*m+1] = 3;
    output1[1*m+1] = 4;
 	output1[0*m+2] = 5;
    output1[1*m+2] = 6; 	
 	
 	plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL); 
    double *output2;
    output2 = mxGetPr( plhs[1]);
    output2[0] = -1;
    
    
    //c_func(input1,input2,output1,output2) ;
    
 	

 	
 	
}

plhs 全称 parameters left matlab中的左侧输出

prhs全称 parameters left matlab中的右侧输入

plhs0 plhs1是输出,需要多少输出变量,那么就在c中用mxCreateDoubleMatrix申请多少

所有的数字,数组,二位数字,到c这边都是一维数组,且按列优先访问。

输出如下

注三行两列的二维数组访问方式:

复制代码
int m=3;
int n=2;
//内存列优先排列,但赋值按逐行赋值
output1[0*m+0] = 1;
output1[1*m+0] = 2;
output1[0*m+1] = 3;
output1[1*m+1] = 4;
output1[0*m+2] = 5;
output1[1*m+2] = 6;

//列优先排列,但按列赋值
output1[0*m+0] = 1;
output1[0*m+1] = 3;
output1[0*m+2] = 5;
output1[1*m+0] = 2;
output1[1*m+1] = 4;
output1[1*m+2] = 6;

//另:行优先排列,按行赋值
output1[0*n+0] = 1;
output1[0*n+1] = 2;
output1[1*n+0] = 3;
output1[1*n+1] = 4;
output1[2*n+0] = 5;
output1[2*n+1] = 6;

在matlab 使用mex 编译一下(预先需要mex setup)

mex mexFunction.cpp 即可编译,然后在malab直接调用。

相关推荐
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁1 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超1 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int1 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
CoderYanger1 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
伞伞悦读1 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
CCCCCCCCharlie1 天前
Linux进程控制四大核心操作
linux·开发语言
Brilliantwxx1 天前
【STM32】 SPI Flash 驱动开发实战:阻塞模式驱动 W25Q64(含工程代码)
开发语言·stm32·单片机·嵌入式硬件