我将SHM的标准微分方程用于上述仿真,a = -w ^ 2 * x。我正在使用odeint作为求解器的Python。尽管对其进行了多次编辑,但我一直将输出保持为直线而不是正弦曲线。代码是:

from scipy.integrate import odeint
from pylab import *

k = 80 #Spring Constant
m = 8  #mass of block
omega = sqrt(k/m) #angular velocity

def deriv(x,t):
    return array([x[1],(-1)*(k/m)*x[0]])

t = linspace(0,3.62,100)

xinit = array([0,0])

x = odeint(deriv,xinit,t)

acc_mass = zeros(t.shape[0])

for q in range(0,t.shape[0]):
    acc_mass[q] = (-1)*(omega**2)*x[q][0]

f, springer = subplots(3, sharex = True)
springer[0].plot(t,x[:,0],'r')
springer[0].set_title('Position Variation')
springer[1].plot(t,x[:,1],'b')
springer[1].set_title('Velocity Variation')
springer[2].plot(t,acc_mass,'g')
springer[2].set_title('Acceleration Variation')

最佳答案

正如Warren Weckesser所指出的那样,代码是正确的,但是由于位移的初始条件为0,因此输出也为0。因此,在他的建议下,我更改了初始条件并获得了所需的正弦输出曲线。

10-06 05:53