1
$\begingroup$

I am trying to numerically solve the following coupled DEs:

$\frac{d f(t) }{d t} =-f(t); f(0)=1; \frac{\partial g(t,\tau)}{\partial \tau}=-g(t,\tau); g(t,0)=f^2(t)$

It is easy to solve by hand

$f(t)=e^{-t}; g(t,\tau)=e^{-2t -\tau}$

However I am having trouble solving it in Mathematica. I followed this solution and used the following code:

fSol = NDSolve[{D[f[t], t] == -f[t], f[0] == 1}, f[t], {t, 0, 5}];
ff[t_] := f[t] /. fSol
gSol = NDSolve[{D[g[t, \[Tau]], \[Tau]] == -g[t, \[Tau]],g[t, 0] == ff[t]*ff[t]}, g[t, \[Tau]], {\[Tau], 0, 5}]

But the second NDSolve gave me the following error

NDSolve::ndinnt: Initial condition {<<1>>^2} is not a number or a rectangular array of numbers.

What can I do to resolve this?(In the end I would like to generalize this to two systems of DEs instead of just two DEs as shown here but I imagine the solution would be similar)

$\endgroup$
3
  • $\begingroup$ initial conditions to NDSolve has to be numeric. Change to g[t, 0] ==t and you'll get same error. $\endgroup$
    – Nasser
    Jun 9, 2020 at 6:24
  • $\begingroup$ In the solution I linked, it seems the initial condition doesn't have to be numeric? There the poster gave u[t, 0] == 5*ff[t] as part of the conditions for u[t,x], where ff[t] is a function solved numerically previously. It worked there, why not here? $\endgroup$
    – Lezhi Lo
    Jun 9, 2020 at 7:34
  • $\begingroup$ Sorry, I did not even look at the linked question. I only tried what you have. Will have a look at the linked question now and see why it worked there if I can figure it out. $\endgroup$
    – Nasser
    Jun 9, 2020 at 7:41

1 Answer 1

3
$\begingroup$

To get your solution to work, and avoid the error Initial condition {<<1>>^2} is not a number or a rectangular array of numbers you need to also give the range of t, like this

fSol = NDSolve[{D[f[t], t] == -f[t], f[0] == 1}, {f}, {t, 0, 5}][[1]];
ff = f /. fSol;

gSol = NDSolve[{D[g[t, τ], τ] == -g[t, τ], g[t, 0] == ff[t]*ff[t]}, g, 
         {τ, 0, 5}, {t, 0, 5}]

Mathematica graphics

Becuase now after adding {t, 0, 5} to the second NDSolve, it is happy, since it can evaluate ff[t]*ff[t] as numbers. Without this, you get the error you had.

And it is better to use f instead of f[t] when using NDSolve

$\endgroup$

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.