Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

As my differential function is relatively complex I do not want to do the detour of finding an explicit solution via DSolve for it but rather use an FindRoot-like approach by guessing initial starting values.

Following example:

Let z[t] be the differential where the start and end values are known:

z[0]=z0 and z[tmax]=zend, but the end time tmax is unknown.

The (simplified) differential (where the paths of l2[t]and l3[t] as well as their end values l2final and l3final are well-defined) is:

DSolve[{z[0] == z0, z[tmax] == zend, z'[t]==f[l20[t],l3[t]],l2[tmax]==l2final, l30[tmax]==l3final}, z[t],t]

The only unkown is tmax. So I don't want to do the DSolve described as I don't care about an explicit solution of z[t]. But I rather want to search for something like:

FindRoot[z[t]-zend,{t,0,100}]

Does anybody have an idea how to combine both approaches EFFICIENTLY?

Btw: z[t] is continously increasing as well as l2[t] and l3[t]

share|improve this question

1 Answer 1

It helps to give code that can reproduce you're problem, but here's a guess at what you're after. I removed the conditions l2[tmax]==l2final, l30[tmax]==l3final because if l2 and l3 are well defined and tmax is defined by z[tmax] == tend, then l2final and l3final are determined by the result.

WhenEvent is the way to solve z[t] == zend.

f[x_, y_] := x + y^2/4;
l20[t_] := t + Cos[4 t]^2; l3[t_] := 2 t + Sin[2 t];
z0 = 10.;
zend = 100.;
sol = First @ NDSolve[{z[0] == z0, z'[t] == f[l20[t], l3[t]]
                    WhenEvent[z[t] == zend, tmax = t; "StopIntegration"]}, 
        z[t], {t, 0, Infinity}]

tmax

(*
   InterpolatingFunction[{{0.,1.76425}},<>]
   5.97248
*)

Plot[sol[t], Evaluate[{t, Sequence @@ First@sol["Domain"]}]]

Mathematica graphics

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.