Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Difficulty with NDSolve (and DSolve)

13 views
Skip to first unread message

KK

unread,
Jan 2, 2010, 5:04:48 AM1/2/10
to
Hi,

I am trying to numerically solve a differential equation. However, I
am encountering difficulty with Mathematica in generating valid
numerical solutions even for a special case of that equation.

The differential equation for the special case is:
F'[x] == - (2-F[x])^2/(1-2 x + x F[x]) and
F[1]==1.
These equations are defined for x in (0,1). Moreover, for my context,
I am only interested in solutions with F[x] in the range <1.

Even before I used Mathematica, I had computed the solution to the
differential equation as the solution to the following : x (2-F[x]) -
Log[2-F[x]]==1. For any given x in (0,1), there are two values of F
[x] that satifsy the equation. One of them is always less than 1, and
the other is F[x]= 2 + (ProductLog[E^(I (I + \[Pi])) x])/x which is
always greater than 1. For example, when x=0.85, the solutions are F
[x]=0.2979 and F[x]=1.32407. As mentioned earlier, I am only
interested in the first solution.

Both DSolve and NDSolve seem to provide only the second solution and
not the first one. When using DSolve, it gives out a warning that
there may be multiple solutions but that's about it. Is there an
option or something that I can set with NDSolve (or even DSolve) to
generate the solutions of interest to me?

Below is the relevant set of Mathematica code and the corresponding
outputs. I would greatly appreciate your help in this regard.

Thanks,
KK


------------------
In[1]:= DSolve[{ -((-2 + F[x])^2/(1 - 2 x + x F[x])) == F'[x],
F[1] == 1}, F[x], x]

During evaluation of In[1]:= InverseFunction::ifun: Inverse functions
are being used. Values may be lost for multivalued inverses. >>

During evaluation of In[1]:= Solve::ifun: Inverse functions are being
used by Solve, so some solutions may not be found; use Reduce for
complete solution information. >>

During evaluation of In[1]:= Solve::ifun: Inverse functions are being
used by Solve, so some solutions may not be found; use Reduce for
complete solution information. >>

Out[1]= {{F[x] -> (2 x + ProductLog[E^(I (I + \[Pi])) x])/x}}
------------------

(*Sample solution*)
In[2]:= Solve[(1 == (x (2 - F[x]) - Log[2 - F[x]] /. F[x] -> F) /.
x -> 0.9), F]

During evaluation of In[2]:= InverseFunction::ifun: Inverse functions
are being used. Values may be lost for multivalued inverses. >>

During evaluation of In[2]:= Solve::ifun: Inverse functions are being
used by Solve, so some solutions may not be found; use Reduce for
complete solution information. >>

Out[2]= {{F -> 0.297987}, {F -> 1.32407}}

--------------------
(*Please note I am using F[0.9999]=1 as the initial condition in the
NDSolve below. \
Otherwise, I end up with a warning that "Infinite expression 1/0. \
encountered. I had also used the same initial condition with DSolve \
and the results were similar.*)

In[3]:= NumSol =
NDSolve[{ -((-2 + F[x])^2/(1 - 2 x + x F[x])) == F'[x], F[.9999] ==
1}, F, {x, 0, 1}]

During evaluation of In[3]:= NDSolve::ndsz: At x ==
0.9999000049911249`, step size is effectively zero; singularity or
stiff system suspected. >>

Out[156]= {{F -> \!\(\*
TagBox[
RowBox[{"InterpolatingFunction", "[",
RowBox[{
RowBox[{"{",
RowBox[{"{",
RowBox[{"0.`", ",", "0.9999000049911249`"}], "}"}], "}"}],
",", "\<\"<>\"\>"}], "]"}],
False,
Editable->False]\)}}
---
(* I have omitted the plot here but it generates only the second
result*)
In[157]:= Plot[{Evaluate[F[x] /. NumSol]}, {x, .33, 1}]
-----------------------

0 new messages