我想使用我在网上找到的RK4的实现方法,但是我在网上找到的实现方面遇到了一些困难。 例如:
public class MyClass implements Parcelable {
public String name;
public ParcelableValue value; //variables type to set
...
}
public class ParcelableValue implements Parcelable {
...
}
请有人帮我理解参数究竟是什么?如果可能的话,我想要一个更一般的解释,但是,如果更具体的说明使其更容易解释,我将专门用于理想的弹簧系统。
答案 0 :(得分:0)
您在这里要求参数:
def rk4(f, x0, y0, x1, n):
...
return vx, vy
f
是ODE函数,对于微分方程def f(x,y)
声明为y'(x)=f(x,y(x))
,(x0,y0)
是初始点和值,x1
是整合间隔[x0,x1]
n
是子间隔或集成步骤的数量
vx,vx
是计算的样本点,vy[k]
近似y(vx[k])
。
您不能将此用于弹簧系统,因为该代码仅适用于标量v
。您需要将其更改为使用numpy
进行矢量操作。
def rk4(func, x0, y0, x1, n):
y0 = np.array(y0)
f = lambda x,y: np.array(func(x,y))
vx = [0] * (n + 1)
vy = np.zeros( (n + 1,)+y0.shape)
h = (x1 - x0) / float(n)
vx[0] = x = x0
vy[0] = y = y0[:]
for i in range(1, n + 1):
k1 = h * f(x, y)
k2 = h * f(x + 0.5 * h, y + 0.5 * k1)
k3 = h * f(x + 0.5 * h, y + 0.5 * k2)
k4 = h * f(x + h, y + k3)
vx[i] = x = x0 + i * h
vy[i] = y = y + (k1 + 2*(k2 + k3) + k4) / 6
return vx, vy