2013-03-08 55 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

相關問題