############################################################################## # FÍSICA COMPUTACIONAL II # # por # # Francisco Carlos Lavarda # ############################################################################## Tutorial de MAXIMA - SOLUÇÃO NUMÉRICA DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS DE PRIMEIRA ORDEM PELO MÉTODO DE RUNGE-KUTTA DE 4a. ORDEM ========================================================================= ** Primeiramente é preciso carregar uma livraria: load("dynamics"); ** Suponha que a EDO para a qual se quer a solução numérica seja: (dx/dt)=t-x**2 com o valor inicial x(t=0)=1, no intervalo de t de 0 a 4 com incrementos de 0.1 (exemplo tomado do Manual do MAXIMA). Para usar o comando que calcula a solução numérica é conveniente re-escrever a EDO como visto acima: com a derivada isolada num dos lados da igualdade. ** O comando para se obter a solução numérica pelo método supra citado é: rk(t-x**2,x,1,[t,0,4,0.1]); sendo que os argumentos do comando rk são: (1) a expressão para a primeira derivada; (2) a variável dependente; (3) o valor inicial da variável dependente; (4) os dados sobre a variável independente: (4.1) a variável independente; (4.2) o valor inicial da variável independente; (4.3) o valor final da variável independente; (4.4) o incremento da variável independente. A resposta neste exemplo é uma lista de pares ordenados: a abcissa varia de 0 a 4 com incremento de 0.1 e a ordenada é o valor obtido numericamente. ** Caso você queira gerar uma lista para fazer um gráfico: lista:rk(t-x**2,x,1,[t,0,4,0.1]); wxplot2d([discrete,lista],[style,points]); Neste gráfico você pode ver que nitidamente o conjunto de pontos pertence a uma curva (que seria a solução analítica da EDO estudada). ** Há um compromisso entre o número de pontos a serem calculados numericamente e o valor do incremento: para se manter uma boa qualidade da solução numérica, vale a seguinte regra: quanto maior for o intervalo da variável independente, menor terá que ser o valor do incremento. Outro detalhe: para saber se um dado incremento produz uma solução adequada, basta diminuir o valor dele: se ambos os incrementos delineam a mesma curva em em gráfico, é porque o primeiro valor já era pequeno o suficiente. ** Vejamos como isto se dá com a seguinte EDO de primeira ordem: (dy/dx)=-2*sin(x)*cos(x)+x**2*(cos(x))**2-x**2*y com y(x=0)=1. ** Para efeito de avaliação da qualidade da solução numérica, fique-se sabendo que a solução analítica para tal EDO é y(x)=(cos(x))**2. ** Agora calcule a solução numérica nos seguintes casos: intervalo incremento [0,4] 0.1 [0,8] 0.1 [0,8] 0.01 Em cada caso, faça um gráfico plotando juntamente y(x) e a solução numérica com o comando: wxplot2d([[discrete,lista],y(x)],[x,0,8],[y,0,1],[style,points,lines]) Perceba que a regra enunciada anteriormente se cumpre. ** A função rk também pode ser usada para resolver um sistema de EDO's de primeira ordem. Veja o manual, na seção "dynamics".