繁体   English   中英

如何创建具有二维的单个向量?

[英]How to create a Single Vector having 2 Dimensions?

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

然后我就能够运行一个代码来计算和比较精确解与 Runge-Kutta 方法解。

它工作正常......但是,我最近被要求不要将我的 'x' 和 'v' 值分开,而是使用具有二维的单个向量 'x'(即 '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, x, 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], x[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, x[i] + h * K1x / 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, x[i] + h * K2x / 2, v[i] + h * K2v / 2)

    K4x = f1(te[i] + h, x[i] + h * K3x, v[i] + h * K3v)
    K4v = f2(te[i] + h, x[i] + h * K3x, 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 个列表之外,不确定您对自己想要什么的确切期望。 虽然我确实希望这个链接能帮助回答你的问题。 https://www.tutorialspoint.com/python_data_structure/python_2darray.htm

您可以使用 np.array() 函数,这是您要执行的操作的示例:

x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM