I am continuing to work on the vibration of a beam modeled by the Euler-Bernoulli equation. I have had some good answers to simulating the motion which may be found here. Now I wish to calculate the eigenvalues and vectors.
The equation is
$\frac{\partial ^2}{\partial x^2}\left(\text{EI}(x) \frac{\partial ^2v(t,x)}{\partial x^2}\right)+m(x) \frac{\partial ^2v(t,x)}{\partial t^2}=0$
where $v(t,x)$ is the displacement $\text{EI}(x)$ is the bending stiffness and $m(x)$ the mass per unit length.
The standard approach for calculating the eigenvalues is to assume a harmonic solution of the form
$v(t, x) = u(x) sin(t ω)$
which gives us the ordinary differential equation
$\frac{\partial ^2}{\partial x^2}\left(\text{EI}(x) \frac{\partial ^2u(x)}{\partial x^2}\right)-\lambda m(x) u(x)=0$
Here I have written $\lambda$ for $\omega ^2$ for simplicity.
When the bending stiffness and mass per unit length are constants there is an exact solution. However even for that case we cannot use NDEigensystem because that only supports second order equations.
Here is a minimal working example
ClearAll[m, EI, L];
L = 5;
m[x_] := 12.25 (-0.024 + (0.4 - 0.03 x)^2)
EI[x_] := 94.522 (-0.0005772 + (0.4 - 0.03 x)^4)
eqn = -λ m[x] u[x] + D[EI[x] D[u[x], {x, 2}], {x, 2}] == 0;
bc = {u[0] == 0, u'[0] == 0, u''[L] == 0, u'''[L] == 0};
Mathematica is not able to take the Laplace transform so I could not make progress in that direction.
What I have been able to do is to add an oscillating force to the boundary conditions and use ParametricNDSolve
bc1 = {u[0] == 0, u'[0] == 0, u''[L] == 0, u'''[L] == 1};
ps = ParametricNDSolve[Join[{eqn}, bc1], u, {x, 0, L}, λ];
Plot3D[Evaluate[u[λ][x] /. ps], {x, 0, L}, {λ, 0, 30},
PlotRange -> All]
When $\lambda$ equals an eigenvalue the response should be infinite and this is reflected in the ridges. In particular plotting the displacement at the end of the beam
Plot[Evaluate[u[λ][L] /. ps], {λ, 0, 30}]
shows a nice resonance curve with infinite values at the eigenvalues. I have tried using FindRoot on the reciprocal of this curve, for example,
FindRoot[Evaluate[(1/u[λ][L] /. ps) == 0], {λ, 6.6} ]
and this does give a result together with many warnings from ParametricNDSolve.
I need a better method for finding eigenvalues and vectors. Please can you help? Thanks