Matlab函数的调用错误求解释

发布网友 发布时间:2022-04-23 15:28

我来回答

2个回答

热心网友 时间:2023-10-08 12:01

  Matlab函数的调用错误求解释
  我转过来的 写的很清楚 你参考下吧,把你的pthis dc等参数对照一下就可以了

  如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:
  double add(double x, double y) {
  return x + y;
  }
  现在我想要在Matlab中使用它,比如输入:
  >> a = add(1.1, 2.2)
  3.3000
  要得出以上的结果,那应该怎样做呢?
  解决方法之一是要通过使用MEX文件,MEX文件使得调用C函数和调用Matlab的内置函数一样方便。MEX文件是由原C代码加上MEX文件专用的接口函数后编译而成的。
  可以这样理解,MEX文件实现了一种接口,它把在Matlab中调用函数时输入的自变量通过特定的接口调入了C函数,得出的结果再通过该接口调回Matlab。该特定接口的操作,包含在mexFunction这个函数中,由使用者具体设定。
  所以现在我们要写一个包含add和mexFunction的C文件,Matlab调用函数,把函数中的自变量(如上例中的1.1和2.2)传给mexFunction的一个参数,mexFunction把该值传给add,把得出的结果传回给mexFunction的另一个参数,Matlab通过该参数来给出在Matlab语句中调用函数时的输出值(如上例中的a)。
  比如该C文件已写好,名为add.c。那么在Matlab中,输入:
  >> mex add.c
  就能把add.c编译为MEX文件(编译器的设置使用指令mex -setup),在Windows中,MEX文件类型为mexw32,即现在我们得出add.mexw32文件。现在,我们就可以像调用M函数那样调用MEX文件,如上面说到的例子。所以,通过MEX文件,使用C函数就和使用M函数是一样的了。
  我们现在来说mexFunction怎样写。
  mexFunction的定义为:
  void mexFunction(
  int nlhs,
  mxArray *plhs[],
  int nrhs,
  const mxArray *prhs[]) {

  }
  可以看到,mexFunction是没返回值的,它不是通过返回值把结果传回Matlab的,而是通过对参数plhs的赋值。mexFunction的四个参数皆是说明Matlab调用MEX文件时的具体信息,如这样调用函数时:
  >> b = 1.1; c = 2.2;
  >> a = add(b, c)
  mexFunction四个参数的意思为:
  nlhs = 1,说明调用语句左手面(lhs-left hand side)有一个变量,即a。
  nrhs = 2,说明调用语句右手面(rhs-right hand side)有两个自变量,即b和c。
  plhs是一个数组,其内容为指针,该指针指向数据类型mxArray。因为现在左手面只有一个变量,即该数组只有一个指针,plhs[0]指向的结果会赋值给a。
  prhs和plhs类似,因为右手面有两个自变量,即该数组有两个指针,prhs[0]指向了b,prhs[1]指向了c。要注意prhs是const的指针数组,即不能改变其指向内容。
  因为Matlab最基本的单元为array,无论是什么类型也好,如有double array、 cell array、 struct array……所以a,b,c都是array......9.开机喜事到,向您问个好,办事处处顺,生活步步高,彩票期期中,好运天天交,打牌场场胜,口味顿顿2好,越活越年轻。

热心网友 时间:2023-10-08 12:02

你给出具体的例子看看吧,你的问题无法回答啊?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com