дифференциальные уравнения БВП - PullRequest
0 голосов
/ 16 марта 2020
#including the differential equations and parameters 

def model(x,dydx,p): 
    s=p[0]  #first parameter 
    a=p[1]   #second parameter 

    dydx[0] = -2*(s+a)*y[0]+2*s*y[1]+s/2*y[2] 
    dydx[1] = +2*(s+a)*y[1]-2*s*y[0]-s/2*y[2] 
    dydx[2] = -(s+a)*y[2] 

    return np.vstack(dydx[0],dydx[1],dydx[2]) 

# boundary conditions

def bc(ya, yb,yc, p): 
    s=p[0]  
    a=p[1] 
    I0=1 

    return np.array(([ya[0], yb[0],yc[0],a,s])) 
#x values 
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])   
y = np.zeros((3, x.size)) 
#p=  np.zeros((3, d.size)) 
#y initial values 
y[0]=3 
y[1]=3 
y[2]=2 

I0 = 1 

sol = solve_bvp(model, bc,x,y, p=[1,1]) 

Я не знаю, как я могу написать граничные условия для решения трех дифференциальных уравнений

Я хочу решить уравнения и иметь значения y и значения параметров

1 Ответ

0 голосов
/ 18 марта 2020

По другому вопросу у вас есть фиксированные параметры и 3 граничных условия. Это должно быть закодировано как

# boundary conditions
def bc(y0, yd, I0): 
    return np.array([y0[0], y0[2]-I0, yd[1]]) 

Тогда исходный массив x должен быть ограничен граничными точками

x = np.linspace(0,d,9)   
y = np.zeros((3, x.size)) 
#y initial values 
y[0]=3 
y[1]=3 
y[2]=2 

, а решатель должен быть вызван без переменных параметров, фиксируя их все к их постоянным значениям через обертки / частичная оценка

sol = solve_bvp(lambda t,y:model(t,y,[s,a]), lambda y0,yd: bc(y0,yd,I0), x,y) 
...