3

我正在尝试对索引向量和索引矩阵的乘积求和,如下所示:

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))  

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

4

2 回答 2

10

错误消息解释了问题所在:您尝试使用不是正整数或逻辑的数字来索引数组。代码中唯一的数组索引是x_n(n). 果然,这条线n=[0:1:N-1]表明指数n不是正数,因为0不是正数。课程:MATLAB/Octave 总是从 1 开始索引。 我确实建议你学习一些真正的教程,因为这是你需要知道的基础知识。

于 2013-03-08T23:23:16.083 回答
2

请允许我对你的代码提出一些批评——因为你承认你是这方面的新手。首先你创建向量

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

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

n = 0:N-1;

然后,您生成一个向量x_n,对于给定的值,该向量将全为零(sin(pi*n)对于 的整数值 ==0 n)。

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

在那个 _seqgen 表达式中,我看到exp(k*n/N)了哪个有效,因为在这种情况下n是被单步执行的变量0..N-1- 如果 Matlab 正在查看 的早期定义n,它会由于维度不匹配而引发另一个错误(因为*是矩阵乘法运算符并且期望第一个元素的第二个维度 = 第二个元素的第一个维度)。

做你想做的事情的更标准的方法是

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

这对 x_n 中的项和 的逐exp元素乘积除以 进行逐元素乘法。knN

注意 - 这是否真的“更好”取决于你想对结果做什么(上面评估它)。

于 2013-03-09T04:18:51.307 回答