pythonnumerical-methodsodedifferential-equationsstability

Stable solution of a 4th order non linear differential equations


I have solved the following bvp problem using bvp solver in python.

d4y/dx4= 0.00033*V/(0.000001-y)^(2) , y(0)=y'(0)=y(1)=y'(1)=0 In the above eqn 'V' is a parameter which has been varied using the for loop. The interesting part is that the solution to the above differential equation should be unstable for V>Vo. The bvp solver still yields some wrong values for V>Vo. How do I make the solver stop computing as soon as this instability arises?


Solution

  • For the normalized equation (changed scale of y and 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
    

    I get a critical value for c=70.099305, that is, V0=0.2124e-12. For very small c the solution is likewise small and close to y(t)=c/24*(t*(1-t))**2. For c close to the critical value the grid refinement concentrates at the maximum close to 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

    blue - numerical solution, yellow - approximation for small c