2
$\begingroup$

I have an equation

y''[t] + w^2*Sin[y[t]] == 0

So I'm using DSolve like this:

DSolve[{y''[t] + w^2*Sin[y[t]] == 0, y[0] == yrad, y'[0] == 0}, y[t], t]

Where yrad=Pi/9 I keep getting the ifun,inexand bvfail errors. Can anyone tell me what I'm doing wrong?

Thanks so much

EDIT: Sorry I just realized I left out w=1.4

$\endgroup$
3
  • 1
    $\begingroup$ I just tried Simplify@DSolve[{y''[t] + w^2*Sin[y[t]] == 0, y[0] == Pi/9, y'[0] == 0}, y[t], t] (putting in the value of yrad manually). I get {{y[t] -> -2 JacobiAmplitude[1/2 Sqrt[2 - (-1)^(1/9) + (-1)^(8/9)] t w - EllipticF[\[Pi]/18, 4/(2 - (-1)^(1/9) + (-1)^(8/9))], 4/(2 - (-1)^(1/9) + (-1)^(8/9))]}} $\endgroup$ Commented Feb 2, 2015 at 2:20
  • $\begingroup$ @2012rcampion The OP must be using V9 or earlier, instead of V10. $\endgroup$
    – Michael E2
    Commented Feb 2, 2015 at 2:28
  • $\begingroup$ When I try that with my w plugged in, I continue to get the same errors. $\endgroup$ Commented Feb 2, 2015 at 2:28

1 Answer 1

3
$\begingroup$

Note: This is for V9. DSolve works in V10

Consider the general solution:

sols = DSolve[{y''[t] + w^2*Sin[y[t]] == 0}, y, t]

Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information. >>

(*
  {{y -> Function[{t},
      -2 JacobiAmplitude[1/2 Sqrt[(2 w^2 + C[1]) (t + C[2])^2], (4 w^2)/(2 w^2 + C[1])]]},
   {y -> Function[{t}, 
       2 JacobiAmplitude[1/2 Sqrt[(2 w^2 + C[1]) (t + C[2])^2], (4 w^2)/(2 w^2 + C[1])]]}}
*)

It's not particularly easy to solve for the coefficients C[1] and C[2] for a given IVP. Perhaps you can figure out how to use it, though?

Given concrete numbers for the parameters, values can be found:

cons1 = Block[{w = 1.4},
 FindRoot[{y[0] == Pi/9, y'[0] == 0} /. First[sols] /. 
   Thread[{C[1], C[2]} -> {c1, c2}], {c1, 1}, {c2, 1}]
 ]

FindRoot::cvmit: Failed to converge to the requested accuracy or precision within 100 iterations. >>

(*
  {c1 -> -3.93237 + 3.84299*10^-6 I, c2 -> 0.00280231 + 0.0000103908 I}
*)

Second solution:

cons2 = Block[{w = 1.4},
 FindRoot[{y[0] == Pi/9, y'[0] == 0} /. Last[sols] /. 
   Thread[{C[1], C[2]} -> {c1, c2}], {c1, 1}, {c2, 1}]
 ]
(*
  {c1 -> -3.6836 - 2.3703*10^-16 I, c2 -> 1.1306 + 5.30368*10^-16 I}
*)

We should check the solutions. This is not particularly easy since JacobiAmplitude won't be easy to simplify symbolically. So let's check it numerically. First the particular solutions produced by the above results of FindRoot:

sols0 = MapThread[ReplaceAll, {sols, {cons1, cons2}}];

Next, we'll check the residuals of the differential equation and the initial conditions:

Block[{w = 1.4, yrad = Pi/9},
   {y''[t] + w^2*Sin[y[t]] == 0, y[0] == yrad, y'[0] == 0} /. 
      Equal -> Subtract /. sols0 // FullSimplify
   ] /. t -> RandomReal[1, 10] // Chop
(*
{{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -0.349067 + 0.000311727 I, 0.0000172797 + 0.111239 I},
 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 0, 0}}
*)

Clearly the first solution does not satisfy the initial conditions. Therefore only the second solution is valid.

Last[sols0]
(*
  {y -> Function[{t}, 
     2 JacobiAmplitude[1/2 Sqrt[(2 w^2 - (3.6836 + 2.02417*10^-17 I)) (t + (1.1306 + 
             1.24204*10^-16 I))^2], (4 w^2)/(2 w^2 - (3.6836 + 2.02417*10^-17 I))]]}
*)

Note: The hint in one of the error messages suggests trying Reduce. That may be tried using the following:

Block[{opts, res},
 opts = Options[Solve];
 SetOptions[Solve, Method -> Reduce];
 res = DSolve[{y''[t] + w^2*Sin[y[t]] == 0, y[0] == yrad, y'[0] == 0},
    y[t], t];
 SetOptions[Solve, opts];
 res
 ]

DSolve::bvimp: General solution contains implicit solutions. In the boundary value problem, these solutions will be ignored, so some of the solutions will be lost. >>

(*
  {}
*)

Obviously, it is not successful in this case. By the way, the message here suggested the above method to me. (So the messages, imo, often contain useful hints.)

$\endgroup$
4
  • $\begingroup$ Yeah I guess I'm kinda out of luck because I'm using V9...thanks for your help though! $\endgroup$ Commented Feb 2, 2015 at 2:33
  • $\begingroup$ @user1985351 You're welcome. Note that the above gives a solution for any given parameters; in particular for your case. Is it not clear? $\endgroup$
    – Michael E2
    Commented Feb 2, 2015 at 2:35
  • $\begingroup$ Yeah I see how you got it, but I think it's a bit above my knowledge of Mathematica though, haha. But again, thanks for the help! $\endgroup$ Commented Feb 2, 2015 at 2:58
  • $\begingroup$ @user1985351 You're welcome. Note that 2012rcampion's comment contains a valid solution. Even if you cannot compute it with V9, you could copy the formula. $\endgroup$
    – Michael E2
    Commented Feb 2, 2015 at 3:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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