2
$\begingroup$

This question already has an answer here:

I have a very complicated function but only of 1 variable. I want to find the first value for which that function is zero. Mathematica can easily plot it:

func = Det[coeffMatrix];
Plot[func, {\[Beta]1, 0, 3}]

enter image description here

From that plot, one can easily see that the first value would be ~2.556.

To show that $\beta_1$ = 2.556 is actually the approximate solution:

func /. \[Beta]1 -> 2.556

-0.00139597

However, when I try to find it numerically:

NSolve[func == 0 && 0 < \[Beta]1 < 10, \[Beta]1]

...it just runs and runs and runs and never gives an answer. Why ? and how can I fix it ?

The complete code

constants = {b1 -> (-(Cosh[
          0.68*\[Beta]1]*(0.6553600000000004*Cos[0.15*\[Beta]1]*
            Cos[0.68*\[Beta]1] - 
           0.6553600000000004*Cos[0.68*\[Beta]1]*
            Cosh[0.15*\[Beta]1] + 
           1.2621440000000002*Sin[0.15*\[Beta]1]*Sin[0.68*\[Beta]1] + 
           0.7378559999999998*Sin[0.68*\[Beta]1]*
            Sinh[0.15*\[Beta]1])) + 
      Cos[0.68*\[Beta]1]*(-0.7378559999999998*Sin[0.15*\[Beta]1] - 
         1.2621440000000002*Sinh[0.15*\[Beta]1])*
       Sinh[0.68*\[Beta]1])/(Cosh[
        0.68*\[Beta]1]*(-0.6553600000000004*Cos[0.68*\[Beta]1]*
          Sin[0.15*\[Beta]1] + 
         1.2621440000000002*Cos[0.15*\[Beta]1]*Sin[0.68*\[Beta]1] + 
         0.7378559999999998*Cosh[0.15*\[Beta]1]*Sin[0.68*\[Beta]1] - 
         0.6553600000000004*Cos[0.68*\[Beta]1]*Sinh[0.15*\[Beta]1]) + 
      Cos[0.68*\[Beta]1]*(0.7378559999999998*Cos[0.15*\[Beta]1] + 
         1.2621440000000002*Cosh[0.15*\[Beta]1])*Sinh[0.68*\[Beta]1]),
   b2 -> (2.5*
      Sec[0.68*\[Beta]1]*(Cosh[
          0.68*\[Beta]1]*(-0.26214400000000015 + 
           0.26214400000000015*Cos[0.15*\[Beta]1]*
            Cosh[0.15*\[Beta]1] - 
           Sin[0.15*\[Beta]1]*Sinh[0.15*\[Beta]1]) + 
        0.8*(Cosh[0.15*\[Beta]1]*Sin[0.15*\[Beta]1] - 
           Cos[0.15*\[Beta]1]*Sinh[0.15*\[Beta]1])*
         Sinh[0.68*\[Beta]1]))/((0.7378559999999998*
          Cos[0.15*\[Beta]1] + 
         1.2621440000000002*Cosh[0.15*\[Beta]1])*Sinh[0.68*\[Beta]1] +
       Cosh[0.68*\[Beta]1]*(-0.6553600000000004*Sin[0.15*\[Beta]1] - 
         0.6553600000000004*Sinh[0.15*\[Beta]1] + 
         1.2621440000000002*Cos[0.15*\[Beta]1]*Tan[0.68*\[Beta]1] + 
         0.7378559999999998*Cosh[0.15*\[Beta]1]*Tan[0.68*\[Beta]1])), 
  d2 -> (2.5*
      Sech[0.68*\[Beta]1]*(-0.26214400000000015*Cos[0.68*\[Beta]1] + 
        0.8*Cosh[
          0.15*\[Beta]1]*(0.3276800000000002*Cos[0.15*\[Beta]1]*
            Cos[0.68*\[Beta]1] + 
           Sin[0.15*\[Beta]1]*
            Sin[0.68*\[Beta]1]) + (Cos[0.68*\[Beta]1]*
            Sin[0.15*\[Beta]1] - 
           0.8*Cos[0.15*\[Beta]1]*Sin[0.68*\[Beta]1])*
         Sinh[0.15*\[Beta]1]))/(-0.6553600000000004*
       Cos[0.68*\[Beta]1]*Sin[0.15*\[Beta]1] + 
      1.2621440000000002*Cos[0.15*\[Beta]1]*Sin[0.68*\[Beta]1] - 
      0.6553600000000004*Cos[0.68*\[Beta]1]*Sinh[0.15*\[Beta]1] + 
      0.7378559999999998*Cos[0.15*\[Beta]1]*Cos[0.68*\[Beta]1]*
       Tanh[0.68*\[Beta]1] + 
      Cosh[0.15*\[Beta]1]*(0.7378559999999998*Sin[0.68*\[Beta]1] + 
         1.2621440000000002*Cos[0.68*\[Beta]1]*Tanh[0.68*\[Beta]1]))}

