我之前發(fā)布過(guò)問(wèn)題如何創(chuàng)建具有二維的單個(gè)向量?,并通過(guò)一些有用的答案,我能夠更改我的代碼。在上一個(gè)問(wèn)題中,我被要求不要分隔“x”和“v”的值,而是使用具有二維的單個(gè)向量“x”(即“x”和“v”可以由 x(1) 處理和 x(2) )??紤]到這一點(diǎn),我能夠改變:# Runge-kutta Methodx = np.empty(N);v = np.empty(N);x[0] = x0;v[0] = v0;從我的上一個(gè)問(wèn)題的代碼變?yōu)椋? Runge-kutta Methodx = np.zeros([2, N]);x[0,0] = x0x[1,0] = v0并將主循環(huán)切換為以下內(nèi)容:for i in range(N - 1): #MAIN LOOP K1x = f1(te[i], x[0, i], x[1, i]) K1v = f2(te[i], x[0, i], x[1, i]) K2x = f1(te[i] + h / 2, x[0, i] + h * K1x / 2, x[1, i] + h * K1v / 2) K2v = f2(te[i] + h / 2, x[0, i] + h * K1x / 2, x[1, i] + h * K1v / 2) K3x = f1(te[i] + h / 2, x[0, i] + h * K2x / 2, x[1, i] + h * K2v / 2) K3v = f2(te[i] + h / 2, x[0, i] + h * K2x / 2, x[1, i] + h * K2v / 2) K4x = f1(te[i] + h, x[0, i] + h * K3x, x[1, i] + h * K3v) K4v = f2(te[i] + h, x[0, i] + h * K3x, x[1, i] + h * K3v) x[0, i + 1] = x[0, i] + h / 6 * (K1x + 2 * K2x + 2 * K3x + K4x) x[1, i + 1] = x[1, i] + h / 6 * (K1v + 2 * K2v + 2 * K3v + K4v)這些改變有效并提供了我需要的結(jié)果。問(wèn)題: 我的問(wèn)題是,我被告知主循環(huán)不是矢量形式。我必須進(jìn)行哪些更改才能使其成為矢量形式?
1 回答

一只萌萌小番薯
TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
定義
def f(t,x): return np.array([f1(t,*x), f2(t,*x)])
從而刪除 RK4 循環(huán)中的每隔一行。例如最后兩個(gè)是
K4 = f(te[i] + h, x[:, i] + h * K3) x[:, i + 1] = x[:, i] + h / 6 * (K1 + 2 * K2 + 2 * K3 + K4)
添加回答
舉報(bào)
0/150
提交
取消