Skip to main content

trigonometry - Solve symbolically a transcendental trigonometric equation and plot its solutions


I currently have the equation below for a beam with a hinge at various locations, the variable a can vary between 0 and 0.5. $$ Tan\left( {a\sqrt \alpha } \right) + Tan\left\{ {\left( {1 - a} \right)\sqrt \alpha } \right\} - \sqrt \alpha = 0 $$


I wanted to use this equation to replicate the figure below:


Taken from Exact Solutions for Buckling of Structural Members


My first thought was to solve the equation so that a= whatever the equation became and then I could plot this to replicate this graph.


I've tried a few different ways to solve this equation but I'm being repeatedly told:




Solve::nsmet: This system cannot be solved with the methods available to Solve.

A few of the methods I've tried are below...


Solve[Tan[a*Sqrt[α]] + Tan[(1 - a)*Sqrt[α]] == Sqrt[α], a]

Reduce[Tan[a*Sqrt[α]] + Tan[(1 - a)*Sqrt[α]] == Sqrt[α], a]

Solve[TrigExpand[
Tan[a*Sqrt[α]] + Tan[(1 - a)*Sqrt[α]]] == Sqrt[α], a]


Reduce[
Tan[a*Sqrt[α]] + Tan[(1 - a)*Sqrt[α]] == Sqrt[α] && Element[
{a, α}, Reals], a]

Frustratingly a colleague has managed to get the equation to be rearranged with a as the subject but not with alpha as the subject using MathCAD and then I can see that for certain circumstances the solutions are complex.


For completeness the solutions using MathCAD are below:


$$ a=a\tan \left( {\frac{{\frac{{\sqrt \alpha }}{2} - \frac{{\sqrt {\frac{{\alpha \tan \left( {\sqrt \alpha } \right) - 4\tan \left( {\sqrt \alpha } \right) + 4\sqrt \alpha }}{{\tan \left( {\sqrt \alpha } \right)}}} }}{2}}}{{\sqrt \alpha }}} \right) $$


and $$ a=a\tan \left( {\frac{{\frac{{\sqrt \alpha }}{2} + \frac{{\sqrt {\frac{{\alpha \tan \left( {\sqrt \alpha } \right) - 4\tan \left( {\sqrt \alpha } \right) + 4\sqrt \alpha }}{{\tan \left( {\sqrt \alpha } \right)}}} }}{2}}}{{\sqrt \alpha }}} \right) $$


My questions for this I guess are:




  1. How can I can rearrange and solve equations of this type? Helping me understand why a simple Solve struggles with this would also be genuinely appreciated to help improve my understanding in Mathematica

  2. How to recreate the plot once solved? (I'm not concerned with the smaller diagrams that have been added, I will do that myself in illustrator)

  3. Eventually I'm going to want to find the precise maxima of this and similar equations and I'm hoping that will be fairly straightforward once I've got the equation to rearrange into a more convenient format.



Answer



General remarks


These are are crucial aspects of solving equations symbolically:



  • So far (in general) Mathematica cannot solve transcendental equations when two unknowns are involved, nevervetheless in some exceptional cases it may seem like it could (see e.g. How do I solve this equation?). This is also the case when some symbolic constants are involved (see How do I solve 1−(1−(Ax)2)32−B(1−cos(x))=0?)

  • Another problem arises when one doesn't restrict variables in an appropriate way, it is the case when we deal with periodic functions, but they are involved in a way that excludes periodic solutions. This case is encountered frequently when there are trigonometric functions in equations. Take a closer look at these two posts: Can Reduce really not solve for x here? and the second post of the first point .


  • Another remark regards the fact that in general Mathematica assumes that variables are complex, however when variables appear in algebriac inequalities then the system assumes that they are real (see e.g. Solve an equation in R+). When we are to solve an equation in reals one should be be careful since there are subtle issues related, they are quite extensively discussed here Why doesn't Roots work on a certain quartic equation?


The problem at hand


The equation can be solved as follows. Since we have two variables we should define one of them as a variable in a function solving the equation. Another important restriction is that we should restrict the variable α. An obvious restriction is that it should be non-negative, however the experssion defining the equation appears to be singular at α == 0 so we should choose an arbitrary constant bounding α from below. By singular we mean that there is an infinite range for searching solutions if we assume only that α > 0. Instead we assume α > c where c is positive. We should also assume an upper bound for α enabling the system to complete searching for solutions. So we define the lower and upper bounds as e.g. 1/1000 and 1000 respectively. So we have:


sol[a_] /; 0 < a < 1/2 := 
α /. Solve[ Sqrt[α] Cos[a Sqrt[α]] Cos[Sqrt[α] - a Sqrt[α]] ==
Sin[Sqrt[α]] && 1000 > α > 1/1000, {α}]

Now we can find all solutions (under the above restrictions). Unlike the other answers suggest there are more solutions than only 2, e.g.


s = sol[1/3]



{ Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 
16.4822373000779225665}],
Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &,
47.367354711372064166}],
Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &,
135.526521745056346713}],
Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &,
193.885084068927115355}],

Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &,
269.20855783335694984}],
Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &,
446.53942307593795448}],
Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &,
549.17432817270068980}],
Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &,
668.86391645603933815}],
Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &,
935.12993805306825434}]}


