Python 如何转换为向量形式

Python 如何转换为向量形式,python,python-3.x,vector,jupyter-notebook,runge-kutta,Python,Python 3.x,Vector,Jupyter Notebook,Runge Kutta,我之前发布了这个问题,有了一些有用的答案,我可以修改我的代码 在前一个问题中,我被要求不要将“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; 从上一个问题的“我的代码”到: # Runge-kutta Method x = np.zeros([2, N])

我之前发布了这个问题,有了一些有用的答案,我可以修改我的代码

在前一个问题中,我被要求不要将“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;
从上一个问题的“我的代码”到:

# 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
v
,然后像Lutz演示的那样对该数组进行操作