Передать список в качестве аргумента для функции в Python - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь решить дифференциальное уравнение:

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)

Но это сделалне дает результата, на который я надеялся.

Любые предложения приветствуются и заранее благодарны!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...