Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我无法从以下C函数生成MEX文件:
我做了很多研究,但似乎仍然无法理解。我的任务只是生成一个MEX文件,当在matlab中输入x时可以生成y = 3x ^ 2。
我将文件另存为quadratic.c。当我打字
在matlab命令中,我得到:
二次方
quadratic.c(15):错误C2143:语法错误:缺少';'在“类型”之前
quadratic.c(15):错误C2143:语法错误:缺少';'在“,”之前
quadratic.c(15):错误C2143:语法错误:缺少';'在“,”之前
quadratic.c(16):错误C2143:语法错误:缺少';'在“类型”之前
quadratic.c(18):错误C2143:语法错误:';'之前缺少')'
quadratic.c(18):错误C2059:语法错误:')'
quadratic.c(19):错误C2146:语法错误:标识符“ or”之前缺少“)”
quadratic.c(19):错误C2065:'or':未声明的标识符
quadratic.c(19):错误C2146:语法错误:缺少“;”在标识符“ nrhs”之前
quadratic.c(19):错误C2059:语法错误:')'
quadratic.c(19):错误C2143:语法错误:缺少“;”在“ {”之前
quadratic.c(19):警告C4552:'>':运算符无效;具有副作用的预期算子
quadratic.c(21):错误C2181:非法,否则不匹配
quadratic.c(25):错误C2065:“ c”:未声明的标识符
quadratic.c(25):警告C4244:'=':从'double'转换为'int',可能丢失数据
quadratic.c(27):错误C2143:语法错误:缺少';'在“ =”之前
quadratic.c(29):错误C2065:“ X”:未声明的标识符
quadratic.c(29):错误C2143:语法错误:';'之前缺少')'
quadratic.c(29):错误C2059:语法错误:')'
quadratic.c(30):错误C2065:'Y':未声明的标识符
quadratic.c(30):错误C2143:语法错误:';'之前缺少')'
quadratic.c(30):错误C2059:语法错误:')'
quadratic.c(33):错误C2065:“ Y”:未声明的标识符
C:\ PROGRA〜1 \ MATLAB \ R2013A \ BIN \ MEX.PL:错误:'quadratic.c'的编译失败。
我不知道该怎么办。我确定我做错了什么,但我无法弄清楚。
但在
您应该更改
因此,如果在访问第18行的值之前,先用
因此,您应该在第18行之前编写以下代码:
另外,在访问
重要的是
此外,在第19行:
我不确定C中的
在第25行:
但是C与Matlab不同,您应该在使用变量
我对
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我无法从以下C函数生成MEX文件:
#include <math.h>
#include <mex.h>
void mexFunction(int nlhs, mxArray *plhs[], /* Output variables */
int nrhs, const mxArray *prhs[]) /* Input variables */
{
#define y plhs[0]
#define x prhs[0]
double y, x, p;
int Y, X;
mexPrintf ("x = %d",x);
if(nrhs < 1 or nrhs > 2) /* Check the number of arguments */
mexErrMsgTxt("Wrong number of input arguments.");
else if(nlhs > 1)
mexErrMsgTxt("Too many output arguments.");
if(nrhs == 1) /* If p is unspecified, set it to a default value */
c = 3.0;
y=c*x*x;
X=mxIsDouble(x);
Y=mxIsDouble(y);
mexPrintf ("the value for y is %d",Y);
}
我做了很多研究,但似乎仍然无法理解。我的任务只是生成一个MEX文件,当在matlab中输入x时可以生成y = 3x ^ 2。
我将文件另存为quadratic.c。当我打字
`mex quadratic.c`
在matlab命令中,我得到:
二次方
quadratic.c(15):错误C2143:语法错误:缺少';'在“类型”之前
quadratic.c(15):错误C2143:语法错误:缺少';'在“,”之前
quadratic.c(15):错误C2143:语法错误:缺少';'在“,”之前
quadratic.c(16):错误C2143:语法错误:缺少';'在“类型”之前
quadratic.c(18):错误C2143:语法错误:';'之前缺少')'
quadratic.c(18):错误C2059:语法错误:')'
quadratic.c(19):错误C2146:语法错误:标识符“ or”之前缺少“)”
quadratic.c(19):错误C2065:'or':未声明的标识符
quadratic.c(19):错误C2146:语法错误:缺少“;”在标识符“ nrhs”之前
quadratic.c(19):错误C2059:语法错误:')'
quadratic.c(19):错误C2143:语法错误:缺少“;”在“ {”之前
quadratic.c(19):警告C4552:'>':运算符无效;具有副作用的预期算子
quadratic.c(21):错误C2181:非法,否则不匹配
quadratic.c(25):错误C2065:“ c”:未声明的标识符
quadratic.c(25):警告C4244:'=':从'double'转换为'int',可能丢失数据
quadratic.c(27):错误C2143:语法错误:缺少';'在“ =”之前
quadratic.c(29):错误C2065:“ X”:未声明的标识符
quadratic.c(29):错误C2143:语法错误:';'之前缺少')'
quadratic.c(29):错误C2059:语法错误:')'
quadratic.c(30):错误C2065:'Y':未声明的标识符
quadratic.c(30):错误C2143:语法错误:';'之前缺少')'
quadratic.c(30):错误C2059:语法错误:')'
quadratic.c(33):错误C2065:“ Y”:未声明的标识符
C:\ PROGRA〜1 \ MATLAB \ R2013A \ BIN \ MEX.PL:错误:'quadratic.c'的编译失败。
我不知道该怎么办。我确定我做错了什么,但我无法弄清楚。
最佳答案
在11,12
行中,您已将x,y
定义为函数的输出和输入
11: #define y plhs[0]
12: #define x prhs[0]
但在
15,16
行中,您已将x,y
定义为double
类型的变量15: double y, x, p;
16: int Y, X;
您应该更改
11,12
行或15,16
行中变量的名称以使其与众不同,因为在编写11: #define y plhs[0]
时,程序中的每个y
实际上都由plhs[0]
替换为编译器,这是Matlab中输出数据的指针。因此,如果在访问第18行的值之前,先用
double x
代替double xVal
,则应首先从prhs[0]
获取其值18: mexPrintf ("x = %d",x);
因此,您应该在第18行之前编写以下代码:
xVal = mxGetPr(x)[0]; %assuming the input is real valued, and it is only a number.
另外,在访问
y
的值之前,应首先获取其值;double yVal;
yVal = mxGetPr(y)[0];
重要的是
prhs[0]
和plhs[0]
是指向实际数据(值,大小,类型等)的指针,它们不是可以直接使用的值。此外,在第19行:
19: if(nrhs < 1 or nrhs > 2)
我不确定C中的
or
运算符是否为or
,您可以编写19: if(nrhs < 1 || nrhs > 2) #replaced "or" with two lines
在第25行:
25: c = 3.0;
但是C与Matlab不同,您应该在使用变量
c
之前定义它。我对
X
和Y
的功能有些困惑,因为它们显然是x,y
变量类型的指示符,而不是要打印的值。如果您如上所述编写double yVal = mxGetPr(y)[0];
,则33
行可以更改为:30: Y=mxIsDouble(y);
33: mexPrintf ("the value for y is %d",yVal);
10-04 21:54