【问题标题】:"Subscript Indices" error in Octave, but no subscripts being used?Octave 中的“下标索引”错误,但没有使用下标?
【发布时间】:2014-02-08 04:58:33
【问题描述】:

我正在尝试使用 Octave 计算函数导数的数值,但我不断收到此错误:

错误:fp:下标索引必须是正整数或逻辑数

这个错误很奇怪,因为我没有在代码中的任何地方使用下标索引。这是引发错误的函数fp

function [ dy ] = fp(f, x, ep)  
    dy = (f(x .+ ep) .- f(x)) ./ ep;  
end

当我从 Octave 解释器运行该函数时,该函数有效,但是当我尝试使用文件 fp.m 调用该函数时,出现上述错误。这是我传递给它的函数:

function [ y ] = f(x)
    y = (x .+ 2) .* x .+ 1;
end

我尝试重命名fp 中的所有变量,因为我偶然发现了保留的变量名称。还有其他想法吗?

【问题讨论】:

  • 您的文件中是否有一个名为 fp 的变量?也许是一个文件指针?
  • @MadPhysicist 我没有。以上就是我的两个文件的全部内容,分别命名为fp.m和f.m。我还没有开始编写 main.m,因为我想先让这些工作。 :-\ 但是,我确实怀疑我是否将文件命名错误,并暂时将其名称更改为派生。
  • 您说从文件调用 fp 时出现错误。你能出示那个文件吗?
  • 我的意思是调用 fp.m 中的函数fp。当我在解释器中输入赋值语句时,它就会运行。当我调用该函数(保存在文件中)时,它会引发错误。很抱歉对于这个误会;我还没有从其他文件中调用它。
  • 哦。我懂了。有道理。

标签: matlab octave


【解决方案1】:

Octave 具有类似于 C 中的函数指针,不同之处在于它们被称为函数句柄。以下是您应该如何调用文件版本:

fp(@f, -5, 1.0e-15);

如果传入"f",它只是一个字符数组。在这种情况下,fp 中的表达式 f(...) 被解释为 char 数组的索引表达式,因为 fp 没有看到函数句柄。如果你传入@f,那是一个指向fp可以直接调用的函数的指针。

【讨论】:

  • 我应该在三天前问这个问题。非常感谢。谷歌一点帮助都没有。
  • 我可以看到。我建议搜索 MathWorks MATLAB 文档。它负责我 90% 的 MATLAB 专业知识。剩下的就是知道如何将 MATLAB 转换为 Octave...
  • 我没想到要查看 Matlab 文档。也谢谢你!
猜你喜欢
  • 2016-08-26
  • 2014-12-02
  • 1970-01-01
  • 2016-01-31
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多