【发布时间】:2014-03-31 15:27:54
【问题描述】:
最初为 MATLAB 编写的软件库(包括 MATLAB 和 C 源文件)正在移植到 Octave。 C 代码使用 MATLAB MEX 文件接口。该库在 MATLAB 上可以正常工作,但在 Octave 上却不行。 C 源代码已关闭,我无法访问它,但有人为我编译了它。
以下八度代码
Y=ones(size(X)) + X;
因错误而失败
下标索引必须是正整数或逻辑数。
X 是 MEX 模块返回的矩阵。
我已经验证ones 和size 指的是内置函数,而不是被某些局部变量覆盖。
我该如何解决这个问题?
编辑 分解为步骤:
S=size(X);
O=ones(S);
X+O;
在最后一行给出上述错误,加法。 whos 命令输出如下:
octave:13> whos O X
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
O 512x512 2097152 double
X 512x512 2097152 double
Total is 524288 elements using 4194304 bytes
【问题讨论】:
-
首先找出导致错误的部分。
s = size(X)有效吗?如果是这样,s是什么?ones(s)有效吗? -
你能告诉我们更多关于
X的细节吗?whos X返回什么? -
@carandraug 我添加了一些细节。
-
@WarrenWeckesser 我添加了一些细节。
size(X)返回[512 512]。