Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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]

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

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.
share|improve this question

5 Answers 5

up vote 12 down vote accepted

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] &, 
  Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 
  Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 
  Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 
  Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 
  Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 
  Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 
  Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 
  Root[{-Sin[Sqrt[#1]] + Cos[Sqrt[#1]/3] Cos[(2 Sqrt[#1])/3] Sqrt[#1] &, 

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

share|improve this answer
...thank you for this excellent post...best and beautiful answer to specific question –  ubpdqn Jul 16 at 2:22
Beautiful explanation, thank you very much I've learned a lot from this post. I just need to try and follow the simplification of the equation from my original to the one used here now for completeness. –  ASBO Allstar Jul 17 at 18:51

Numerical solution:

sol[a_] := {a, α} /. 
      Tan[a*Sqrt[α]] + Tan[(1 - a)*Sqrt[α]] == Sqrt[α] && 5 <= α <= 35, α]} // Quiet
ListLinePlot[sol /@ Range[0, 0.5, 0.01]]

enter image description here

I don't know why ContourPlot doesn't work well,even though I change some options of ContourPlot.Maybe it is because there are some singular points.

  Tan[a*Sqrt[α]] + Tan[(1 - a)*Sqrt[α]] == Sqrt[α], {a, 0, 0.5}, {α, 5, 35}]

enter image description here

share|improve this answer
+1 you actually solve the equation (numerically in the right range). I periodicity and singularities in tan form made the contour plot difficult. –  ubpdqn Jul 15 at 12:30
Thanks for showing me how to determine this numerically, good answer... –  ASBO Allstar Jul 17 at 18:52

Symbolically solve this equation:

Solve[Tan[a Sqrt[α]]+Tan[(1-a) Sqrt[α]]==Sqrt[α]//TrigToExp,a]
Solve[Tan[a Sqrt[α]]+Tan[(1-a) Sqrt[α]]==Sqrt[α]/.a->ArcTan[x]/Sqrt[α] //FullSimplify,x]



enter image description here

share|improve this answer
Thanks for taking the time to show how it can be solved symbolically, really appreciated. –  ASBO Allstar Jul 17 at 18:52

Just a way to visualize by rearranging (noting Chenminqi 's observation). Uses: $tan(x)+tan(y)=sin(x+y)/(cos(x)cos(y))$. Limiting range important to avoid periodicity and singularities:

cp = ContourPlot[
   Sin[Sqrt[y]]/Sqrt[y] == Cos[(1 - x) Sqrt[y]] Cos[ x Sqrt[y]], {x, 
    0, 0.5}, {y, 0, 35}, FrameLabel -> {"a", "\[Alpha]"}, 
   BaseStyle -> 20];
p3 = Plot3D[
   Sin[Sqrt[y]]/Sqrt[y] - Cos[(1 - x) Sqrt[y]] Cos[ x Sqrt[y]], {x, 0,
     0.5}, {y, 0, 35}, MeshFunctions -> {#3 &}, Mesh -> {{0}}, 
   MeshStyle -> {Red, Thick}, 
   AxesLabel -> {Style["a", 16], Style["\[Alpha]", 16], None}, 
   PlotLabel -> 
    Style[Sin[x Sqrt[y]]/Sqrt[y] - 
      Cos[(1 - x) Sqrt[y]] Cos[ x Sqrt[y]], Bold]];
Framed[GraphicsRow[{p3, cp}, ImageSize -> 700]]

enter image description here

share|improve this answer
It is very ingenious that change tan to sin/cos,so that can avoid singular points. –  Chenminqi Jul 15 at 12:29
@Chenminqi it was just a hunch (after plotting the surface with tans...an old boss used to say 'better to be lucky than good'[sometimes] –  ubpdqn Jul 15 at 12:31
This really is a thing of beauty, it's going to take me a while to unpick the maths behind it though.... thanks for posting. –  ASBO Allstar Jul 15 at 16:50
ContourPlot[ Tan[ a Sqrt[al]]/Sqrt[al] + (Tan[ (1 - a ) Sqrt[al]]/Sqrt[al] + 10^-10) == 
  1, {a, -10, 10}, {al, 0, 10}, ContourStyle -> {Thick, Red},
GridLines -> Automatic, AspectRatio -> Automatic]

Plot3D[ Tan[ a Sqrt[al]]/Sqrt[al],{a, -5, 5}, {al, 0, 10}]

The extended domain plot is sufficiently regular for tan function with vertical asymptotes, if the jaggedness is overlooked. A 3D plot for part of it shows the general trend.

Near vertical asymptote branches a sufficiently accurate algebraic relation can be derived for larger values using:

$\tan (\pi /2 - eps)\approx 1/ eps $

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.