如何变成矢量形式
How to Change into Vector Form
我之前发布了这个问题 ,通过一些有用的答案,我能够更改我的代码。
在上一个问题中,我被要求不要将 'x' 和 'v' 的值分开,而是使用具有两个维度的单个向量 'x'(即 'x' 和 'v' 可以由 x(1) 和 x(2) 处理。
考虑到这一点,我能够更改:
# Runge-kutta Method
x = np.empty(N);
v = np.empty(N);
x[0] = x0;
v[0] = v0;
从上一题的MY CODE变成:
# Runge-kutta Method
x = np.zeros([2, N]);
x[0,0] = x0
x[1,0] = v0
并将主循环切换为以下内容:
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)
更改有效并提供了我需要的结果。
问题:
我的问题是有人告诉我主循环不是矢量形式。我必须做哪些更改才能使其成为矢量形式?
定义
def f(t,x): return np.array([f1(t,*x), f2(t,*x)])
并因此删除 RK4 循环中的每一行。例如,最后两个是
K4 = f(te[i] + h, x[:, i] + h * K3)
x[:, i + 1] = x[:, i] + h / 6 * (K1 + 2 * K2 + 2 * K3 + K4)
我之前发布了这个问题
在上一个问题中,我被要求不要将 'x' 和 'v' 的值分开,而是使用具有两个维度的单个向量 'x'(即 'x' 和 'v' 可以由 x(1) 和 x(2) 处理。
考虑到这一点,我能够更改:
# Runge-kutta Method
x = np.empty(N);
v = np.empty(N);
x[0] = x0;
v[0] = v0;
从上一题的MY CODE变成:
# Runge-kutta Method
x = np.zeros([2, N]);
x[0,0] = x0
x[1,0] = v0
并将主循环切换为以下内容:
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)
更改有效并提供了我需要的结果。
问题: 我的问题是有人告诉我主循环不是矢量形式。我必须做哪些更改才能使其成为矢量形式?
定义
def f(t,x): return np.array([f1(t,*x), f2(t,*x)])
并因此删除 RK4 循环中的每一行。例如,最后两个是
K4 = f(te[i] + h, x[:, i] + h * K3)
x[:, i + 1] = x[:, i] + h / 6 * (K1 + 2 * K2 + 2 * K3 + K4)