Re: Using NDSolve for 2-variables function ?

• To: mathgroup at smc.vnet.net
• Subject: [mg31131] Re: Using NDSolve for 2-variables function ?
• From: Reza Malek-Madani <research at usna.edu>
• Date: Fri, 12 Oct 2001 03:36:50 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

Dear Florent:  NDSolve does not solve PDEs directly, but it is very
effective if you combine it with the spectral method or the method of
line.  NDSolve is primarily an ODE initial value solver.

You may want to look at Chapter 13 of my book "Advanced Engineering
Mathematics with Mathematica and MATLAB", 1998. It is an introduction on
how to use the characteristics method in Mathematica. In particular there
is a treatment of the Burgers equation there. If I understood your code
correctly, your f'[u] refers to the derivative of f[u] along
characteristics so your equation seems to be Burgers-like. I would be
happy to look at your quasilinear problem if you send me the
exact initial-boundary value problem.

Sincerely,

-------------------------------------------------------------------------
Research Office, MS 10m         Phone: 410-293-2504 (FAX -2507)
U.S. Naval Academy              Nimitz Room 17 in ERC
Annapolis MD 21402-5031         Email: research at usna.edu

--------------------------------------------------------------------------

On Wed, 10 Oct 2001, Florent Saulnier wrote:

> Dear MathGroup,
> I'm trying to solve a quasi-linear PDE using the method of characteristics.
> For this, I need to calculate a function - for instance f[r_,t_] - by
> NDSolve (I simplified the equation for clarity) and then use it again in
> another differential equation :
>
> Input[1]
> f[r_,t_]=f[r]/.NDSolve[{f'[u]+u*f[u]==0,f[Sqrt[t]]==t^2},f,{u,Sqrt[t],10^9}]
> [[1]][[1]]
>
> ... gives the following error messages :
>          NDSolve::ndnl : Endpoint Sqrt[t] in {u,Sqrt[t],1000000000} is not
> a real number
>          ReplaceAll::reps : {uf[u]+f'[u]==0} is neither a list of
> replacement rules nor a valid dispatch table, and so cannot be used for
> replacing.
> Output[1] Null (f[r]/.uf[u]+f'[u]==0)
>
> If I give the definition of f[r,t] with the sign :=, it gives me the
> correct result at any given point, with the correct boundary conditions :
>
> Input[1]
> f[r_,t_]:=f[r]/.NDSolve[{f'[u]+u*f[u]==0,f[Sqrt[t]]==t^2},f,{u,Sqrt[t],10^9}
> ][[1]][[1]]
> Out[1] Null^2
> Input[2] f[3,5]
> Out[2]  3.3834
> Input[3] f[2,4]
> Out[3]  16
>
> The main problem is that I need f[r,t] for a second equation, and of course
> its resolution cannot be achieved :
>
> Input[1] g[t_]=h[t]/.NDSolve[{h'[u]-f[h[u],u]==0,h[1]==1},h,{u,1,10}][[1]][[1]]
>
>          ...which gives the same error messages :
>          NDSolve::ndnl : Endpoint Sqrt[t] in {u,Sqrt[t],1000000000} is not
> a real number
>          ReplaceAll::reps : {uf[u]+f'[u]==0} is neither a list of
> replacement rules nor a valid dispatch table, and so cannot be used for
> replacing.
>