我试图将索引向量和索引矩阵的乘积相加:
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))
我仍然得到同样的错误......
答案 0 :(得分:7)
错误消息解释了什么错误:您正在尝试使用不是正整数或逻辑的数字索引数组。代码中唯一的数组索引是x_n(n)
。确实,行n=[0:1:N-1]
表明索引n
不是正数,因为0
不是正数。课程: MATLAB / Octave始终从1开始索引。我建议你学习一些教程,因为这是你需要知道的基本内容。
答案 1 :(得分:2)
请允许我对您的代码提出一些批评 - 因为您承认您是新手。首先创建向量
n = [0:1:N-1];
顺便提一下,这不需要方括号,可以写成
n = 0:N-1;
然后生成一个向量x_n
,对于给定的值,它将全为零(sin(pi*n)
== 0表示n
的整数值。
接下来,你做了一些奇怪的事情 - 你似乎正在生成一个符号序列,循环变量n
,它看起来很像你之前定义的数组n
。不知道该怎么做 - 看起来不是一个好主意。请注意,即使@jazzbassrob对此感到困惑 - 事实上你有一个“无法索引为零”的错误并不是因为你的向量n
的值,而是因为你是从{{1在_seqgen命令中(不一样,尽管它恰好是相同的值)。
在_seqgen表达式中,我看到0..N-1
有效,因为在此上下文中exp(k*n/N)
是逐步通过n
的变量 - 如果Matlab正在查看{{1的早期定义由于尺寸不匹配,它会抛出另一个错误(因为0..N-1
是矩阵乘法运算符,并且期望第一个元素的第二个维度=第二个元素的第一个维度。)
执行您要执行的操作的更标准方法是
n
这是x_n中的术语与*
和mySum = sum(x_n.*exp(k.*n/N));
的逐个元素乘积exp
除以{{1}的逐个元素的乘法运算。 }。
注意 - 这实际上是否“更好”取决于你想对结果做什么(上面评估它)。