cap1 edo

51
  6 Capítulo 1. Introdução 1.1. Teoremas e Comentários  Definição1.0.0 : Uma função f(x,y) satisfaz a condição de Lipschitz na variável y sobre o conjunto D 2 , se existe uma constante L>0, tal que é válida a propriedade: |f(t,y 1 ) - f(t,y 2 )| L | y 1 -y 2 | sempre (t,y 1 ), (t,y 2 )  D. L é chamada constante de Lipschitz para f.  Lema1.0.1 : Sejam s e t numeros reais positivos e {a i  } é uma seqüência que satisfaz a 0  >= -t/s e a i+1 <=(1+s) a i  + t para i =0,1,2, ..., k então a i+1 <= e (i+1)s  (t/s + a 0  ) - t/s Usando o lema anteriormente citado vamos mostrar a prova do teorema 1.0.2 que nos diz que: Teorema 1.0.2 : Suponha que f é uma função contínua e satisfaz a condição de Lipschitz com constante L no conjunto D = {(t,y) | a<= t <=b ,- < y <  } e que a constante M existe com a propriedade | y’’(t) | <= M para todo t ε [a,b] Consideramos também y(t) como uma única solução para o problema de valor inicial

Upload: jmarcellopereira

Post on 05-Nov-2015

212 views

Category:

Documents


0 download

DESCRIPTION

.

TRANSCRIPT

  • 6

    Captulo 1. Introduo

    1.1. Teoremas e Comentrios

    Definio1.0.0 : Uma funo f(x,y) satisfaz a condio de Lipschitz na varivel y sobre o

    conjunto D 2, se existe uma constante L>0, tal que vlida a propriedade:

    |f(t,y1) - f(t,y2)| L | y1 -y2| sempre (t,y1), (t,y2) D. L chamada constante de Lipschitz para f.

    Lema1.0.1 : Sejam s e t numeros reais positivos e {ai } uma seqncia

    que satisfaz a0 >= -t/s e

    ai+1

  • 7

    y = f(t,y) a

  • 8

    | f(t,y1) - f(t,y2)|

  • 9

    O algoritmo Range Kutta de quarta ordem para sistemas de equaes diferenciais

    de primeira ordem trabalha da mesma maneira que o Range Kutta tradicional de quarta

    ordem , s com algumas alteraes .

    Em cada um dos algoritmos anteriormente citados (rk4 tradicional e rk4 para

    sistemas )

    existem condies iniciais comuns que o usurio dever entrar como por exemplo:

    Os valores de a e b sendo que a diferena b-a representar o intervalo onde a varivel

    t ir variar.

    A varivel N que dividir o intervalo anteriormente citado em N partes iguais .

    obs: O valor (b-a)/N nos dar o valor h.

    Outras condies iniciais do rk4 para sistemas devem ser entradas, s que estas so

    diferentes do rk4 tradiconal:

    Enquanto para o rk4 tradicional existe apenas uma equao diferencial,para o rk4 de

    sistemas existem m equaes.

    Enquanto para o rk4 tradicional existe apenas uma condio inicial , para o rk4 de

    sistemas existem m condies iniciais.

    Aps esta fase de inicializao de variveis, o algoritmo atribui wj =j onde j so as

    condies iniciais e j varia de 1 at o nmero de equaes diferenciais de primeira ordem

    entradas.

    Depois disso , o algoritmo entra num lao que percorre todo o intervalo b-a ,ou seja, a

    variavel t comecar com o valor a e a cada passo ser acrescida a ela o valor do passo h.

  • 10

    Dentro do lao anterior sero calculados os vrios k1,k2,k3,k4 para cada equao

    diferencial dada.Assim,cada equao ter seus prprios ks em cada passo.

    Uma importante observao que para o clculo de um ki+1 necessrio o valor do ki

    anterior .

    De posse dos valores de ks de todas as equaes a cada passo calcula-se os valores

    de ws.Assim, temos valores intermedirios de ws a cada passo.

    O algoritmo tem sua parada determinada quando o valor de t chegar ao extremo

    superior do intervalo ,ou seja, b .

    1.3. Mtodos de Passos Variveis

    A tcnica previsor-corretor sempre gera duas aproximaes para cada passo,

    ento ela a candidata natural para adaptao de controle de erros.

    Para demonstrar o procedimento para controle de erro, foi construdo um mtodo

    previsor-corretor com tamanho de passos variveis.]

    Este algoritmo, a princpio, resolve a equao utilizando o Runge Kutta de Quarta

    ordem para que a partir de sua resposta, o algoritmo faa o refinamento do erro cometido.

    A cada passo ser calculado o valor previsto e o valor corrigido. O clculo do

    erro depende diretamente desses dois fatores. Se esse erro for muito grande, ou

    seja,maior que a tolerncia desejada, ento realizado mudanas em algumas variveis

    para que o erro no prximo passo reduza. A cada passo , a preciso tende a aumentar.

    Com o clculo do valor corrigido atravs do uso valor previsto, obtm-se um valor que

    mais se aproxima da resposta.

  • 11

    A cada passo o RK4 chamado, mas com uma diferena. Substitue um ponto em

    relao a ltima chamada, sendo que este ponto o calculado atravs do mtodo

    previsor-corretor, ou seja, a tendncia que o novo resultado do RK4 seja um pouco

    mais satisfatrio, e que o clculo do erro dimunua. Este processo continua at que o erro

    seja muito pequeno, ou seja, at que se consiga refin-lo.

    1.4. Estabilidade

    Um mtodo estvel aquele que depende continuamente dos estados iniciais, ou

    seja, so estveis se quando pequenas mudanas nas aproximaes subsequentes.

    Definio 1: Um mtodo de equao diferencial de um passo com erro local i(h) no i-

    simo passo dito ser consistente com a equao diferencial se

    Lim max | i(h) | = 0 h->0 1

  • 12

    aproximado por um mtodo de um passo da forma

    W0 =

    Wi+1 = Wi + h(ti,Wi,h)

    Suponha tambm que um nmero h0 > 0 existe (t,W,h) contnu e satisfaz a

    condio de Lipschitz* na varivel com constante Lipschitz L sobre o conjunto D={

    (t,W,h) | a t b, -< W< , 0 hh0 }. Ento

    1) o mtodo estvel;

    2) o mtodo convergente, se e somente se consistente; que se e somente se

    (t,W,h) = f(t,y), para todo a t b;

    3) se para cada i=1,2,3...N, o erro local i(h) satisfaz |i(h)| (h), sempre que 0 hh0 ento

    | y(ti) - i | ( (h)/L ) exp(L(ti - a))

    1.5. Mtodos de Mltiplos Passos

    Estes mtodos, assim como a famlia Runge-Kutta, tambm so derivados a

    partir de sries de Taylor.

    O que caracteriza estes mtodos que eles usam informaes sobre a soluo em

    mais de um ponto.

  • 13

    Supondo inicialmente conhecida as aproximaes para y(x) em x0, x1, ... , xn e

    que xi +1 - xi =h, queremos aproximar a soluo da equao diferencial y=f(x,y) de xn at

    xn + 1

    xn + 1 xn + 1

    y dx = f(x,y(x)) dx xn xn

    integrando o 1a. membro, xn + 1

    y(xn + 1) - y(xn) = f(x,y(x)) dx xn

    O problema agora reside ento em aproximar uma soluo para a integral acima, para

    encontrar uma soluo aproximada. Antes de prosseguir a discusso importante ter em

    mente dois conceitos:

    1.5.0 MTODO EXPLCITO: Os mtodos desta classe so obtidos quando trabalhamos

    com xn,xn-1,...,xn-m, ou seja o clculo de yn + 1 tem forma explcita em funo dos

    outros (para calcular yn + 1, uso somente yn, yn-1, yn-2, yn-3, por exemplo se o mtodo

    escolhido for de 3 passos).

    1.5.1 MTODO MPLICITO: Nestes tipos de mtodos na frmula que calcula yn + 1,

    deve-se entrar com o valor de yn + 1, ou seja a frmula no explcita, o que gera a

    grande dificuldade destes destes mtodos.

    Para uma melhor compreenso destes mtodos acompanhe alguns exemplos da famlia Adams de mltlipos passos, seguidos logo abaixo de um breve comentrio, lembrando ao leitor que uma reflexo mais profunda sobre estes mtodos recomendada.

    1.6. Mtodos de Adams-Bashforth

    1.6.0 Mtodo de Adams-Bashforth de 2 passos (2a. ordem)

    w0= , w1= 1

  • 14

    wi+1 =wi + h/2[3f(ti,wi)-f(ti-1,wi-1)

    1.6.1 Mtodo de Adams-Bashforth de 3 passos (3a. ordem)

    w0= , w1= 1, w2= 2

    wi+1 =wi + h/12[23f(ti,wi)-16f(ti-1,wi-1) +5 f(ti-2,wi-2)]

    1.6.2 Mtodo de Adams-Bashforth de 4 passos (4a. ordem)

    w0= , w1= 1, w2= 2 , w3= 3

    wi+1 =wi + h/24[55f(ti,wi)-59f(ti-1,wi-1) +37f(ti-2,wi-2) - 9 f(ti-3,wi-3)]

    1.6.3 Mtodo de Adams-Bashforth de 5 passos (5a. ordem)

    w0= , w1= 1, w2= 2 , w3= 3 , w4= 4

    wi+1 =wi + h/720[1901f(ti,wi)-2774f(ti-1,wi-1) +2616(ti-2,wi-2) - 1274 f(ti-3,wi-3)

    +251 f(ti-4,wi-4)]

    1.7 Mtodos de Adams-Moulton

    1.7.0Mtodo de Adams-Moulton de 2 passos (2a. ordem)

    w0= , w1= 1

    wi+1 =wi + h/12[5f(ti+1,wi+1)+ 8(ti,wi) -(ti-1,wi-1) ]

    1.7.1 Mtodo de Adams-Moulton de 3 passos (3a. ordem)

    w0= , w1= 1, w2= 2

    wi+1 =wi + h/24[9f(ti+1,wi+1) + 19f(ti,wi) - 5 (ti-1,wi-1) + f(ti-2,wi-2)]

    1.7.2 Mtodo de Adams-Moulton de 4 passos (4a. ordem)

    w0= , w1= 1, w2= 2 , w3= 3

  • 15

    wi+1 =wi + h/720[251f(ti+1,wi+1) + 646f(ti,wi) - 264 (ti-1,wi-1) + 106f(ti-2,wi-2) - 19

    f(ti-3,wi-3)]

    1.8. Comentrio

    Os mtodos de Adams-B.so todos mtodos explcitos e no auto-inicializveis,

    sendo preciso de alguma forma (usando R.K, por exemplo), calcular os m-primeiros wis,

    quando se usa um mtodo Adams-B de m-passos.Para calcular wj estes mtodos usam os

    valores anteriores de wj-1,wj-2,...,wo. Ento o esforo computacional nestes tipos de

    algoritmos se residem em apenas calcular o valor da funo em cada ponto. J os

    mtodos de Adams-M. se caracterizam por serem fechados (implcitos). A grande

    dificuldade deste mtodo usar uma frmula implcita , ou seja para calcular a

    aproximao em um ponto, a frmula empregada j usa este valor, o que torna o

    problema computacionalmente invivel, pois no se consegue uma recurssividade. A

    maneira encontrada para contornar este problema por exemplo usar um mtodo

    explcito para auxiliar.

    De maneira geral o mdulo do erro para Adams-M. menor que Adams-B. , mas

    depende fundamentalmente se o problema estar bem condicionado e a escolha do melhor

    mtodo para aquele problema.

    1.9. Mtodos Previsor-Corretor

    Este mtodo usa a frmula explcita e implcita para aproximar uma soluo. A

    idia primeira era usar a frmula implcita para aproximar uma soluo, mas isso esbarra

    no problema acima mencionado, ou seja, para calcular yn + 1 uso o valor de xn + 1. Para

  • 16

    contornar esta situao obtm-se o valor de yn + 1, atravs de uma aproximao por um

    mtodo explcito (convenientemente escolhido). De posse desta aproximao posso

    agora usar a frmula impcita, substituindo nesta este valor e encontrando assim uma

    nova aproximao muito melhor para yn + 1.

    A forma explcita primeiramente usada chamada de um previsor; e a forma

    implcita chamada de corretor. Da o nome previsor-corretor.

    Quando o previsor e o corretor usado so da mesma ordem e a escolha do h

    conveniente a preciso de algoritmo muito boa.

    O esforo computacional demandado dobrado em relao aos mtodos acima

    apresentados , pois para calcular o valor duas vezes em em cada ponto: o primeiro

    calculo estima o valor, o segundo corrige este valor.

    1.10. Modelo para a dinmica de populaes (presa-predador)

    Um modelo muito simples aquele em que o crescimento (ou decaimento) da

    populao proporcional ao nmero de membros da mesma. Escrevendo na forma de

    equao diferencial ordinria (edo):

    dNdt

    (t) = rN(t), N(0) = No

    sendo: dN/dt a variao da populao em relao ao tempo

    No a populao inicial

  • 17

    R a taxa de variao

    Porm, este modelo est longe da realidade, pois sabemos que, aps um certo

    perodo de tempo, a populao ser to grande que surgiro problemas (limitao de

    alimentos, espao etc).

    Surgiu ento a equao logstica

    dNdt

    (t) = f(N) N(t), N(0) = No

    na qual a taxa de variao depende da populao e dada por f(N). Vamos construir uma

    funo f(N) que tenha as propriedades desejadas:

    a) a populao cresce exponencialmente quando ela for pequena;

    b) o crescimento desacelera conforme a populao vai crescendo;

    c) observamos mortalidade quando a populao for muito grande. Matematicamente,

    escrevemos isso como f(n) < 0 quando N >> 1.

    Um modelo seria a funo:

    f(N) = r [1 - (N/M)]

    sendo: M o ponto a partir do qual observamos a mortalidade de indivduos

    Um modelo um pouco mais complexo dado a seguir:

    dNdt

    (t) = { -r [ 1 - (N/M1)] [ 1 - (N/M2)] } N(t), N(0) = No

  • 18

    Finalmente, estudaremos um modelo no qual duas populaes competem para

    sobreviver. Sejam N1(t) e N2(t) a populao de presas e predadores, respectivamente.

    Suporemos que as presas tem um suprimento abundante de alimento, enquanto que o

    predador alimenta-se das presas. Vamos tambm assumir que um bilogo nos forneceu as

    seguintes hipteses(todas as constantes ki, i = 1, 2, 3, 4 dadas abaixo so positivas):

    1.10.0 PRESA:

    Taxa de natalidade: proporcional populao naquele instante: k1N1(t)

    Taxa de mortalidade: depende da populao das presas assim como dos predadores. Por

    simplicidade, adotaremos a expresso: -k2N1(t)N2(t)

    PREDADOR:

    Taxa de natalidade: proporcional populao de predadores assim como a das presas:

    k3N1(t)N2(t)

    Taxa de mortalidade: proporcional populao de predadores: -k4N2(t)

    Colocando essas informaes na forma de edos, temos o sistema

    dNdt

    1 = k1N1 - k2N1N2

    dNdt

    2 = k3N1N2 - k4N2

    com N1(0) = N10 e N2(0) = N20.

    1.11. Exerccios e Programas

    Exerccio 4.1 da apostila Curso Mtodos Numricos - Notas de Aula

  • 19

    Programa desenvolvido em Borland C++ para a soluo deste problema, sendo que o

    programa abaixo genrico possuindo a opo de resoluo atravs dos mtodos de Euler

    (Runge-Kutta 1a. ordem), Rungr-Kutta 2a. ordem e Runge-Kutta de 4a. ordem

    /* Programa para a resolucao de equacoes diferenciais,

    atraves dos metodos :

    - Runge-Kutta 1a. ordem (Euler)

    - Runge-Kutta 2a. ordem

    - Runge-Kutta 4a. ordem

    #include

    #include

    #include

    #include

    int a,b,n,i;

    float h,t0,t[11],w1[11],w4[11],w2[11],ya,g1,g2,k1,k2,k3,k4;

    char opc;

    FILE *runge1,*runge2,*runge4;

    float function(float x,float y)

    {

    return(x-y+2);

    }

    void main(void)

  • 20

    { clrscr();

    printf("Escolha o metodo que deseja usar : \n");

    printf("1->para Runge-Kutta1;2->para Runge-Kutta2;3->para Runge-Kutta4\n");

    scanf("%s",&opc);

    printf("\nEntre com o numero de iteracoes : ");

    scanf("%i",&n);

    printf("\nEntre com o valor inicial y(0) : ");

    scanf("%f",&w1[0]);

    printf("\nEntre com o inicio do intervalo : ");

    scanf("%i",&a);

    printf("\nEntre com o final do intervalo : ");

    scanf("%i",&b);

    printf("\nEntre com o passo de integracao : ");

    scanf("%f",&h);

    w2[0] = w1[0];

    w4[0] = w1[0];

    switch (opc)

    {

    case '1':{

    runge1=fopen("rk1.dat","wt");

    t[0]=a;

    fprintf(runge1,"%2.4f,%2.4f\n",t[0],w1[0]);

  • 21

    for (i=1;i

  • 22

    } fclose(runge2);

    for(i=0;i

  • 23

    } //close1

    }

    }

    Grfico de sada do programa em Borland C++ para h = 0.1 e Mtodo Runge-Kutta 1a.

    Ordem (Euler) (plotado no GRAPHER)

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Grfico de sada do programa em Borland C++ para h = 0.01 e Mtodo Runge-

    Kutta 1a. Ordem (Euler) (plotado no GRAPHER)

  • 24

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Grfico de sada do programa em Borland C++ para h = 0.001 e Mtodo

    Runge-Kutta 1a. Ordem (Euler) (plotado no GRAPHER)

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Grfico de sada do programa em Borland C++ para h = 0.1 e Mtodo Runge-

    Kutta 2a. Ordem (plotado no GRAPHER)

  • 25

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Grfico de sada do programa em Borland C++ para h = 0.01 e Mtodo Runge-Kutta 2a. Ordem (plotado no GRAPHER)

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Grfico de sada do programa em Borland C++ para h = 0.001 e Mtodo

    Runge-Kutta 2a. Ordem (plotado no GRAPHER)

  • 26

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Grfico de sada do programa em Borland C++ para h = 0.1 e Mtodo Runge-

    Kutta 4a. Ordem (plotado no GRAPHER)

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Grfico de sada do programa em Borland C++ para h = 0.01 e Mtodo Runge-

    Kutta 4a. Ordem (plotado no GRAPHER)

  • 27

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Grfico de sada do programa em Borland C++ para h = 0.001 e Mtodo

    Runge-Kutta 4a. Ordem (plotado no GRAPHER)

    1.800

    1.900

    2.000

    2.100

    2.200

    2.300

    2.400

    Esquema SIMULINK para a soluo da equao diferencial

  • 28

    +

    -

    +

    Somatorio das variaveis

    2Constante

    ySaida para y1/s

    Integracao paraobter y

    x

    Saida para x

    Grafico de X/Y

    [T,U]Matriz contendoos valores de x

    Gr

    Grfico de sada do esquema SIMULINK para h=0.1.

    0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 11.5

    1.6

    1.7

    1.8

    1.9

    2

    2.1

    2.2

    2.3

    2.4

    2.5

    X Axis

    Y Ax

    is

    X Y Plot

    Grfico de sada do esquema SIMULINK para h = 0.01

  • 29

    0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 11.5

    1.6

    1.7

    1.8

    1.9

    2

    2.1

    2.2

    2.3

    2.4

    2.5

    X Axis

    Y Ax

    is

    X Y Plot

    Grfico de sada do esquema SIMULINK para h = 0.001

    0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 11.5

    1.6

    1.7

    1.8

    1.9

    2

    2.1

    2.2

    2.3

    2.4

    2.5

    X Axis

    Y Ax

    is

    X Y Plot

    Exerccio 4.2 da apostila Curso Mtodos Numricos - Notas de Aula

    Programa desenvolvido em Borland C++ para a soluo deste problema

    /* Exercicio 2 : RK4

    Linguagem : Borland C++ */

  • 30

    #include

    #include

    #include

    #include

    double f1(double,double,double);

    double f2(double,double,double);

    //double f3(double,double,double);

    float x0,y0,xn,n,x,h;

    int i,j;

    float y[3];

    float k[4][3];

    float w[4]; //valores inicias das equaes diferenciais

    int t;

    void main()

    {

    clrscr();

    FILE *arq1,*arq2,*arq3;

    printf("Entre com o valor de x(0)=a : ");

    scanf("%f",&x0);

    printf("Entre com o valor de y1(0) : ");

  • 31

    scanf("%f",&w[1]);

    printf("Entre com o valor de y2(0) : ");

    scanf("%f",&w[2]);

    printf("Entre com o valor de y3(0) : ");

    scanf("%f",&w[3]);

    printf("Entre com o valor de x(n)=b : ");

    scanf("%f",&xn);

    printf("Entre com o valor de n : ");

    scanf("%f",&n);

    h=(xn-x0)/n;

    x=x0;

    //double n = 0;

    arq1= fopen("V'xt.DAT","wt");

    arq2= fopen("Vxt.DAT","wt");

    arq3= fopen("VxV'.DAT","wt");

    for (i=0;i

  • 32

    k[2][1] =h*f1(x+h/2,w[1]+k[1][1]/2,w[2]+k[1][2]/2);

    k[2][2] =h*f2(x+h/2,w[1]+k[1][1]/2,w[2]+k[1][2]/2);

    // k[2][3]

    =h*f3(x+h/2,w[1]+k[1][1]/2,w[2]+k[1][2]/2,w[3]+k[1][3]/2);

    // 3 for

    k[3][1] =h*f1(x+h/2,w[1]+k[2][1]/2,w[2]+k[2][2]/2);

    k[3][2] =h*f2(x+h/2,w[1]+k[2][1]/2,w[2]+k[2][2]/2);

    // k[3][3]

    =h*f3(x+h/2,w[1]+k[2][1]/2,w[2]+k[2][2]/2,w[3]+k[2][3]/2);

    // 4 for

    k[4][1] =h*f1(x+h/2,w[1]+k[3][1]/2,w[2]+k[3][2]/2);

    k[4][2] =h*f2(x+h/2,w[1]+k[3][1]/2,w[2]+k[3][2]/2);

    // k[4][3]

    =h*f3(x+h/2,w[1]+k[3][1]/2,w[2]+k[3][2]/2,w[3]+k[3][3]/2);

    // 5 for

    w[1]=w[1] + (k[1][1] +2*k[2][1] +2*k[3][1] +k[4][1])/6;

    w[2]=w[2] + (k[1][2] +2*k[2][2] +2*k[3][2] +k[4][2])/6;

    // w[3]=w[3] + (k[1][3] +2*k[2][3] +2*k[3][3] +k[4][3])/6;

    x=x0 +i*h;

    printf("\nValores de x,w[1],w[2]:

    :%3.3f,%3.3f,%3.3f",x,w[1],w[2]);

    fprintf(arq1,"%3.3f,%3.3f\n",x,w[1]);

    fprintf(arq2,"%3.3f,%3.3f\n",x,w[2]);

  • 33

    fprintf(arq3,"%3.3f,%3.3f\n",w[1],w[2]);

    }

    getch();

    fclose(arq1);

    fclose(arq2);

    fclose(arq3);

    }

    double f1(double x,double y1,double y2)

    {

    return(y2);

    }

    double f2(double x,double y1,double y2)

    {

    return(((-1/3)*y1-4*y2)/5);

    }

    /*double f1(double x,double y1,double y2)

    {

    return(((-1/3)*y1-4*y2)/5);

    }*/

    Grfico de sada do programa em Borland C++ para h = 0.001 (plotado no

    GRAPHER)

  • 34

    Grfico da Acelerao

    0 50 100 150 200-0.5

    0

    0.5

    Grfico da Velocidade

    0 50 100 150 200-1.5

    -1

    -0.5

    0

    0.5

    1

    1.5

    2

    Grfico da Velocidade x Acelerao

  • 35

    -2 -1 0 1 2-2

    -1

    0

    1

    2

    3

    Esquema SIMULINK para a soluo da equao diferencial

    -

    -

    -

    Sum

    [T,U]From

    Workspace

    1/sIntegrator

    0.Gain

    1/sIntegrator1

    4

    Gain2

    0.Gain1

    V x V`

    du/dtDerivative

    velocidade

    f(u)Fcn

    Aceleracao1

    Grficos de sada do esquema SIMULINK para h = 0.001

    Grfico da Acelerao

  • 36

    0 50 100 150 200-0.5

    0

    0.5

    Time (second)

    Grfico daVelocidade

    0 50 100 150 200-1.5

    -1

    -0.5

    0

    0.5

    1

    1.5

    2

    Time (second)

    Grfico da Velocidade x Acelerao

  • 37

    -2 -1 0 1 2-2

    -1

    0

    1

    2

    3

    X Axis

    Y Ax

    is

    X Y Plot

    Exerccio 4.3 da apostila Curso Mtodos Numricos - Notas de Aula

    Programa desenvolvido em Borland C++ para a soluo deste problema.

    /* Exercicio 3 : RK4

    Linguagem : Borland C++ */

    #include

    #include

    #include

    #include

    double f1(double,double,double,double);

    double f2(double,double,double,double);

    //double f3(double,double,double,double);

    float x0,y0,xn,n,x,h;

    int i,j;

  • 38

    float y[3];

    float k[4][3];

    float w[4]; //valores inicias das equaes diferenciais

    int t;

    void main()

    {

    clrscr();

    FILE *arq1,*arq2,*arq3;

    printf("Entre com o valor de x(0)=a : ");

    scanf("%f",&x0);

    printf("Entre com o valor de y1(0) : ");

    scanf("%f",&w[1]);

    printf("Entre com o valor de y2(0) : ");

    scanf("%f",&w[2]);

    printf("Entre com o valor de y3(0) : ");

    scanf("%f",&w[3]);

    printf("Entre com o valor de x(n)=b : ");

    scanf("%f",&xn);

    printf("Entre com o valor de n : ");

    scanf("%f",&n);

    h=(xn-x0)/n;

    x=x0;

    //double n = 0;

  • 39

    arq= fopen("DADOS."wt");

    for (i=0;i

  • 40

    // w[3]=w[3] + (k[1][3] +2*k[2][3] +2*k[3][3] +k[4][3])/6;

    x=x0 +i*h;

    printf("\nValores de x,w[1],w[2]:

    :%3.3f,%3.3f,%3.3f",x,w[1],w[2]);

    fprintf(arq1,"%3.3f,%3.3f,%3.3f ,%3.3f \n",x,w[1],w[2],w[3]);

    }

    getch();

    fclose(arq);

    }

    double f1(double x,double y1,double y2,double y3)

    {

    return(y2);

    }

    double f2(double x,double y1,double y2,double y3)

    {

    return(y3);

    }

    /*double f1(double x,double y1,double y2,double y3)

    {

    return(y2-y1*y1-2*y1-x);

    }*/

  • 41

    Grfico de sada do programa em Borland C++ para h = 0.001 (onde a 1a., 2a. e

    3a. curvas, rferem-se y1[t], y2[t] e y3[t] respectivamente) . (plotado no

    GRAPHER)

    0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

    0.5

    1

    1.5

    2

    2.5

    3

    3.5

    4

    4.5

    5

    Esquema SIMULINK para a soluo da equao diferencial

    [T,U]From

    Workspace

    ++++

    Sum

    2

    Gain

    1/sIntegrator1

    1/sIntegrator

    1/sIntegrator2

    *

    Product

    Mux Mux

    Graph

    Grficos de sada do esquema SIMULINK para h = 0.001 (onde a 1a., 2a. e 3a.

    curvas, rferem-se y1[t], y2[t] e y3[t] respectivamente).

  • 42

    0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

    0.5

    1

    1.5

    2

    2.5

    3

    3.5

    4

    4.5

    5

    Time (second)

    Exerccio 1.a do Conjunto 5.1 da apostila Initial-Value Problems for Ordinary

    Differential Equations

    Esquema SIMULINK para a soluo da equao diferencial

    1/sIntegrator

    [T,U]From

    Workspace

    cos(u)Fcn

    *

    Product

    Graph

    youtTo Workspace

    Grfico de sada dp esquema SIMULINK para h=0.001.

  • 43

    0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

    0.5

    1

    1.5

    2

    2.5

    3

    3.5

    4

    4.5

    5

    Time (second)

    Exerccio 1.b do Conjunto 5.1 da apostila Initial-Value Problems for Ordinary

    Differential Equations

    Esquema SIMULINK para a soluo da equao diferencial

    1/sy

    [T,U]From

    Workspace exp(u)funcao exponencial

    *

    Product22/u

    funcao auxiliar++

    Sum

    Graph

    *

    Product1

    u*u

    funcao aux1

    Grfico de sada dp esquema SIMULINK para h=0.001

  • 44

    1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3-5

    -4

    -3

    -2

    -1

    0

    1

    2

    3

    4

    5

    Time (second)

    Exerccio 1.d do Conjunto 5.1 da apostila Initial-Value Problems for Ordinary

    Differential Equations

    Esquema SIMULINK para a soluo da equao diferencial.

    [T,U]From

    Workspace

    1/sIntegrator

    4Constant

    f(u)Fcn

    *

    Product*

    Product1

    Graph

    Grfico de sada de esquema SIMULINK para h=0.001

  • 45

    0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-5

    -4

    -3

    -2

    -1

    0

    1

    2

    3

    4

    5

    Time (second)

    Exerccio 1.d do Conjunto 5.2 da apostila Initial-Value Problems for Ordinary

    Differential Equations

    Esquema SIMULINK para a soluo da equao diferencial

    f(u)sen(3*u)

    f(u)cos(2*u)

    [T,U]From

    Workspace

    ++

    Sum1/s

    Integrator1 Graph

    Grfico de sada de esquema SIMULINK para h=0.25.

  • 46

    0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

    0.5

    1

    1.5

    2

    2.5

    3

    Time (second)

    Exerccio 5 do Conjunto 5.2 da apostila Initial-Value Problems for Ordinary

    Differential Equations Esquema SIMULINK para a soluo da equao diferencial

    2/u2/u

    f(u)exp(u)*(u*u)

    [T,U]From

    Workspace

    *

    Product++

    Sum1/s

    Integrator1 Graph

    Grfico de sada de esquema SIMULINK para h=0.1

  • 47

    1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 20

    2

    4

    6

    8

    10

    12

    14

    16

    18

    20

    Time (second)

    Atravs do Mtodo de Euler com um passo de 0.1, a soluo obtida possui

    um desvio de 21% de erro, sendo que o mtodo do Runge-Kutta de 4a. Ordem

    superior na obteno de solues.

    Item a) A soluo apresentada para o mtodo de Euler foi 15.3982,

    enquanto que a soluo real 18.6831.

    Item b) Com a soluo para esses valores (y(1.04), y(1.55) e y(1.97)),

    podemos observar que para valores pequenos, perto do inicial, a aproximao

    muito boa, enquanto que para valores prximos ao limite superior do intervalo, as

    solues so discrepantes. V-se que o erro introduzido cresce numa escala

    exponencial.

    Item c) Com o uso da frmula abaixo

    hm

    | y(ti) - wi|

  • 48

    Programas, em Matlab, para o modelo presa-predador

    %========================================

    % programa runpop.m

    % Programa para executar e plotar os

    % resultados do problema predador-presa

    % =======================================

    %

    % leitura dos dados iniciais para um sistema de edo 2x2

    global k1 k2 k3 k4

    initial(1)=input('Digite a populacao inicial da presa : ');

    initial(2)=input('Digite a populacao inicial do predador : ');

    % intervalo de tempo usado [ti,tf]

    ti = input('Tempo inicial : ');

    tf = input('Tempo final : ');

    % constantes referentes a presa e ao predador

    k1 = 3

    k2 = 0.002

    k3 = 0.0006

    k4 = 0.5

    % ode23 = rotina do MATLAB para resolucao de edo's

    [x, num_y] = ode23('pop',ti,tf,initial);

  • 49

    subplot(211);

    plot(x,num_y(:,1));

    title('Populacao da Presa')

    xlabel('x');

    grid;

    subplot(212);

    plot(x,num_y(:,2));

    title('Populacao do Predador'),xlabel('x');

    grid;

    %========================================

    % programa pop.m

    % campo vetorial para o

    % problema predador-presa

    % =======================================

    %

    function xf = pop(t,x)

    global k1 k2 k3 k4

    xf(1) = k1*x(1)-k2*x(1)*x(2);

    xf(2) = k3*x(1)*x(2)-k4*x(2);

  • 50

    0 1 2 3 4 5 6 7 8 9 100

    1

    2

    3

    4x 104 Populacao da Presa

    x

    0 1 2 3 4 5 6 7 8 9 100

    5000

    10000

    15000Populacao do Predador

    x

    Modelo para calcular a trajetria de uma bola de tnis com topspin:

    A bola tem massa m, dimetro d, mas representada por um ponto. As foras

    consideradas so: o peso G, a resistencia do ar D e a fora de Magnus M que reflete o

    efeito do topspin. Essas foras so dadas por:

    G = mg, sendo g = (0, 0, -g) e g a acelerao da gravidade

    D = - DL(v) t

    sendo v o valor absoluto da velocidade

    t o vetor unitrio tangente trajetria

    DL(v) = CD 12 (pi d2/4) v2

    sendo a densidade do ar

    CD a constante emprica

    CD = 0,508 [ 1 / (22,053 + 4,196(v/w)5/2)]2/5

    w representa a velocidade angular da bola (dada pelo topspin).

  • 51

    M = - ML(v) n

    n o vetor unitrio normal trajetria e

    ML(v) = CM 12 (pi d2/4) v2

    A constante emprica dada por

    CM = 1/ [2,022 + 0,981 (v/w) ]

    A dinmica governada pelo uso da Lei de Newton em cada uma das direes (x

    e z). Isto nos leva a um sistema de duas edos de segunda ordem, em que cada uma indica

    que fora igual a massa vezes acelerao. Reescrevendo as equaes como um sistema

    de edos de primeira ordem, obtemos:

    dxdt

    = vx

    dvdt

    x

    = - CD v vx + CM v vZ

    dzdt

    = vz

    dvdt

    z = -g - CD v vx + CM v vZ

    tendo como condies iniciais

    x(0) = 0

    vx(0) = v0 cos()

    z(0) = h

    vx(0) = v0 sen()

    Adotaremos a seguinte notao para manter as equaes em forma compacta:

    v = (vx, vz) = (dx/dt, dz/dt)

  • 52

    = pi d2 / 8 m

    v = v vx z +

    = 1

    +1 => topspin e -1 => sentido contrrio

    h a altura da bola na hora da raquetada e o ngulo do incio da trajetria dela.

    Programas, em Matlab, para o modelo bola de tnis com topspin

    %==================================================

    % Problema para a trajetoria de uma bola de tenis viajando no vacuo,

    % no ar e no ar na presenca de um spin (rotacao)

    %==================================================

    % tenisV = caso no vacuo

    % Temos 4 funcoes: tenisA = caso no ar sem spin

    % tenisAsp = caso no ar com rotacao positiva

    % tenisAfs = caso no ar com rotacao negativa

    % Variaveis que serao usadas pelas funcoes com os campos vetoriais

    global g alpha w etha

    % inicializacao

    % Constantes basicas em unidades MKS

    clg

    g=9.81; d=0.063; m=0.05; rho=1.29;

    alpha=pi*d^2/(8*m)*rho;

    etha=1;

  • 53

    w=20;

    %condicoes iniciais

    h=1; v0=25; theta=pi/180*15;

    xin=[0,h,v0*cos(theta), v0*sin(theta)];

    %tempo de voo no vacuo

    tmaxid=(xin(4)+sqrt(xin(4)^2 + 2*g*xin(2)))/g;

    % solucao no vacuo

    [tV, xV]=ode23('tenisV',0,tmaxid,xin);

    %solucao no ar sem spin

    [tA, xA]=ode23('tenisA',0,tmaxid,xin);

    %solucao com spin

    [tAsp, xAsp]=ode23('tenisAsp',0,tmaxid,xin);

    %Preparando a saida grafica do problema

    N = max(xV(:,1)); x = 0:N/100:N;

    axis([0,max(xV(:,1)),0,max(xV(:,2))])

    hold % comando que permite superpor os tres graficos (plots) seguintes

    % esses tres comandos abaixo nao funcionam na versao do estudante

    % e por isso foram "comentados"

    %1 plot(x,spline(xV(:,1), xV(:,2),x),':g');

    %2 plot(x,spline(xA(:,1), xA(:,2), x),'--g');

    %3 plot(x,spline(xAsp(:,1),xAsp(:,2),x),'-w');

    plot(xV(:,1), xV(:,2), ':g');

    plot(xA(:,1), xA(:,2), '-- g');

  • 54

    plot(xAsp(:,1), xAsp(:,2), '-w');

    %============================================

    % Arquivo: tenisA.m

    %

    % calcula o campo vetorial para a bola no AR sem rotacao

    %============================================

    function xdot = tenisA(t,x)

    %sem spin a constante de Magnus CM e ZERO.

    global g alpha

    v = sqrt(x(3)^2+x(4)^2);

    xdot(1) = x(3);

    xdot(2) = x(4);

    xdot(3) = -alpha*0.508*x(3)*v;

    xdot(4) = -g -alpha*0.508*x(4)*v;

    %===========================================

    % Arquivo a ser guardado com o nome de tenisAsp.m

    %

    % Calcula o campo vetorial para a bola no AR com rotacao

    %============================================

  • 55

    function xdot = tenisAsp(t,x)

    global g alpha w etha

    v = sqrt(x(3)^2+x(4)^2);

    % calculo do campo levando em conta as constantes de arraste CD

    % e a de Magnus CM

    aux1 = (0.508+1/(22.503+4.196*(v/w)^0.4))*alpha*v;

    aux2 = etha*w/(2.022*w+0.981*v)*alpha*v;

    xdot(1) = x(3);

    xdot(2) = x(4);

    xdot(3) = -aux1*x(3) + aux2*x(4);

    xdot(4) = -g -aux1*x(4) - aux2*x(3);

    %===================================================

    % Arquivo : tenisV.m

    %

    % calcula o campo vetorial para a bola no VACUO

    %===================================================

    function xdot = tenisV(t,x)

    global g

    xdot(1) = x(3);

    xdot(2) = x(4);

    xdot(3) = 0;

    xdot(4) = -g;

  • 56

    0 10 20 300

    0.5

    1

    1.5

    2

    2.5

    3

    Trajetrias da bola de tnis

    no vcuo (linha pontilhada)

    no ar (linha tracejada)

    no ar com topspin (linha cheia)