One should remember that Root objects are symbolic representations of exact solutions (see How do I work with Root objects?).


We add the related plot:


ContourPlot[ Sqrt[α] Cos[a Sqrt[α]] Cos[Sqrt[α] - a Sqrt[α]] == 
Sin[Sqrt[α]], {a, 0, 1/2}, {α, 0, 1000},
PlotPoints -> 50, MaxRecursion -> 4,
ContourStyle -> {Darker @ Green, Thick}, AspectRatio -> 1,
ImageSize -> 550, Epilog -> { Thickness[0.01], Darker @ Cyan ,
Line[{{1/3, 0}, {1/3, 1000}}], Red, PointSize[0.02],
Point[Thread[{1/3, #}& @ s]]}]


where the red points denotes all solutions found on the line a == 1/3 (in cyan), while green curves denote all solutions restricted by the condition 1000 > α > 1/1000.


enter image description here


Without an upper bound for the search the system doesn't tell us if there are any solutions even though one could find them easily


Comments

Popular posts from this blog

plotting - Filling between two spheres in SphericalPlot3D

Manipulate[ SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, Mesh -> None, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], {n, 0, 1}] I cant' seem to be able to make a filling between two spheres. I've already tried the obvious Filling -> {1 -> {2}} but Mathematica doesn't seem to like that option. Is there any easy way around this or ... Answer There is no built-in filling in SphericalPlot3D . One option is to use ParametricPlot3D to draw the surfaces between the two shells: Manipulate[ Show[SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], ParametricPlot3D[{ r {Sin[t] Cos[1.5 Pi], Sin[t] Sin[1.5 Pi], Cos[t]}, r {Sin[t] Cos[0 Pi], Sin[t] Sin[0 Pi], Cos[t]}}, {r, 1, 2 - n}, {t, 0, Pi}, PlotStyle -> Yellow, Mesh -> {2, 15}]], {n, 0, 1}]

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]

plotting - Adding a thick curve to a regionplot

Suppose we have the following simple RegionPlot: f[x_] := 1 - x^2 g[x_] := 1 - 0.5 x^2 RegionPlot[{y < f[x], f[x] < y < g[x], y > g[x]}, {x, 0, 2}, {y, 0, 2}] Now I'm trying to change the curve defined by $y=g[x]$ into a thick black curve, while leaving all other boundaries in the plot unchanged. I've tried adding the region $y=g[x]$ and playing with the plotstyle, which didn't work, and I've tried BoundaryStyle, which changed all the boundaries in the plot. Now I'm kinda out of ideas... Any help would be appreciated! Answer With f[x_] := 1 - x^2 g[x_] := 1 - 0.5 x^2 You can use Epilog to add the thick line: RegionPlot[{y < f[x], f[x] < y < g[x], y > g[x]}, {x, 0, 2}, {y, 0, 2}, PlotPoints -> 50, Epilog -> (Plot[g[x], {x, 0, 2}, PlotStyle -> {Black, Thick}][[1]]), PlotStyle -> {Directive[Yellow, Opacity[0.4]], Directive[Pink, Opacity[0.4]],