matrix = {{a1 (Sin[u \[Beta]1] - Sinh[u \[Beta]1]), 
    b1 (Cos[u \[Beta]1] - Cosh[u \[Beta]1]), -b2*
     Cos[y*\[Theta]*\[Beta]1], -d2*
     Cosh[y*\[Theta]*\[Beta]1]}, {a1 (Cos[u \[Beta]1] - 
       Cosh[u \[Beta]1]), b1 (-Sin[u \[Beta]1] - Sinh[u \[Beta]1]), 
    b2*\[Theta]*Sin[y*\[Theta]*\[Beta]1], -d2*\[Theta]*
     Sinh[y*\[Theta]*\[Beta]1]}, {a1 (-Sin[u \[Beta]1] - 
       Sinh[u \[Beta]1]), b1 (-Cos[u \[Beta]1] - Cosh[u \[Beta]1]), 
    b2*\[Alpha]^4*\[Theta]^2*
     Cos[y*\[Theta]*\[Beta]1], -d2*\[Alpha]^4*\[Theta]^2*
     Cosh[y*\[Theta]*\[Beta]1]}, {a1 (-Cos[u \[Beta]1] - 
       Cosh[u \[Beta]1]), 
    b1 (Sin[u \[Beta]1] - 
       Sinh[u \[Beta]1]), -b2*\[Alpha]^4*\[Theta]^3*
     Sin[y*\[Theta]*\[Beta]1], -d2*\[Alpha]^4*\[Theta]^3*
     Sinh[y*\[Theta]*\[Beta]1]}};

testingParam = { \[Theta] -> 0.8, \[Alpha] -> 0.8, u -> 0.15, 
   y -> 1 - 0.15} ;

coeffMatrix = (matrix /. a1 -> 1) /. constants /. testingParam ;

func = Det[coeffMatrix];
NSolve[func == 0 && 0 < \[Beta]1 < 10, \[Beta]1]
$\endgroup$

marked as duplicate by J. M. will be back soon Oct 19 '18 at 0:05

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • $\begingroup$ Since you can use Plot[] on your function, use the MeshFunctions option, like what was done here. $\endgroup$ – J. M. will be back soon Oct 6 '18 at 9:08
  • $\begingroup$ @J.M.issomewhatokay. Thank you for your comment and suggestion. However, I am not such an advanced user. Would you mind to post an answer of how to use the MeshFunctions ? I did not quite understand it from the example following your link. Thanks ! :) $\endgroup$ – james Oct 6 '18 at 9:39
4
$\begingroup$

From: About multi-root search in Mathematica for transcendental equations

f[\[Beta]1_] = Det[coeffMatrix];
zeros = Reap[
   NDSolve[{y'[x] == D[f[x], x], WhenEvent[y[x] == 0, Sow[{x, y[x]}]],
      y[1] == f[1]}, {}, {x, 3, 0.01}]][[-1, 1]]
Plot[f[x], {x, 0, 3}, 
 Epilog -> {PointSize[Medium], Red, Point[zeros]}]

{{2.61534, -5.0246*10^-18}}

enter image description here

$\endgroup$
  • $\begingroup$ Thanks a lot. This seems to work. I still need to understand it though... $\endgroup$ – james Oct 6 '18 at 9:40
3
$\begingroup$
FindRoot[func == 0, {\[Beta]1, 2.566}]
{\[Beta]1 -> 2.61535}
$\endgroup$
  • $\begingroup$ Thanks ! Do you always need an initial guess ? $\endgroup$ – james Oct 6 '18 at 11:25
  • $\begingroup$ When there are many roots, it is advisable to specify the one that you want to get. Otherwise there may be other roots. $\endgroup$ – Alex Trounev Oct 6 '18 at 11:45
  • $\begingroup$ I see, but most of the times I just know that I want to get the first root, but I don't know where it is... $\endgroup$ – james Oct 6 '18 at 11:49
  • $\begingroup$ In this case, this is not the first root, but the second. $\endgroup$ – Alex Trounev Oct 6 '18 at 11:52
  • $\begingroup$ Sorry, yes, I meant the first non-zero root. $\endgroup$ – james Oct 6 '18 at 11:52

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