如何创建具有2维的单个矢量?

问题描述

我已经将运动方程(牛顿定律)用于简单的弹簧和质量场景,并将其结合到给定的第二ODE方程y“ +(k / m)x = 0; y(0)= 3; y' (0)= 0。

然后,我能够运行一个代码,用于计算精确解决方案并将其与Runge-Kutta方法解决方案进行比较。

它工作正常...但是,最近,我被要求不要将我的'x'和'v'值分开,而是使用具有二维(即'x'和'v '可以由x(1)和x(2)处理)。

我的代码:

# Given is y" + (k/m)x = 0; y(0) = 3; y'(0) = 0

# Parameters
h = 0.01;  #Step Size
t = 100.0;  #Time(sec)
k = 1;
m = 1;
x0 = 3;
v0 = 0;

# Exact Analytical Solution
te = np.arange(0,t,h);
N = len(te);
w = (k / m) ** 0.5;
x_exact = x0 * np.cos(w * te);
v_exact = -x0 * w * np.sin(w * te);

# Runge-kutta Method
x = np.empty(N);
v = np.empty(N);
x[0] = x0;
v[0] = v0;

def f1 (t,x,v):
    x = v
    return x
def f2 (t,v):
    v = -(k / m) * x
    return v

for i in range(N - 1):    #MAIN LOOP
    K1x = f1(te[i],x[i],v[i])
    K1v = f2(te[i],v[i])

    K2x = f1(te[i] + h / 2,x[i] + h * K1x / 2,v[i] + h * K1v / 2)
    K2v = f2(te[i] + h / 2,v[i] + h * K1v / 2)

    K3x = f1(te[i] + h / 2,x[i] + h * K2x / 2,v[i] + h * K2v / 2)
    K3v = f2(te[i] + h / 2,v[i] + h * K2v / 2)

    K4x = f1(te[i] + h,x[i] + h * K3x,v[i] + h * K3v)
    K4v = f2(te[i] + h,v[i] + h * K3v)

    x[i + 1] = x[i] + h / 6 * (K1x + 2 * K2x + 2 * K3x + K4x)
    v[i + 1] = v[i] + h / 6 * (K1v + 2 * K2v + 2 * K3v + K4v)

任何人都可以帮助我理解如何创建具有2个维度的单个矢量,以及如何修改我的代码吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)