# How to use results of NDsolve[] for further solving of ODEs?

I have a system of ODEs with 10 eqns. I can solve the first 5 independently. How can I use those results to solve for the remaining 5?

An easy example would be

$\dot{x}=f(x), \quad \dot{y}=g(x,y)$

I can solve for x and now I want to use the interpolating function to solve for y.

Thanks

-
Closely related question: Using the result of Solve in subsequent calculations – Jens Jul 22 '12 at 20:52

This is very straightforward - use the solution "interpolating function" as a regular function. Solve a first-order ordinary differential equation, which gives you sort of decaying oscillations:

sol1 = NDSolve[{y'[x] == y[x] Cos[x + y[x]], y[0] == 1}, y, {x, 0, 30}];


Use it inside another equation. The important thing to remember is that the domain of the previous equations should be equal or contain inside the domain of next equations.

sol2 = NDSolve[{z'[x]== -z[x]^2+First[Evaluate[y[x] /. sol1]], z[0] == 0}, z, {x, 0, 30}]


Plot both. It "makes sense". Indeed 1st solution here plays the role of sort of a driving force, so on the graphs below you see synchronization between oscillations.

Plot[{Evaluate[y[x] /. sol1], Evaluate[z[x] /. sol2]}, {x, 0, 30}, PlotRange -> All]


Now you can do more advanced things, like using also derivative of the "Interpolating Function" inside of new equations:

sol3 = NDSolve[{y'[x] == y[x] Cos[x + y[x]], y[0] == 1}, y, {x, 0, 30}];
sol4 = NDSolve[{z'[x]== -z[x]+First[y[x]/5 + y'[x] /. sol3], z[0] == 0}, z, {x, 0, 30}];
Plot[{Evaluate[y[x] /. sol3], Evaluate[z[x] /. sol4]}, {x, 0, 30},
PlotRange -> All, Filling -> 0]


-
Well, that is what I tried and it didn't work. But after a close look upon my eqns, I noticed that I accidentally deleted some of my eqns. But thanks anyway. At least I knew it had to be something different. – Lisa Jul 23 '12 at 7:29
@Lisa I am glad you figured it out. Welcome to the community! You may want to take a look at this: meta.stackexchange.com/questions/5234/… – Vitaliy Kaurov Jul 23 '12 at 7:45

From the question it seems that you're working with NDSolve (not DSolve) because you're asking about InterpolatingFunction.

As long as you solve all equations for the same domain of the independent variable (let's call it t), it should be possible to use the the results as in this example:

Clear[x, y, t]

xFn =
First[x /. NDSolve[{x'[t] == x[t], x[0] == 1}, x, {t, 0, 1}]]

NDSolve[{y'[t] == 2 xFn[t], y[0] == 1}, y, {t, 0, 1}]

Plot[Evaluate[First[y /. %]][t], {t, 0, 1}]


The main thing is to convert the rule specifying the first solution into a function named xFn.

-

An example:

s = DSolve[Dt[x[t], t] == x[t]^2, x[t], t]
DSolve[Dt[y[t], t] == (x[t] y[t])^2 /. s[[1]], y[t], t]
(*
{{y[t] -> (-t - C[1])/(-1 + t C[2] + C[1] C[2])}}
*)

-
Sorry, I didn't pay attention to the interpolating function part of your question. This answer is for symbolically solved diff eqs. I'll leave it here anyway so it may help others- – Dr. belisarius Jul 22 '12 at 20:43