#include "mex.h"
#define A_IN 0
#define B_IN 1
#define C_OUT 0
#define D_OUT 1
/*编写C计算子程序,并置于mexFunction函数之前*/
/*计算子程序*/
extern void add_mlt(const int MA,const int NA,const double *A,const int MB,const int NB,const double *B,double *C,double *D)
{
int i,j,k;
/*实现C=A+B功能*/
for(i=0;i<MA;i++)
for(j=0;j<NA;j++)
{
C[i+j*MA]=A[i+j*MA]+B[i+j*MB];
}
/*实现D=A*B功能*/
for(i=0;i<MA;i++)
{
for(j=0;j<NB;j++)
{
D[i+j*MA]=0.0;
for(k=0;k<NA;k++)
{
D[i+j*MA]=D[i+j*MA]+(A[i+k*MA]*B[k+j*MB]);
}
}
}
}
/*接口程序代码*/
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
/*接口程序代码编写处*/
/*定义输入和输出参量的指针*/
double *A,*B,*C,*D;
/*定义各个指针的行数和列数*/
int MA,NA,MB,NB,MC,NC,MD,ND;//MA表示指针A的行数,NA表示指针A的列数
/*检查参量的个数(包括输入和输出)*/
if(nrhs!=2)
mexErrMsgTxt("必须输入2个变量");
else if(nlhs>2)
mexErrMsgTxt("输入超出范围,只能输入2个变量");
/*获取输入参量维数*/
MA=mxGetM(prhs[A_IN]);
NA=mxGetN(prhs[A_IN]);
MB=mxGetM(prhs[B_IN]);
NB=mxGetN(prhs[B_IN]);
/*检查输入参量的维数条件*/
if(MA!=MB||NA!=NB)
mexErrMsgTxt("为求A+B,A,B行数、列数必须相等");
if(NA!=MB)
mexErrMsgTxt("为求A*B,A的列数必须等于B的行数");
/*设定输出参量的维数*/
MC=MA;//输出C的行数
NC=NA;//输出C的列数
MD=MA;//输出D的行数
ND=NB;//D的列数
/*生成输出参量的mxArray结构体*/
plhs[C_OUT]=mxCreateDoubleMatrix(MC,NC,mxREAL);
plhs[D_OUT]=mxCreateDoubleMatrix(MD,ND,mxREAL);
/*获取输出参量的指针*/
A=mxGetPr(prhs[A_IN]);
B=mxGetPr(prhs[B_IN]);
/*获取输出参量的指针*/
C=mxGetPr(plhs[C_OUT]);
D=mxGetPr(plhs[D_OUT]);
/*调用C子程序*/
add_mlt(MA,NA,A,MB,NB,B,C,D);
}
add_mlt.rar_mex_mex混合编程
版权申诉
10 浏览量
2022-07-15
03:26:15
上传
评论
收藏 2KB RAR 举报
寒泊
- 粉丝: 74
- 资源: 1万+
最新资源
- Three.js介绍.zip
- Android14 CTS Verifier测试手册.pdf
- NC65 UAP65 流程开发 – 业务流 – 推单 详细笔记
- 两种计算CDF累加分布函数的Matlab程序,可以选择使用 .rar
- Windows操作系统介绍.zip
- 汉森的广义t分布的matlab程序(金融)cdf.zip
- Three.js介绍.zip0002
- 人工智能BBSO算法,MATLAB实现,很基本的人工智能算法,里面有很多源程序
- 高端大气科技互联网项目融资商业计划书产品公司品牌介绍PPT模板.pptx
- Sora AI文字生成视频实操教程、由给定的图片生成视频的教程说明书,祝你一臂之力 轻松上手Sora
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