Устойчивое решение нелинейных дифференциальных уравнений 4-го порядка - PullRequest
0 голосов
/ 04 мая 2020

Я решил следующую проблему с bvp, используя bvp solver в python.

d4y/dx4= 0.00033*V/(0.000001-y)^(2) , y(0)=y'(0)=y(1)=y'(1)=0 В приведенном выше выражении 'V' - это параметр, который был изменен с использованием для l oop. Интересно, что решение вышеприведенного дифференциального уравнения должно быть неустойчивым при V> Vo. Решатель bvp все еще дает некоторые неправильные значения для V> Vo. Как заставить решатель прекратить вычисления, как только возникнет эта нестабильность?

1 Ответ

0 голосов
/ 04 мая 2020

Для нормализованного уравнения (измененная шкала y и V)

y''''*(1e-6-y)**2 = 3.3e-4*V
(1e6*y)''''*(1-1e6*y)**2 = 3.3e14*V

u = 1e6*y,   c = 3.3e14*V

u'''' = c/(1-u)**2

Я получаю критическое значение для c=70.099305, то есть V0=0.2124e-12. Для очень маленьких c решение также мало и близко к y(t)=c/24*(t*(1-t))**2. Для c вблизи критического значения уточнение сетки концентрируется на максимуме, близком к y=0.4.

c=70.099305

def f(t,u): return [u[1],u[2],u[3],c/(1-u[0])**2]
def bc(u0,u1): return [u0[0], u0[1], u1[0], u1[1]]

t = np.linspace(0,1,5);
u = np.zeros([4,len(t)])
res = solve_bvp(f,bc,t,u, tol=1e-4, max_nodes=5000)
print(res.message)

%matplotlib inline
if res.success:
    plt.figure(figsize=(10,5))
    t = np.linspace(0,1,502)
    plt.plot(t, c/24*(t*(1-t))**2,c='y', lw=3)
    plt.plot(t,res.sol(t)[0],'b')
    plt.plot(res.x,res.y[0],'xr')
    plt.grid(); plt.show()

plot of solution and small parameter approximation

синий - численное решение, желтый - приближение для малых c

...