在此错误消息之前是否有任何人:
未定义的函数或方法'函数名'用于输入“double”类型的参数。
编译mex文件时,我始终会收到此错误消息。我已经检查了很好的路径,它似乎是正确的。
这是我的代码,mex文件是amortiss.c
#include "mex.h"
/* The computational functions */
void arrayquotient(double input1, double input2, double output1)
{
output1=input1/input2;
}
/* The gateway function */
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
/* variable declarations here */
double input1; /* input scalar 1 */
double input2; /* input scalar 2*/
double output1; /* output scalar 1 */
/* code here */
/* get the value of the scalar input1 */
input1 = mxGetScalar(prhs[0]);
/* get the value of the scalar input2 */
input2 = mxGetScalar(prhs[1]);
/* get the value of the scalar input3 */
input3 = mxGetScalar(prhs[2]);
/* create the output scalar1 */
plhs[0] = mxCreateDoubleScalar(input1/input2);
/* get the value of the scalar output1 */
output1 = mxGetScalar(plhs[0]);
/* call the computational routines */
arrayquotient(input1,input2,output1);
}
我添加了路径(命令添加路径)以确保mex文件amortiss.c
存在。然后我创建了一个名为arrayquotient.m
的.m文件,其中我刚写了我的函数声明:
function c = arrayquotient(a,b)
但是,在编译时,会出现另一条错误消息:
Error in ==> arrayquotient at 1
function c=arrayquotient(a,b)
??? Output argument "c" (and maybe others) not assigned during call to
"C:\Users\hp\Documents\MATLAB\codes_Rihab\arrayquotient.m>arrayquotient".
答案 0 :(得分:1)
函数amortiss.c
是一个c文件,不能由Matlab按原样执行
您创建的文件arrayquotient.m
是一个空函数,不会为其输出c
赋值。
您需要做的是 mex c文件amortiss.c
以创建一个mex文件amortiss.mexw32
(扩展名根据您的体系结构而有所不同。使用{{1找出你应该寻找的扩展名。)
在matlab中,设置你的mex编译器:
mexext
您将被指示从编译器中选择安装您的机器并由Matlab识别。
设置mex编译器后,您可以继续使用c-file
>> mex -setup
然后你会有一个mex文件>> mex -O -largeArrayDims amortiss.c
('XXX'取决于你的架构)。
您可以像任何其他功能一样使用该功能
amortiss.mexXXX