ode_root solucionador de EDOs com busca de raízes

## Seqüência de Chamamento

    [y,rd,w,iw] = ode("root",y0,t0,t [,rtol [,atol]],f [,jac],ng,g [,w,iw])

## Parâmemtros

y0

  vetor de reais ou matriz (condições iniciais)

t0

  escalar real (tempo inicial)

t

  vetor de reais (tempos nos quais a solução é computada).

f

  função externa i.e. função, string ou lista.

rtol, atol

  constantes reais ou vetores reais com o mesmo tamanho que `y`.

jac

  função externa i.e. função, string ou lista.

ng

  inteiros.

g

  função externa i.e. função, string ou lista.

y

  a real vector or matrix. The solution.

rd

  a real vector.

w, iw

  vetores de reais. See ode() optional output

## Descrição

Com esta sintaxe (primeiro argumento igual a `"root"`) `ode` computa a solução da EDO `dy/dt=f(t,y)` até que o estado `y(t)` cruze a superfície `g(t,y)=0`.

`g` deve fornecer a equação da superfície. É uma função externa, i.e. uma função com sintaxe especificada, ou o nome de uma subrotina FORTRAN ou função C (string) com seqüência de chamamento especificada ou uma lista.

Se `g` é uma função, a sintaxe deve ser como segue:

    z = g(t,y)

onde `t` é um escalar real (tempo) e `y` um vetor de reais (estado). Ela retorna um vetor de tamanho `ng` que corresponde às `ng` restrições. Se `g` é um string, ele se refere a uma subrotina FORTRAN ou uma função C, com a seguinte seqüência de chamamento: `g(n,t,y,ng,gout)` onde `ng` é o número de restrições e `gout` é o valor de `g` (saída do programa). Se `g` é uma lista, as mesmas convenções para `f` se aplicam (ver ajuda de ode).

A saída `rd` é um vetor `1 x k` . A primeira entrada contém o tempo de parada. Outras entradas indicam que componentes de `g` possuem sinal trocado. `k` maior que 2 indica que mais de uma superfície (`(k-1)` superfícies) foram simultaneamente atravessadas.

Outros argumentos e opções são os mesmos que para `ode`, ver a página de ajuda de ode.

## Exemplos

    // Integração da equação diferencial
    // dy/dt=y , y(0)=1, e acha o tempo mínimo t tal que y(t)=2
    deff("ydot = f(t,y)", "ydot=y")
    deff("z = g(t,y)", "z=y-2")
    y0 = 1; ng = 1;
    [y, rd] = ode("root", y0, 0, 2, f, ng, g)

    deff("z = g(t,y)", "z=y-[2;2;33]")
    [y, rd] = ode("root", 1, 0, 2, f, 3, g)

## Ver Também

- ode
- ode_optional_output
- ode_discrete
- dasrt
- daskr