我正在練習如何數值求解差分方程,但我經常遇到像下面這樣的問題。
有人能幫我解決這個問題嗎?
import numpy as np
N=10
#替代方案1
#x = np.zeros(N 1, int) #產生錯誤 IndexError: index 11 is out of bounds for axis 0 with size 11
#alternative 2[/span
x = (N 1)*[0] # 產生錯誤。IndexError: list assignment index out of range[/span>]。
x[0] = 1000
r = 1.02] = 1.02
for n in range(1, N 1)。
x[n 1] = r**(n 1)*x[0]
print(f "x[{n}] = {x[n 1] }")
uj5u.com熱心網友回復:
修復索引
你的索引的范圍與你在回圈中使用它們的方式不一致。你可以使用以下兩種可能的回圈中的任何一種,但不要混合使用:for n in range(1, N 1)。)
x[n] = r**n * x[0]
for n in range(0, N)。
x[n 1] = r**(n 1) * x[0]
優化:用乘法代替指數計算
。注意,計算一個指數**總是比計算一個乘法*的成本要高;你可以通過使用遞回公式稍微優化你的代碼:
for n in range(1, N 1)。)
x[n] = r * x[n-1]
for n in range(0, N)。
x[n 1] = r * x[n] 。
使用庫函式。itertools, numpy或pandas
你所要求的東西被稱為幾何級數。Python 提供了幾種計算幾何級數的方法,無需自己撰寫回圈。
例如:
import itertools # accumulate, repeat
import operator # mul
def geometric_progression(x0, r, N) 。
return list(itertools.accumulate(itertools.repeat(r,N), operator.mul, initial=x0)
print(geometric_progression(1000, 1.2, 10)
# [1000, 1200.0, 1440.0, 1728.0, 2073.6, 2488.31999999997, 2985.98399999995, 3583.1807999999, 4299.816959999999, 5159.780351999999, 6191.736422399998]/span>
uj5u.com熱心網友回復:
我認為你的問題是,你應該記住串列中任何元素的索引,從0開始,最后一個元素的索引是N-1,其中N是串列中元素的數量。
所以你應該在你的for回圈中做這樣的修改:
for n in range(0,N)。
另外,你使用的print應該是對list中的資料的反映。所以你應該把你的print函式的引數固定為:
print(f "x[{n 1}] = {x[n 1] }")
在做了這些修改之后,你將得到這樣的結果:
x[1] = 1020.0。
x[2] =1040.4
x[3] = 1061.208[/span
x[4] = 1082.43216[/span
x[5] = 1104.0808032[/span
x[6] =1126.1624192640002
x[7] = 1148.68566764928
x[8] = 1171.6593810022657[/span
x[9] = =1195.092568622311
x[10] = 1218.9944199947574。
請注意你的N 1元素不是N元素在你的list里,因為你的這行代碼
x = (N 1)*[0]
希望這有幫助。
uj5u.com熱心網友回復:
你的陣列的長度是11,這意味著最后一個元素被x[10]所訪問。但是在回圈中,當n為10時,被呼叫的值是x[11],這使得它超出了范圍。
我不確定你的問題的限制,但如果你想訪問x[11],將陣列的總大小改為x = (N 2)*[0]。
輸出
x[1] = 1040.4。
x[2] =1061.208
x[3] = 1082.43216[/span
x[4] = 1104.0808032[/span
x[5] =1126.1624192640002
x[6] =1148.68566764928
x[7] = 1171.6593810022657[/span
x[8] = =1195.092568622311
x[9] = 1218.9944199947574[/span
x[10] =1243.3743083946524
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/331084.html
標籤:
上一篇:出現型別錯誤。Nodejs.getName不是一個函式
下一篇:在一個區間內包裹一個值的最快方法
