Я пытаюсь построить решение для своей оды, используя solver integrate.odeint, однако я не получаю решение, когда пытаюсь построить его.Я не вижу, где формулировка моего кода неверна.
Пожалуйста, найдите ниже: импорт numpy как np импорт matplotlib.pyplot как pl из numpy import sin, потому что импорт numpy как np импорт matplotlib.pyplot как plt импорт scipy.integrate как интеграция импорта matplotlib.animation как анимация из математикиimport *
g = 9.81
l = 1.6
l_big = 2.0
l_small = 1.6
m = 0.01
alpha = 0.4
k = 100
def sh2(r1,t):
theta1,omega1 = r1
sh2_theta1 = omega1/(l + ((1/2)*alpha*(1+np.tanh(theta1*omega1*k))))**2
sh2_omega1 = -g*(l + ((1/2)*alpha*(1+np.tanh(theta1*omega1*k))))*sin(theta1)
#return sh2_theta1, sh2_omega1
return np.array([sh2_theta1, sh2_omega1],float)
init_state = np.radians([69.0,0])
dt = 1/40
time = np.arange(0,10.0,dt)
timexo = np.arange(0,10.0,dt)
state2 = integrate.odeint(sh2,init_state,time)
#print(state2)
print(len(state2),len(timexo))
plt.plot(timexo[0:2500],state2[0:2500])
plt.show()
#phase plot attempt
# initial values
x_0 = 0 # intial angular position
v_0 = 1.0 # initial angular momentum
t_0 = 0 # initial time
# initial y-vector from initial position and momentum
y0 = np.array([x_0,v_0])
# max value of time and points in time to integrate to
t_max = 10
N_spacing_in_t = 1000
# create vector of time points you want to evaluate
t = np.linspace(t_0,t_max,N_spacing_in_t)
# create vector of positions for those times
y_result = np.zeros((len(t), 2))
# loop through all demanded time points
for it, t_ in enumerate(t):
# get result of ODE integration up to the demanded time
y = integrate.odeint(sh2,init_state,t_)
# write result to result vector
y_result[it,:] = y
# get angle and angular momentum
angle = y_result[:,0]
angular_momentum = y_result[:,1]
# plot result
pl.plot(angle, angular_momentum,'-',lw=1)
pl.xlabel('angle $x$')
pl.ylabel('angular momentum $v$')
pl.gcf().savefig('pendulum_single_run.png',dpi=300)
pl.show()
Вывод этого кода:
График 1: правильный график для решения оды во времени
График 2 : пустой график дляфазовая плоскость, которая вызывает проблемы.
Любые намеки приветствуются.На менее важной ноте мой первый сюжет дает две линии, хотя я ожидал только синей линии.