求解耦合振荡器的运动方程



这个问题询问的是一个系统,它有两个质量,每个质量连接到两个弹簧上,看起来像这样:

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

外部弹簧具有弹簧常数kb,内部弹簧具有常数ks。我写了一些代码来找到系统的正常模式,我得到的频率是0.160,我很确定这是正确的。然而,当我试图用线性代数来解决同样的问题时,我得到了-1.2和-1.0的特征值。我也不太明白如何编写代码,因为我的运动方程不适合我迄今为止看到的任何python代码示例,我也不知道如何使矩阵d^2/dt^2 X传递到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(的系统。看看https://scipy-cookbook.readthedocs.io/items/CoupledSpringMassSystem.html.关于特征值/特征向量,你必须考虑C矩阵的那些,而不是A。然后你直接得到模式。

为此,请使用scipy.linalg.eig函数,而不是eigh,因为eigh只适用于复数埃尔米特(共轭对称(或实对称矩阵,而不是这里的情况。

我在这里为类似的系统编写了一个代码:https://scicomp.stackexchange.com/questions/36357/system-of-second-order-odes-runge-kutta-4th-order/36358?noredirect=1#comment70848_36358

最新更新