我正在尝试求解一个微分方程:
Y'= E-(2αY+4β(Y ^ 3)+6γ(Y ^ 5))
我能够使用以下代码解决其中E为常数(即E = 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)
但这并没有产生我希望的结果。
任何人和所有建议都欢迎并提前致谢!