am trying to predict the exact solution for the mathieu’s equation y”+(lambda – 2qcos(2x))y = 0. I have been able to get five eigenvalues for the equation using numerical approximation and I want to find for each eigenvalues a guessed exact solution. I would be greatfull if someone helps. Thank you. Below is one of the codes for the fourth Eigenvalue
from scipy.integrate import solve_bvp import numpy as np import matplotlib.pyplot as plt
Definition of Mathieu’s Equation
q = 5.0 def func(x,u,p): lambd = p[0] # y'' + (lambda - 2qcos(2x))y = 0 ODE = [u[1],-(lambd - 2.0*q*np.cos(2.0*x))*u[0]] return np.array(ODE)
Definition of Boundary conditions(BC)
def bc(ua,ub,p): return np.array([ua[0]-1., ua[1], ub[1]])
A guess solution of the mathieu’s Equation
def guess(x): return np.cos(4*x-6) Nx = 100 x = np.linspace(0, np.pi, Nx) u = np.zeros((2,x.size)) u[0] = -x res = solve_bvp(func, bc, x, u, p=[16], tol=1e-7) sol = guess(x) print res.p[0] x_plot = np.linspace(0, np.pi, Nx) u_plot = res.sol(x_plot)[0] plt.plot(x_plot, u_plot, 'r-', label='u') plt.plot(x, sol, color = 'black', label='Guess') plt.legend() plt.xlabel("x") plt.ylabel("y") plt.title("Mathieu's Equation for Guess$= cos(3x) quad lambda_4 = %g$" % res.p ) plt.grid() plt.show()
[Plot of the Fourth Eigenvalues][2]
Advertisement
Answer
To compute the first five eigenpairs, thus, pairs of eigenvalues and eigenfunctions, of the Mathieu’s equation Y” + (λ − 2q cos(2x))y = 0, on the interval [0, π] with boundary conditions: y'(0) = 0, and y'(π) = 0 when q = 5. The solution is normalized so that y(0) = 1. Though all the initial values are known at x = 0, the problem requires finding a value for the parameters that allows the boundary condition y'(π) = 0 to be satisfied. Therefore the guess or exact solution of Mathieu’s equation is cos(k*x) where k ∈ ℕ.
from scipy.integrate import solve_bvp import numpy as np import matplotlib.pyplot as plt q = 5.0 # Definition of Mathieu's Equation def func(x,u,p): lambd = p[0] # y'' + (lambda - 2qcos(2x))y = 0 can be rewritten as u2'= - (lambda - 2qcos(2x))u1 ODE = [u[1],-(lambd - 2.0*q*np.cos(2.0*x))*u[0]] return np.array(ODE) # Definition of Boundary conditions(BC) def bc(ua,ub,p): return np.array([ua[0]-1., ua[1], ub[1]]) # A guess solution of the mathieu's Equation def guess(x): return np.cos(5*x) # for k=5 Nx = 100 x = np.linspace(0, np.pi, Nx) u = np.zeros((2,x.size)) u[0] = -x # initial guess res = solve_bvp(func, bc, x, u, p=[20], tol=1e-9) sol = guess(x) print res.p[0] x_plot = np.linspace(0, np.pi, Nx) u_plot = res.sol(x_plot)[0] plt.plot(x_plot, u_plot, 'r-', label='u') plt.plot(x, sol, linestyle='--', color='k', label='Guess') plt.legend(loc='best') plt.xlabel("x") plt.ylabel("y") plt.title("Mathieu's Equation $lambda_5 = %g$" % res.p) plt.grid() plt.savefig('Eigenpair_5v1.png') plt.show()