Python 耦合振子运动方程的求解

Python 耦合振子运动方程的求解,python,scipy,Python,Scipy,这个问题问的是一个系统,它有两个质量块,每个质量块与两个弹簧相连,如下所示: |s s s M1 s s s s M2 s s s s| 外弹簧的弹簧常数为kb,内弹簧的弹簧常数为ks。我写了一些代码来找到系统的正常模式,我得到的频率是0.160,我很确定这是正确的。然而,当我试图用线性代数来解决同样的问题时,我得到了-1.2和-1.0的特征值。我也不太明白如何编写这方面的代码,因为我的运动方程不适合到目前为止看到的任何python代码示例,我不知道如何将矩阵d^2/dt^2X传递到eigh()

这个问题问的是一个系统,它有两个质量块,每个质量块与两个弹簧相连,如下所示:

|s s s M1 s s s s M2 s s s s|

外弹簧的弹簧常数为kb,内弹簧的弹簧常数为ks。我写了一些代码来找到系统的正常模式,我得到的频率是0.160,我很确定这是正确的。然而,当我试图用线性代数来解决同样的问题时,我得到了-1.2和-1.0的特征值。我也不太明白如何编写这方面的代码,因为我的运动方程不适合到目前为止看到的任何python代码示例,我不知道如何将矩阵d^2/dt^2X传递到eigh()函数中。运动方程为:

d^2/dt^2 X=AX 其中X是向量,a是具有质量和弹簧常数的矩阵

以下是我编写的代码:

from scipy import linalg as LA

A = np.array([[(-1/m1)*(kb+ks),(1/m1)*ks],[(1/m2)*ks,(-1/m2)*(kb+ks)]])
w,v = LA.eigh(A)
print(w)
print(v)

通过添加每个质量的速度作为变量,将二阶系统重新构建为一阶常微分方程(dx/dt=Cx)系统。看看关于特征值/特征向量,你必须考虑C矩阵的那些,而不是A。然后直接得到模式。< /P> 为此,请使用scipy.linalg.eig函数,而不是eigh,因为eigh仅适用于复埃尔米特(共轭对称)矩阵或实对称矩阵,此处不会出现这种情况

我在这里为类似的系统编写了代码:

此微分方程页面包含所有方程的详细分析。对于这一点,甚至是带有滑块的参数动画。