倍频程索引超出范围错误。不知道为什么

时间:2018-10-04 19:05:13

标签: vector octave

我是Octave的新手,对这个错误感到困惑。 我的函数f适用于(7,1)的矢量,但适用于其他任何矢量 (7,1)个向量,我尝试过获得超出范围错误的索引

据我所知,在有效输入和无效输入之间建立索引 应该相同,只有那些索引中的值会改变。 那么为什么会发生这种情况,我在做什么错呢?

这是我的代码:

function asd
  f([1,1,1,1,1,1,1]) #works
  f([2,1,1,1,1,1,1]) #out of bound, 
                     #same for no matter which value I replace with a 2

  x = ones(7,1)
  f(x)               #works
  x(1) = 2
  f(x)               #out of bound
endfunction

function y = f(x) 
  y = ones(7,1);
  y(1) = x(1) − x(2) − x(6);
  y(2) = x(2) − x(3) − x(4);
  y(3) = x(3) + x(4) − x(5);
  y(4) = x(5) + x(6) − x(7);
  y(5) = 200((x(3))^2) − 75((x(4))^2);
  y(6) = 100((x(2))^2) + 75((x(4))^2) + 100((x(5))^2) − 75((x(6))^2);
  y(7) = 100((x(1))^2) + 75((x(6))^2) + 50((x(7))^2) − 10.285;
endfunction

这是错误:

错误:索引(4):越界1

错误:从调用 asd> f在第20行第8列 在第3行第3列的asd

1 个答案:

答案 0 :(得分:2)

您正在尝试为数字100编制索引,该数字是单个元素,因此仅具有索引1

执行100(1)等同于说a = 100; a(1)

因此,100(2)会导致索引超出范围错误。

您想做什么?大概您是在尝试乘法而不是索引?在这种情况下,您不能只拥有100(something),而需要100 * (something)