我有一個叫做數值方法的類,我們學習如何編寫物理學中某些問題的程序。我們必須編寫4個可以求解ODE的程序(隱式/顯式式,速度式,隱式式中點規則),現在我們必須使用| y_N - y(T)|來計算誤差。我們已經有了一個我們需要填寫的模板。 這是我們必須完成的代碼。爲什麼我們在這個程序中使用枚舉?
def ex2_d():
T = 0.2
y0 = np.array([0.3, 0.0])
all_methods = [explicit_euler, implicit_euler, implicit_mid_point, velocity_verlet]
all_rhs = 3*[pendulum_rhs] + [pendulum_verlet_rhs]
resolutions = 2**np.arange(4, 11)
_, y_exact = ode45(pendulum_rhs, (0.0, T), y0, reltol=1e-12)
for method, rhs in zip(all_methods, all_rhs):
error = np.empty(resolutions.size)
for k, N in enumerate(resolutions):
# TODO: Berechen Sie die Lösung und den Fehler
error[k] = np.absolute(methode())
rate = convergence_rate(error, resolutions)
print(method)
print("rate: " + str(rate) + "\n")
我需要填寫的唯一東西是TODO部分。但我不明白,for循環,循環在枚舉(分辨率)K和N,爲什麼解析數組聲明爲反正呢?
非常感謝您的幫助!
因爲你設置了error'的'了'k'個索引。所以你需要索引。 –
'k'給你'決議'的索引,'N'給你它的價值。 –
'2 ** np.arange(4,11)'給出了numpy整數數組''[16,32,64,128,256,512,1024]'。所以解析數組就是這樣聲明的,因爲這是算法作者想要使用的一組解析值。這有幫助嗎? – nekomatic