[英]How do I fix the index error in my Octave code?
我的代碼索引有問題。 我正在嘗試在 Octave 上為冪方法(向量迭代)創建代碼,並且錯誤:'x(4): out of bound 3' 在第 6 行不斷彈出。
A=[6,-2,2,4;0,-4,2,2;0,0,2,-5;0,0,0,-3]
b=[12;10;-9;-3]
n=4
for i=rows(A):-1:1
for j=i+1:rows(A)
x(i)=[b(i)-A(i,j)*x(j)]/A(i,i); #error: 'x(4): out of bound 3'
endfor
endfor
x
在以下行中,請注意x
出現了兩次; 第一個試圖分配給它,但第二個只是試圖訪問它的值:
x(i) = [ b(i) - A(i,j) * x(j) ] / A(i,i);
⬑ assignment ⬑ access
分配給(尚)不存在的索引絕對沒問題; octave 將簡單地用“零”填充中間值。 例如
>> clear x
>> x(3) = 1 % output: x = [0, 0, 1]
但是,嘗試訪問尚不存在的索引是錯誤的,因為那里沒有可訪問的內容。 這會導致“越界”錯誤(並且,在其錯誤消息中,octave 足以告訴您可以在該特定數組中訪問的最后一個合法索引是什么)。
因此,這是一個錯誤:
>> clear x
>> x(3) = 1 % output: x = [0, 0, 1]
>> 1 + x(4) % output: error: x(4): out of bound 3
現在回到您的特定代碼,您正在嘗試訪問尚不存在的東西。 它尚不存在的原因是您已經設置了 for 循環,以便j
在特定步驟中獲得比i
更高的值,因此您正在嘗試訪問尚不存在的x(j)
,以便將其分配給x(i)
,其中 i < j。 因此,這會導致越界錯誤(當您只有i
可用時,您正在嘗試訪問索引j
)。
在您的特定情況下, octave 會通知您這發生在j
為4
且i
為3
時。
PS:我會在這里回應@HansHirse 的暗示警告,你應該始終注意你的變量,並在你的腳本中適當地清除它們,特別是如果你打算多次運行它。 切勿使用事先未定義(或清除)的變量。 否則,當您再次運行腳本時,此處的x
可能不會未定義,例如第二次。 這會導致各種問題,例如,您的代碼可以工作,但是由於錯誤的原因,然后當您在第二天運行它時再次無法工作並且x
現在未定義。 在這個特定的示例中,如果您的工作區中有一個x
並且其中包含正確數量的元素,那么您的代碼將“工作”但會產生錯誤的結果,並且您不會更好地了解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.