# Eigenvalue problem for ordinary differential equation

I am trying to compute the natural frequency of a cantilevered beam. The Euler-Bernoulli equation reduces to the following problem : $$v''''=\lambda v, \text{with }, v(0)=0, v'(0)=0, v'''(1)=0,v''(1)=0$$

where superscript $$'$$ correspond to derivation. These are the steps to obtain a solution:

1. reduce the problem to a system of first order differential equation

$$v'=v_1\\ v_1'=v_2\\ v_2'=v_3\\ v_3'=\lambda v$$ with the boundary conditions $$v(0)=0\\ v_1(0)=0\\ v_2(1)=0\\ v_3(1)=0$$ 2) write the system in python (kcorrespond to $$\lambda$$)

def fun(x, y):
return np.vstack((y[1],y[2],y[3], k*y[0]))
def bc(ya, yb):
return np.array([ya[0], ya[1],yb[2],yb[3]])

1. define grid and initial conditions
x = np.linspace(0, 1, 100)

y_0 = np.zeros((4, x.size))
y_0[0]=np.sinh(x)
y_0[1]=np.cosh(x)
y_0[2]=-np.sinh(x)
y_0[3]=-np.cosh(x)

1. at this point my idea, I use scipy.integrate.solve_bvp  to solve the boundary value problem varying the parameter $$k$$:
k_list=[1.80,1.81,1.82,1.83,1.84,1.85]
for k in k_list:
soly= solve_bvp(fun, bc, x, y_b)
print(soly.status)
y_plot = soly.sol(x)[0]
plt.plot(x, y_plot, label='y_b')


And take as the right eigenvalue the value for which soly.sol is equal to $$0$$, but, for the previous code, I obtain a solution for all the value in k_list.

Even if I implement a shooting method, which is the right method to check to see if I got the right eigenvalue ?

• A good way to solve your problem is discretize the equation on a spatial grid and convert it to linear algebra. May 17 at 15:53

As mentioned by @MaximUmansky, you are, probably, better using a discretization method such as (see this answer):

Finite differences are really simple to understand as discretization technique but the boundary conditions get messy really fast, particularly for your higher order case.

I would suggest to go with the Finite Element Method. If you insist in using the shooting method, you could check this answer.