Differential eq with square root numerical

Click For Summary
The discussion focuses on solving a system of coupled nonlinear ordinary differential equations, specifically addressing issues with numerical solutions that exhibit violent oscillations due to the presence of square root terms. The user encounters complex values when using numerical methods like the fourth-order Runge-Kutta and Euler methods, particularly when the solution approaches an extremum. Suggestions include using Newton's method for better convergence and modifying the numerical approach to maintain the correct path over the Riemann surface of the square root function. A Mathematica code snippet demonstrates a modified Euler method that successfully avoids the branch-point issue, yielding the desired real solution. Overall, the conversation emphasizes the challenges of numerical methods in handling nonlinear equations with square roots and explores alternative strategies for accurate solutions.
xapiens
Messages
3
Reaction score
0
Hi!

I have to solve a system of two coupled nonlinear ordinary differential equations. In the function that defines the system there are terms with square root of the dependant variables. I tried to solve the system numerically but in the nmerical solution I get violent oscillations. Then I realized that the same problem appears in the numerical solution of this very simple exactly solvable differential equation: x'(t)=(1-x(t))^(1/2) with initial condition x(2.1)=0.9975. The exact solution is x(t)=(1/4)(4t-t^2).

It seems to me that the problem is the square root (1-x(t))^(1/2). When the numerical solution approach an extremum, then x'(t) and (1-x(t))^(1/2) both approach zero. But then (1-x(t)) also approaches zero, and in fact (1-x(t)) takes negative values, that makes the square root imaginary.

I explore the situation with the fourth-order Runge-Kutta method with step h=0.2 and in the firt iteration I find the complex value:

x(2.1)=1.00463+ 0.0042963 I

The same happens with the Euler method and the MidPoint Method

Any hint of how to get the correct numerical solution of this equation?

Thanks a lot!
 
Physics news on Phys.org
Can you write the system down.
 
Hi!

Initially I want to get the numerical solution of this very simple system.

x'(t)=(1-x(t))^(1/2) with initial condition x(2.1)=0.9975.Also I note that if I start with initial conditions in the maximum x(2)=1, the RK4 gives contant solution x(t)=1. That is the reason I have to start with x(2.1)=0.9975.
 
You know that you can solve that analytically right? Another way to tackle this problem is by Newton's method, you define your points t_{i}, then you write down your equation at the point t_{i}, this then will lead to you computing the Jacobian and then it should only take a few iterations to get the answer.
 
Yes! I know the exact solution. But I need to get the numerical solution of the differential equation. It is a warm up to a harder equation with similar problems.
 
I found that Newtons method works very well for this kind of thing but you have to have a reasonable first guess though, or at least something random that the iteration can work with.
 
xapiens said:
Any hint of how to get the correct numerical solution of this equation?

Thanks a lot!

You could hard-code the algorithm to follow the correct path over the underlying multisheet of the square root function, or eliminate the multi-function from the differential equation:

x'=\sqrt{1-x}

x''=1/2(1-x)^{-1/2}(-x')

x''=-1/2\frac{x'}{\sqrt{1-x}}

x''=-1/2

Now, in place of your original DE, use:

x''=-1/2;\quad x(t_0)=x_0,\quad x'(t_0)=\sqrt{1-x}
 
Jackmell, I think that this is a little specialised for the problem in hand (although it is a rather nice solution), it is just a warm up problem for him, I think he is asking for a more general method.
 
hunt_mat said:
Jackmell, I think that this is a little specialised for the problem in hand (although it is a rather nice solution), it is just a warm up problem for him, I think he is asking for a more general method.

Let's do the easy one first:

xapiens said:
Yes! I know the exact solution. But I need to get the numerical solution of the differential equation. It is a warm up to a harder equation with similar problems.

The code below is the first approach in Mathematica using a modified Euler-method which maintains the correct path over the multisheet (Riemann surface of the complex square root).


Code:
platch = True; 
xold = 0; 
thet = 0; 
a = 1; 
dh = 0.01; 
myvals = Table[temp = 1 - xold; 
     If[platch == True && temp < 0, 
      {xold = 2 - xold; platch = False; a = -1; }]; 
     xnew = xold + a*Sqrt[1 - xold]*dh; 
     xold = xnew; {thet += dh, xnew}, {n, 1, 500}]; 
ListPlot[myvals, PlotStyle -> Red, Joined -> True]

And that gives the desired answer. Anyway, I think the problem with a standard numerical analysis of this DE, is that the algorithm is passing through the branch-point where the two branches of the root meet and since delta h is finite, it over-shoots the branch-point landing on a surface which has an imaginary component. In the algorithm above, I force the algorithm to follow a path which is always real. Maybe though I don't have this quite presented right but that's what I'm sticking with for now.

How about posting the harder one xapiens.
 
Last edited:

Similar threads

  • · Replies 1 ·
Replies
1
Views
395
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 6 ·
Replies
6
Views
3K