2013-03-08 36 views
2

我试图总结索引向量的产物,像这样的索引矩阵:八度的错误:标指标必须是正整数或逻辑值

k=[0:1:N-1] 
n=[0:1:N-1] 
x_n = sin(pi*n) 
N = size(x_n,2) 
_seqgen(x_n(n)*exp(k*n/N), n, 0..N-1) 

,但我得到的错误:

error: subscript indices must be either positive integers or logicals 

我在这里错过了什么?

编辑:我只是意识到,我错过了_plus函数来总结生成的序列。它应该是这样的:

k=[0:1:N-1] 
n=[0:1:N-1] 
x_n = sin(pi*n) 
N = size(x_n,2) 
_plus(_seqgen(x_n(n)*exp(k*n/N), n, 0..N-1)) 

我仍然得到,虽然同样的错误......

+1

错误似乎很直截了当.. – ddmps 2013-03-08 22:52:06

+0

我忘了提及我刚开始使用matlab /八度。我在网上搜索了不同的方法来做到这一点,但我只是难住。 – Cesar 2013-03-08 22:57:14

回答

5

错误消息解释了什么是错的:你想索引与一些这不是一个积极的数组整数或逻辑。您的代码中唯一的数组索引是x_n(n)。当然n=[0:1:N-1]这一行表明索引n不是正数,因为0不是正数。教程:MATLAB/Octave总是从1开始索引。我确实建议你真正的一些教程,因为这是你需要知道的基本东西。

+0

在用户@ user2150186防御中,错误听起来好像索引表达式的类型(或类)本身存在根本性错误。该消息太普遍,因为问题是__单_不正确_value_用作下标。 “零不是一个有效的指标”将是国际海事组织好得多。 – user7610 2013-10-10 07:11:05

2

允许我提供一些对你的代码的批评 - 因为你承认你是这个新手。首先您将创建矢量

n = [0:1:N-1]; 

,顺便说一下,不需要方括号,可以写成

n = 0:N-1; 

然后生成一个矢量x_n其中,对于给定的值,将全部为零(整数值为nsin(pi*n) == 0)。

接下来,您做了一件奇怪的事情 - 您似乎正在生成一个符号序列,循环变量n,它看起来很像您之前定义的数组n。不知道该怎么做 - 似乎不是一个好主意。请注意,即使@jazzbassrob也被这个困惑了 - 事实上,你得到了“不能索引为零”的错误并不是因为你的向量值n,而是因为你在_seqgen命令中从0..N-1循环同样的事情,尽管它碰巧是相同的值)。

在这种_seqgen的表情,我看到exp(k*n/N)这工作,因为在这种情况下n正在通过0..N-1踩变量 - 如果Matlab的看着的n较早的定义,它会抛出,因为尺寸不匹配的另一个错误(因为*是矩阵乘法运算符,并且期望第一个元素的第二个维度=第二个元素的第一个维度)。

更标准的方式做你正在尝试做的是

mySum = sum(x_n.*exp(k.*n/N)); 

这确实在x_n条款的元素乘元素乘法和元素乘元素产品的expkn除以N

注 - 这实际上是否“更好”取决于您想要对结果做什么(以上评估它)。

+0

你是对的,我确实想念那个。总体上相当奇怪的一段代码... – jazzbassrob 2013-03-09 11:36:30

相关问题