Here’s the characteristic equation again:
After Fourier decomposition, we have that:
Let’s solve this! E,I,u,f = var("E I u f") x, L = var("x L") w = function('w')(x) _c0, _c1, _c2, _c3 = var("_C0 _C1 _C2 _C3") fourier_cantileaver = (EIdiff(w, x, 2) - uf^2w == 0) fourier_cantileaver -f^2uw(x) + EIdiff(w(x), x, x) == 0 And now, we can go about solving this result. solution = desolve(fourier_cantileaver, w, ivar=x, algorithm="fricas").expand() w = solution \begin{equation} {C{1}} e^{\left(\sqrt{f} x \left(\frac{u}{E I}\right)^{\frac{1}{4}}\right)} + {C{0}} e^{\left(i , \sqrt{f} x \left(\frac{u}{E I}\right)^{\frac{1}{4}}\right)} + {C{2}} e^{\left(-i , \sqrt{f} x \left(\frac{u}{E I}\right)^{\frac{1}{4}}\right)} + {C{3}} e^{\left(-\sqrt{f} x \left(\frac{u}{E I}\right)^{\frac{1}{4}}\right)} \end{equation} We will simplify the repeated, constant top of this expression into a single variable b: b = var("b") top = sqrt(f)(u/(EI))**(1/4) w = _c1e^(bx) + _c0e^(ibx) + _c2e^(-ibx) + _c3e^(-bx) w _C1e^(bx) + _C0e^(Ibx) + _C2e^(-Ibx) + _C3e^(-bx) \begin{equation} {C{1}} e^{\left(b x\right)} + {C{0}} e^{\left(i , b x\right)} + {C{2}} e^{\left(-i , b x\right)} + {C{3}} e^{\left(-b x\right)} \end{equation} We have one equation, four unknowns. However, we are not yet done. We will make one more simplifying assumption—try to get the e^{x} into sinusoidal form. We know this is supposed to oscillate, and it being in sinusoidal makes the process of solving for periodic solutions easier. Recall that:
With a new set of scaling constants d_0\dots d_3, and some rearranging, we can rewrite the above expressions into just a linear combination of those elements. That is, the same expression for w(x) at a specific frequency can be written as:
No more imaginaries!! So, let us redefine the expression: d0, d1, d2, d3 = var("d0 d1 d2 d3") w = d0cosh(bx)+d1sinh(bx)+d2cos(bx)+d3sin(bx) w d2cos(bx) + d0cosh(bx) + d3sin(bx) + d1sinh(bx) Now, we need to move onto solving when there will be valid solutions to this expression. However, we currently have four unknowns, and only one equation (at x=0, w=0, because the cantilever is fixed at base); so, to get a system in four elements, we will take some derivatives. The way that we will go about this is by taking three derivatives and supplying the following initial conditions to get four equations: wp = diff(w,x,1) wpp = diff(w,x,2) wppp = diff(w,x,3) (wp, wpp, wppp) (bd3cos(bx) + bd1cosh(bx) - bd2sin(bx) + bd0sinh(bx), -b^2d2cos(bx) + b^2d0cosh(bx) - b^2d3sin(bx) + b^2d1sinh(bx), -b^3d3cos(bx) + b^3d1cosh(bx) + b^3d2sin(bx) + b^3d0sinh(bx)) And then, we have a system: cond_1 = w.subs(x=0) == 0 cond_2 = wp.subs(x=0) == 0 cond_3 = wpp.subs(x=L) == 0 cond_4 = wppp.subs(x=L) == 0 conds = (cond_1, cond_2, cond_3, cond_4) conds (d0 + d2 == 0, bd1 + bd3 == 0, -b^2d2cos(Lb) + b^2d0cosh(Lb) - b^2d3sin(Lb) + b^2d1sinh(Lb) == 0, -b^3d3cos(Lb) + b^3d1cosh(Lb) + b^3d2sin(Lb) + b^3d0sinh(Lb) == 0) solve(conds, d0, d1, d2, d3).full_simplify() Ok so, we notice that out of all of these boundary expressions the b^{n} term drop out. Therefore, we have the system:
Now, taking the top expressions, we gather that:
Performing these substitutions:
Now we are going to do some cursed algebra to get rid of all the rest of the d. We want to do this because we don’t really care much what the constants are; instead, we care about when a solution exists (hopefully, then, telling us what the f baked inside b is). So:
and
therefore, we have:
Multiplying each side by the other:
Expanding both sides now:
Moving everything finally to one side:
Ok, this is where the satisfying “candy crush” begins when things cancel out. Recall pythagoras:
To apply these effectively, multiply both sides by 1:
Finally, we substitute!
Of course, there is oscillating results here. We will numerically locate them. Why did we subject ourselves to tall of this algebra? No idea. As soon as we got rid of all the d we could have just stopped simplifying and just went to the numerical root solving. But here we are. We will try to locate a root for Lb for every \pi for two rounds around the circle (until 4 \pi)—there is a solution for every \pi, if you don’t believe me, plot it or change the bottom to try to find it for every \frac{\pi}{2}, sage will crash: intervals = [jjpi for jj in range(0, 5)] intervals [0, pi, 2pi, 3pi, 4pi] We will now declare x=Lb, and create a nonlinear expression in it: x = var("x") characteristic_eqn = 1 + cos(x)*cosh(x) == 0 characteristic_eqn cos(x)*cosh(x) + 1 == 0 Root finding time! characteristic_solutions = [characteristic_eqn.find_root(i,j) for (i,j) in zip(intervals,intervals[1:])] characteristic_solutions [1.8751040687120917, 4.6940911329739246, 7.854757438237603, 10.995540734875457] These are possible Lb candidates. The takeaway here is that: (4.6940911329739246/1.8751040687120917)^2 6.266893025769125 (see below’s derivation for why frequency changes by a square of this root) the second overtone will be six and a quarter times (“much”) higher than the fundamental—so it will be able to dissipate much quicker. Recall now that:
Simplifying some:
To solve for f, give all other expressions and set one of the above characteristic solutions to Lb. Then, solve for f. Solving for frequency to get things to be correct, substituting the fact that bh \rho = \mu:
_E = 70000000000 # pascals _p = 2666 # kg/m^3 _h = 0.0064 # m # target LENGTH = 0.095 # mode to index nth_mode = 0 _s = characteristic_solutions[nth_mode] (_s^2/LENGTH^2)((_E(_h^2))/(12*_p))^(1/2) 3688.17772197722 Also, to get the constant for the elastic modulus from our force measurements, see calculating shear’s modulus. Let us create a code snippet to do that consistently: