#! /usr/bin/env python3 # def vanderpol_ode ( x, y ): #*****************************************************************************80 # ## vanderpol_ode() evaluates the right hand side of the vanderpol ODE. # import numpy as np nu = vanderpol_nu ( ) fValue = np.zeros ( 2 ) fValue[0] = y[1] fValue[1] = - nu * ( y[0]**2 - 1.0 ) * y[1] - y[0] + np.exp ( - x ) return fValue def vanderpol_nu ( nu_input = None ): #*****************************************************************************80 # ## vanderpol_nu() allows the user to work with a global variable nu. # # Modified: # # 02 October 2021 # # Author: # # John Burkardt # if ( not hasattr ( vanderpol_nu, "nu_default" ) ): vanderpol_nu.nu_default = 11.0 if ( nu_input is not None ): vanderpol_nu.nu_default = nu_input nu_output = vanderpol_nu.nu_default return nu_output if ( __name__ == '__main__' ): from forward_euler import forward_euler import matplotlib.pyplot as plt import numpy as np NU = 11.0 vanderpol_nu ( NU ) f_ode = vanderpol_ode xRange = np.array ( [ 0.0, 2.0 ] ) yInit = np.array ( [ 0.0, 0.0 ] ) numSteps = 40 x, y = forward_euler ( f_ode, xRange, yInit, numSteps ) plt.plot ( x, y, 'b-' ) plt.grid ( True ) plt.title ( 'Vanderpol ODE, NU = ' + str ( NU ) ) filename = 'vanderpol_ode.jpg' plt.savefig ( filename ) print ( " Graphics saved as ", filename ) plt.show ( ) plt.close ( )