zzero := proc (u, t0, z, dz) local tn, ts, up; # find root of z(t) = subs(u(t), z) = 0 # using Newton method # using diff(z, t) = subs(u(t), dz) tn := t0; ts := 0.0; while abs((tn - ts)/tn) > 10^(-4) do; ts := tn; up := u(ts); tn := ts - subs(up, z)/subs(up, dz); od; tn; end;