Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Mathematica: NDSolve question

  1. Oct 23, 2011 #1
    I am solving a PDE using NDSolve. It always give a message like:

    "For the method`IDA, only machine real code is available. Unable to continue with complex values or beyond floating-point exceptions."

    What does this mean? My code is as following.

    NDSolve[{∂t S[z, t] == -I z S[z,t] -I A[z,t], ∂t A[z, t] == -I S[z,t] ,
    S[z, 0] == 0, S[0, t] == -I t2 /2, A[z, 0] == 0, A[0, t] == t}, {S,A}, {t, 0, 1}, {z, 0, 1}, MaxSteps -> 10^6 ]

    Any suggestions? Please Help!
  2. jcsd
  3. Oct 24, 2011 #2
    This http://reference.wolfram.com/mathematica/tutorial/NDSolveIDAMethod.html indicates that one of the possible methods available for numerical solution of differential equations is the IDA method. Either someone didn't implement handling of PDE with complex values or it is not possible to implement handling of complex values. That is what the error message is telling you.

    This http://reference.wolfram.com/mathematica/ref/NDSolve.html (when you click on the orange "More Information" box and scroll down until you find Method) shows you that you can explicitly tell it it what method to use. You might try giving NDSolve an option of Method->"Adams" or one of the other methods and see if one of those will sidestep IDA and happily accept complex values. I don't have your functions so I have not actually tested this.
  4. Oct 24, 2011 #3
    Bill: Those Method options are not available somehow. It is strange--the second link you provided says explicitly that "The differential equations in NDSolve can involve complex numbers. "
    BTW, the above is the complete code. No additional functions are used. Although it is not the original equations I wanted to solve. I want to use this simple example to test NDSolve. Yet it doesn't work.
  5. Oct 24, 2011 #4


    User Avatar
    Gold Member

    When I put in your code:

    Code (Text):
    NDSolve[{D[S[z, t], t] == -I z S[z, t] - I A[z, t],
      D[ A[z, t], t] == -I S[z, t], S[z, 0] == 0, S[0, t] == -I t^2/2,
      A[z, 0] == 0, A[0, t] == t}, {S, A}, {t, 0, 1}, {z, 0, 1},
     MaxSteps -> 10^6]
    I get
    BUT, though it shouldnt matter, if I change {S,A} to {S[z,t],A[z,t]}

    Code (Text):
    NDSolve[{D[S[z, t], t] == -I z S[z, t] - I A[z, t],
      D[ A[z, t], t] == -I S[z, t], S[z, 0] == 0, S[0, t] == -I t^2/2,
      A[z, 0] == 0, A[0, t] == t}, {S[z, t], A[z, t]}, {t, 0, 1}, {z, 0,
      1}, MaxSteps -> 10^6]
    I get
    Which I think is what you want, right? For some reason, if you include the dependent variables in the function specification it works, though I thought Mathematica didn't need it.
  6. Oct 24, 2011 #5
    Hepth: Yes it works! That's weird! Though I did not perform an analytic sln to check, but at the plot of the result looks well behaved. Thanks a lot!
  7. Oct 24, 2011 #6
    I don't think that's all quite right. For one thing, use lower-case letters for user-defined variable names. Also, I don't thing you're specifying enough boundary conditions so Mathematica is just inserting artificial ones. The boundary condtionss at the initial t=0 should agree. Also, looks like the solutions are just zero up there.

    I would recommend giving boundary conditions on both sides (t=0 and t=1) and an initial conditions a(z,0)=f(z), s(z,0)=g(z). This is how I'd code it. I just inserted some reasonable boundary and initial conditions:

    Code (Text):

    mysol=NDSolve[{D[s[z, t], t] == (-I)*z*s[z, t] - I*a[z, t],
       D[a[z, t], t] == (-I)*s[z, t],
       s[z, 0] == z*(z - 1),
       s[0, t] == (-I)*(t^2/2),
       s[1, t] == 0,
      a[z, 0] == (-z)*(z - 1),
      a[0, t] == t,
      a[1, t] == t^2},
      {s, a}, {t, 0, 1}, {z, 0, 1}];

  8. Oct 24, 2011 #7
    Jack: Thanks a lot for the suggestions! About the boundary conditions, I find that if I eliminate S[z, 0] == 0 then Mathematica will work. If I add it, and in addition do as Hepth suggested, it also works. Now in your reply, 6 conditions are specified. Is there any way to justify Mathematica's approximation when there could be a lack of boundary conditions? Because in some cases, it is not possible to know all the boundary conditions.
  9. Oct 25, 2011 #8
    I don't know how Mathematica determines default boundary conditions. However, seems to me if you don't have all the boundary conditions, then the system is ill-posed meaning the solution is not unique. But I'm practical: if you can get it to work to get an answer that you feel is correct then that's good enough for me. :)
  10. Oct 25, 2011 #9
    Jack, thank you for the help and comment!
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook