# 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.

w, iw

  vetores de reais

ng

  inteiros.

g

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

## 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("roots",y0,0,2,f,ng,g)

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

## Ver Também

- dasrt
- ode