如何转为矢量形式

我之前发布过问题如何创建具有二维的单个向量?,并通过一些有用的答案,我能够更改我的代码。

在上一个问题中,我被要求不要分隔“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)

这些改变有效并提供了我需要的结果。


问题: 我的问题是,我被告知主循环不是矢量形式。我必须进行哪些更改才能使其成为矢量形式?


繁星淼淼
浏览 87回答 1
1回答

一只萌萌小番薯

定义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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python