0

我使用 MATLAB 编码器将 M 文件转换为 cpp 文件。

构建时出现问题。

应为逻辑、char、int、fi、single 或 double。找到一个 mxArray。MxArrays 从对 MATLAB 解释器的调用中返回,并且在表达式中不受支持。它们只能用于赋值的右侧,并作为外部函数的参数。

MATLAB代码:

nms = sum(transpose(X).^2);
nms0=-1 * nms;
nms2=transpose(nms0);
nms3=transpose(X);
nms4=nms2*ones(1,n);
nms5=ones(n,1)*nms;
nms6=2*X*nms3;
nms7=zeros(150,150);

nms7=nms4-nms5; //This line is wrong

nms8=nms7 + nms6;
K = exp(nms8);

我想知道为什么代码在 MATLAB 中运行正确,但是在构建时出现错误

4

1 回答 1

0

当您尝试在表达式中使用外部函数的结果时会发生此错误。在您提供的代码中,“n”或“X”是外部函数的结果吗?即使它们不是外部函数的直接结果,它们也可能是根据其他外部函数的数据计算得出的。

解决此问题的一种方法是帮助 MATLAB 编码器将这些外部数据转换为已知类型。您可以通过使用已知数据预先定义它们来做到这一点。例如,

coder.extrinsic('some_extrinsic_fcn');
y = zeros(10,1);
y = some_extrinsic_fcn();
y = y * 2;

在这种情况下 some_extrinsic_fcn 应该返回一个包含 10 个元素的双精度向量。生成的 mxArray 将自动转换并存储在 y 中。没有“ y = zeros(10,1);”行,y 将是 mxArray 类型,“ y = y * 2;”行将导致错误。

于 2013-04-29T16:24:21.000 回答