Я пытаюсь решить дифференциальное уравнение:
Y '= E - (2αY + 4β (Y ^ 3) + 6γ (Y ^ 5))
Я смогчтобы решить, где Е представляет собой константу (т.е. Е = 20) с помощью следующего кода.Я использовал цикл RK4 для вычисления интеграла уравнения для заданного временного шага h и построил график Y как функцию от t.
import numpy as np
import matplotlib.pyplot as plt
def fun(y,t):
return np.array([(-(2*alpha*y + 4*beta*(y**3) + 6*gamma*(y**5)) + E)/(-2*alpha)])
def rk4(y,dy,t,h): #RK4 FUNCTION to integrate equation (fun) for solution for given time step
k1 = dy(y,t)
k2 = dy(y+h/2*k1,t+h/2)
k3 = dy(y+h/2*k2,t+h/2)
k4 = dy(y+h*k3,t+h)
y = y + h*(k1+2*k2+2*k3+k4)/6 #solution y
return [t,y] #return solution y for given time t
t = t + h #increment t by step size h
y = np.array([0.2]) #y0
t = 0
h = 0.1
w = 1
alpha = -52.419
beta = 58.252
gamma = 150.39
tmax = 10
ts = np.array([t]) #store all t's
ys = np.array([y]) #store all y solutions
E = 20
for i in range(int(tmax/h)-1):
(t,y) = rk4(y,fun,t,h)
ts = np.append(ts,t)
ys = np.append(ys,y)
print('ys',y)
plt.plot(ys)
plt.legend(["RK4 solution"], loc=1)
plt.title('Y(t) for E = 20')
plt.xlabel('t', fontsize=17)
plt.ylabel('y(t)', fontsize=17)
plt.tight_layout()
plt.show()
Проблема теперь в том, что я хочу изменить E на E = cos (w * t), а затем построить график Y как функцию этого нового определения E. Я не уверен, как поступитьоб этом.
Я отредактировал цикл for, пытаясь определить E, а затем вычислить значение y следующим образом (оставив остальную часть моего кода в покое):
et = 0
for i in range(int(tmax/h)-1):
E = np.array([np.cos(w*et)])
Es = np.append(Es,E)
et = et + h
(t,y) = rk4(y,fun,t,h)
ts = np.append(ts,t)
ys = np.append(ys,y)
.
.
.
plt.plot(Es,ys)
Но это сделалне дает результата, на который я надеялся.
Любые предложения приветствуются и заранее благодарны!