Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Fortran ESTE ME GUSTA
Apostila Fortran ESTE ME GUSTA
Pedro M A Miranda
1994,2004
Introduo Programao
Nota Introdutria
Estes apontamentos foram escritos em 1994 em Wordperfect e posteriormente convertidos em Word. Existiro certamente algumas falhas de converso no detectadas. O ambiente informtico existente data sofreu entretanto grandes alteraes, pelo que se eliminaram alguns tpicos referentes implementao dos programas propostos. No que se refere linguagem de programao (Fortran 77 com algumas extenses de Fortran 90) ela permanece utilizvel (em Fortran 90/95), sendo no entanto claro que o cdigo poderia ser reescrito de forma um pouco mais elegante. Agradecem-se sugestes e comentrios. As fontes (em Fortran) encontram-se disponveis para download. Pedro M A Miranda (2004) pmmiranda@fc.ul.pt http://www.cgul.ul.pt
Introduo Programao
INDICE
1 NMEROS, OPERAES E ERROS ........................................................................................... 5
Nmeros inteiros.......................................................................................... 5 Nmeros de vrgula flutuante ....................................................................... 6 Erros e estabilidade ..................................................................................... 7 Problema do movimento no campo gravtico uniforme ................................ 9 Formulao matemtica .............................................................................. 9 Mtodos numricos:..................................................................................... 9 Algoritmo...................................................................................................... 9 Programa Fortran....................................................................................... 13 Sugestes de trabalho ............................................................................... 15 Conceitos introduzidos............................................................................... 16 Problema.................................................................................................... 17 Formulao matemtica ............................................................................ 17 Mtodos numricos.................................................................................... 18 Algoritmo.................................................................................................... 18 Programa Fortran....................................................................................... 19 Sugestes de trabalho ............................................................................... 22 Conceitos introduzidos............................................................................... 22 Equilbrio trmico de um painel solar ......................................................... 23 Formulao matemtica: ........................................................................... 23 Mtodos numricos:................................................................................... 24 Algoritmo.................................................................................................... 25 Programas Fortran..................................................................................... 25 Sugestes de trabalho ............................................................................... 29 Conceitos de programao introduzidos.................................................... 29 Circuito RLC............................................................................................... 30 Aritmtica complexa em Fortran ................................................................ 31 Clculo da corrente no circuito RLC .......................................................... 32 Identificao do Problema e Formulao Matemtica ............................... 34 Mtodos numricos (Mtodo de Euler) ...................................................... 35 Algoritmo.................................................................................................... 37 Programas FORTRAN ............................................................................... 39 Algumas solues...................................................................................... 42 Sumrio dos conceitos introduzidos .......................................................... 44 Identificao do Problema e Formulao Matemtica ............................... 45 Mtodos numricos.................................................................................... 46 Algoritmo.................................................................................................... 48 Programas Fortran..................................................................................... 49 Trabalho proposto...................................................................................... 53 Sumrio de conceitos introduzidos ............................................................ 53
3
PROGRAMAO ELEMENTAR.................................................................................................... 9
ARITMTICA COMPLEXA........................................................................................................... 30
6 SOLUO DE EQUAES DIFERENCIAIS ORDINRIAS COM CONDIES FRONTEIRA NUM PONTO ........................................................................................................................................ 34
INTEGRAO NUMRICA.......................................................................................................... 45
Identificao do problema e formulao matemtica................................. 54 Mtodos numricos.................................................................................... 54 Algoritmo.................................................................................................... 55 Programa Fortran....................................................................................... 56 Sugestes de trabalho ............................................................................... 62 Conceitos introduzidos............................................................................... 62 Identificao do Problema e Formulao Matemtica ............................... 64 Mtodos numricos (Relaxao) ............................................................... 65 Algoritmo.................................................................................................... 67 Programas FORTRAN ............................................................................... 67 Algumas solues...................................................................................... 71 Trabalho proposto...................................................................................... 72 Sumrio dos conceitos introduzidos .......................................................... 72
Introduo Programao
Introduo Programao
Do que foi dito anteriormente depreende-se que muito fcil representar nmeros inteiros e lgicos. Assim, um nmero lgico s precisa de ocupar um bit (embora ocupe mais na prtica, porque mais eficiente manejar bytes oy mesmo grupos de bytes) e um nmero inteiro ocupar um nmero dado de bits na representao binria. Neste ltimo caso, se se reservar um bit para o sinal (positivo ou negativo), uma sequncia de n bits x1x2...xn ser dado por: ( x22n-2 + x32n-3 + ... + xn-12 + xn) (1-1)
Assim claro que a representao de nmeros inteiros e lgicos exacta. No entanto, nem todos os nmeros inteiros podem ser representados dada a existncia de um nmero finito de bits. Dizse que a representao dos nmeros inteiros tem um alcance finito. No caso de se utilizarem 4 bytes para representar um inteiro (positivo ou negativo) o alcance ser ento dado por: - 231 i + 231 1 (1-2)
em que se reservou um bit para o sinal e se tomou em considerao a existncia do 0 (da a assimetria do alcance). Uma outra questo levantada pela aritmtica, isto pelo resultado das operaes efectuadas sobre estes nmeros. No caso das operaes lgicas, claro que elas no levantam qualquer problema. No caso das operaes inteiras h evidentemente um problema resultante do alcance finito da representao: quando de uma operao resultar um nmero fora do alcance evidente que o resultado no pode ser obtido, est-se nesse caso numa situao de overflow. Por outro lado deve notar-se que a aritmtica inteira obrigada a produzir, a partir de qualquer operao, um resultado inteiro. No caso da diviso entre dois nmeros inteiros, em que o dividendo no seja um mltiplo do divisor, o resultado constitudo pela parte inteira da razo e por um resto (inteiro). preciso indicar explicitamente qual dos dois nmeros inteiros referidos (a razo ou o resto) se pretende obter.
1.2
Considere-se agora o problema da representao de nmeros reais no inteiros. Esses nmeros so geralmente representados na forma, dita de vrgula flutuante: m 2e-E (1-3)
em que m (mantissa) e e (expoente) so dois nmeros inteiros, positivos ou negativos. Assim, procede-se representao de nmeros no inteiros sob a forma de pares de nmeros inteiros. (Nota: a expresso anterior inclui, para cada preciso, uma constante aditiva E (bias), necessria, nomeadamente, para centrar o alcance em 0). Os nmeros de vrgula flutuante so dzimas finitas na base 2 (a que correspondem geralmente dzimas infinitas peridicas na base 10). So, portanto, um subconjunto dos nmeros racionais. Os nmeros de vrgula flutuante tm, tal como os inteiros, um alcance, que funo do nmero de bits atribudo ao expoente, e uma preciso, ou nmero de algarismos significativos, que funo do nmero de digitos atribudos mantissa. Tradicionalmente referem-se como de preciso simples, nmeros de vrgula flutuante com 4 bytes (32 bits) dos quais 3 (24 bits) so reservados para a mantissa e 1 (8 bits) se destina ao expoente. Estes nmeros tm, na base
6
Introduo Programao
decimal, um pouco mais de 7 algarismos significativos (o nmero no exacto nesta base) e um alcance aproximadamente dado por: - 10+38 <x<-10-38 ou x=0 ou - 10-38 <x<-10+38 (1-4)
Nota-se que neste caso existe um valor mximo absoluto que pode ser representado mas tambm um valor mnimo absoluto, exceptuando o caso particular do nmero 0. Assim, so possveis condies de overflow, quando o resultado de uma operao um nmero com valor absoluto excessivamente grande e de underflow, quando esse resultado um nmero de valor absoluto excessivamente pequeno. Neste ltimo caso, os compiladores podem arredondar automaticamente para 0. Contrariamente aritmtica inteira, a aritmtica de vrgula flutuante s excepcionalmente produz resultados exactos. Ao erro introduzido pelas limitaes de preciso (comprimento finito da mantissa) chama-se geralmente erro de arredondamento (roundoff).
1.3
Erros e estabilidade
Assim, as operaes em vrgula flutuante so normalmente afectadas por um erro de arredondamento. Esse erro inevitvel e s pode ser reduzido mediante a utilizao de representaes com maior preciso, mas nunca eliminado completamente. Numa sequncia de operaes de vrgula flutuante de esperar que se observe um crescimento do erro acumulado e pode provar-se estatisticamente que esse crescimento , em mdia, inevitvel. Para alm do erro de arredondamento, inevitvel, que resulta em ltima anlise do hardware utilizado, existe um outro tipo de erro que resulta da utilizao de expresses aproximadas (por exemplo, sries truncadas) para a avaliao de um dado resultado. Este tipo de erro funo do software utilizado e designa-se por erro de truncatura. O erro de truncatura pode (e deve) ser controlado pelo programador. Em certos casos, apesar de as frmulas utilizadas serem correctas no sentido em que produziriam o resultado exacto com aritmtica exacta, o erro pode crescer descontroladamente (exponencialmente) tornando os resultados obtidos completamente inteis. Tal crescimento resulta de uma interaco entre o erro de arredondamento e o erro de truncatura. Nesse caso dizse que se est na presena de instabilidade numrica. A principal preocupao da Anlise Numrica consiste exactamente em prevenir a ocorrncia desta situao. Um exemplo de obteno de um resultado afectado de um erro elevado dado pela utilizao da frmula resolvente usual da equao do segundo grau:
y= - b b2 - 4 a c 2a
(1-5)
Se b 2 << 4ac a expresso anterior produzir um resultado com um erro relativo muito elevado para uma das razes, devido ao erro de arredondamento. Se b > 0 o erro ser muito elevado para a raiz de maior valor (sinal positivo no radical). Caso contrrio ser a outra raiz a aparecer afectada por um erro elevado. A ttulo de exemplo considere-se a equao:
Introduo Programao
- y 2 + 8855 y - 1 = 0
Com 7 algarismos significativos, as razes so:
y1 = 8855.000 y 2 = 0.0001129305
(1-6)
(1-7)
No entanto, se se utilizar a frmula resolvente e aritmtica truncada a 7 dgitos (i.e. se se arredondar cada resultado parcelar a 7 dgitos) obtm-se:
y1 = 8855.000 y 2 = 0.00002823264
(1-8)
Verificando-se, portanto, que a raiz de menor valor absoluto vem afectada de um erro extremamente grande, muitssimo superior ao erro de arredondamento esperado. O crescimento anormal do erro de arredondamento observado neste exemplo resulta da diminuio do nmero de algarismos significativos quanto se subtraem dois nmeros de valor muito prximo, visto que o resultado tem uma ordem de grandeza muito inferior de cada uma das parcelas. Na verdade, a raiz afectada de um erro elevado, a que resulta da escolha do sinal positivo para o radical presente no numerador da frmula, ocorrendo a diminuio do nmero de algarismos significativos na subtraco: - b + b 2 - 4ac . claro que se b fosse negativo o cancelamento aconteceria na outra raiz. No caso da equao do segundo grau o problema pode ser evitado se se notar que existe uma frmula resolvente alternativa, dada por:
y=
2c - b b2 - 4ac
(1-9)
Comparando as expresses (1) e (2) nota-se que se ocorrer cancelamento na primeira raiz da expresso (1) de esperar cancelamento na segunda raiz da expresso (2). Assim, pode utilizarse a expresso mais conveniente para calcular cada uma das razes, evitando o crescimento do erro.
Introduo Programao
2 PROGRAMAO ELEMENTAR
2.1 Problema do movimento no campo gravtico uniforme
Um ponto material de massa m lanado de baixo para cima com uma velocidade inicial v0 = 20 m/s , a partir de uma posio s0 = 10 m acima do solo. Escreva um algoritmo, e correspondente programa FORTRAN, que permita a determinao do tempo necessrio para o corpo atingir a posio s . Considere a acelerao da gravidade g = 9.81 m s -2 .
2.2
Formulao matemtica
Calcular t + : s0 - s + v0 t -
1 2 gt =0 2
Em geral, a equao do segundo grau apresentada anteriormente tem duas razes reais ou complexas. O problema s tem soluo se as razes forem reais, sendo a raiz pretendida a menor das razes positivas. Verifique as condies de aparecimento de razes com parte imaginria e a sua justificao em termos fsicos. Verifique tambm qual o significado da segunda raiz no caso em que existe soluo.
2.3
Mtodos numricos:
- b b 2 - 4ac 2a
(2-1)
2.4
Algoritmo
a) Declarar variveis e constantes b) Inicializar constantes c) Ler s d) Calcular as razes da equao e) Escolher a raiz f) Escrever o resultado
2.4.2 Desenvolvimento
A estrutura geral apresentada em 4.1 e desenvolvida no pargrafo anterior um exemplo da estrutura de muitos algoritmos simples. Os diferentes passos indicados em 4.1 sero identificados no que se segue mediante a introduo de linhas de Comentrio. Estas linhas no fazem parte do algoritmo e so includas para benefcio dos seus possveis utilizadores.
Introduo Programao
a) O primeiro passo (DECLARAES) consiste em estabelecer os nomes e as caractersticas das diferentes variveis e constantes que vo ser utilizadas. Dependendo do algoritmo em questo, poder ser necessrio recorrer a variveis ou constantes que sejam nmeros de tipo INTEIRO, REAL, COMPLEXO, LGICO, etc. Nalguns casos, poder ser necessrio utilizar VECTORES ou TABELAS. Por razes de clareza, cada varivel deve ser utilizada para um fim bem especfico claramente identificado pelo seu nome. Em "linguagem algortmica" escrever-se-: Comentrio: DECLARAES Reais: s0,v0,s,g,x1,y1,x2,y2,t b) O segundo passo (INICIALIZAO) consiste em atribuir valores s constantes e, se necessrio, valores iniciais s variveis. Simbolicamente, indicou-se a operao de atribuio de um dado valor a uma varivel pelo smbolo . Deve notar-se que a declarao indica unicamente que determinada varivel existe e tem o nome e tipo dados mas no lhe atribui qualquer valor. Comentrio: INICIALIZAO s0 10 v0 20 g 9.8 c) A inicializao muitas vezes completada (como aqui o caso) pela LEITURA de dados. Comentrio: c) LEITURA DE DADOS LER s
d) O passo seguinte o ncleo central do algoritmo e a sua complexidade e estrutura depende naturalmente do problema. Neste ponto incluir-se-o, em cada problema, um ou mais BLOCOS de instrues (neste caso ser: d1) Clculo das razes e d2) Escolha da raiz fsica), cada um realizando um conjunto de operaes bem definido. Por motivos de clareza conveniente fazer essa separao por blocos sempre que possvel, dando ao algoritmo uma forma claramente estruturada e modular. Primeiro far-se- o clculo dos coeficientes da equao: a - 0.5 g b v0 c s0-s d1) O clculo das razes ser feito mediante utilizao da frmula resolvente da equao do segundo grau. Se se utilizar aritmtica complexa, a frmula pode ser directamente inscrita no
10
Introduo Programao
algoritmo. Neste problema vai-se utilizar, em vez disso, aritmtica real, pelo que tem de se ter em ateno o sinal do radicando antes de calcular cada raiz. Assim, pode fazer-se: Comentrio: clculo das razes da equao do segundo grau SE b2-4ac > 0 ENTO x1 (-b+(b2-4ac)1/2)/2a x2 (-b-(b2-4ac)1/2)/2a y1 0 y2 0 SENO x1 (-b)/2a x2 (-b)/2a y1 (-b2+4ac)1/2/2a y2 -y1 FIM DE OPES Em muitos casos, a modularidade pode (e deve) ser levada ao ponto de utilizar um algoritmo especfico independente (que ter na prtica a forma de um sub-programa) para realizar um ou mais dos blocos de instrues. Essa opo tem a vantagem de diminuir a complexidade de cada um dos algoritmos tomado individualmente e de permitir a utilizao daquele algoritmo especfico noutros problemas. Nesse caso, utiliza-se a expresso EXECUTAR operao, indicando o recurso a um algoritmo independente para a operao indicada. Assim poderia escrever-se em alternativa ao bloco anterior: EXECUTAR: Calcular xk+i yk tais que a(xk+i yk)2+b(xk+i yk)+c = 0 passando o bloco de clculo das razes para um algoritmo autnomo. d2) O bloco seguinte constitudo por uma ESTRUTURA DE CONTROLE extremamente til em programao que se poder designar por Estrutura de Escolha Condicional Mltipla (IFTHEN-ELSE), onde feita a seleco da raiz pretendida. O nmero de opes a incluir depende do problema. Comentrio: ESCOLHA DAS RAZES SE (y10 OU y20) ENTO ESCREVA 'No h Soluo' PARE SENO SE(x1<0) ENTO t x2 SENO SE(x2<0) ENTO t x1 SENO
11
Introduo Programao
A seleco da raiz fsica poderia ser feita por intermdio de outros testes (equivalentes) aos valores das variveis. Em geral h sempre muitas maneiras de resolver o mesmo problema. Por exemplo podia escrever-se: Comentrio: ESCOLHA DAS RAZES SE (y10 OU y20) ENTO ESCREVA 'No h Soluo' PARE SENO r Menor de x1,x2 SE (r < 0) ENTO r Maior de x1,x2 FIM DE OPO FIM DE OPES Neste caso, recorre-se a menos um teste e utiliza-se uma segunda estrutura de escolha EMBEBIDA na primeira. No programa fortran utilizar-se- esta forma. Deve notar-se a indicao do fim de cada estrutura de controle. e) Finalmente, o algoritmo transmite ao utilizador, por exemplo escrevendo no cran ou em outro perifrico (disco, impressora, etc) o resultado dos clculos. Comentrio: ESCRITA DO RESULTADO ESCREVER 'Soluo t=',t
2.4.3 Notas
Se uma das razes tiver parte imaginria no nula o mesmo se passa com a outra (elas so complexas conjugadas). Portanto bastaria testar y1 ou y 2 . Toda a aritmtica utilizada real - o algoritmo pode ser ligeiramente simplificado com a introduo de aritmtica complexa.
12
Introduo Programao
2.5
Programa Fortran
2.5.1 Preliminares
Vamos fazer o clculo das razes utilizando um subprograma genrico (Subroutine Raiz2) para o clculo de razes de uma equao do segundo grau qualquer. Utilizar-se- a segunda estrutura de controle definida em 4.2. Em FORTRAN, a instruo de atribuio "" indicada pelo smbolo "=". A operao lgica de igualdade (comparao) indicada pela expresso ".EQ.". Existem outras operaes de comparao entre nmeros que do origem a expresses lgicas (i.e., expresses que podem ter valor Verdade (.TRUE.) ou Falso (.FALSE.)): Operao A.EQ.B A.NE.B A.LT.B A.LE.B A.GT.B A.GE.B Significado Testa se A IGUAL a B Testa se A DIFERENTE de B Testa se A MENOR que B Testa se A MENOR OU IGUAL que B Testa se A MAIOR que B Testa se A MAIOR OU IGUAL que B
Neste programa recorre-se em particular utilizao de um SUBPROGRAMA do tipo SUBROUTINE. Uma SUBROUTINE , num certo sentido, um programa independente que tem um certo nmero de valores de entrada (conhecidos no momento em que iniciada a execuo da subroutine) e um certo nmero de valores de sada (a calcular no interior da subroutine). A sua utilizao faz-se do seguinte modo: a) No programa "principal" escreve-se: CALL nome_da_subroutine (arg1,arg2,....,argN) em que nome_da_subroutine representa um nome aceitvel pelo fortran (sequncia de caracteres alfanumricos como por exemplo RAIZ2) e arg1,arg2,...,argN representa a sequncia de argumentos de entrada e sada, por qualquer ordem (mas idntica sua ordem na instruo SUBROUTINE). b) O subprograma ter a seguinte estrutura: SUBROUTINE nome_da_subroutine (arg1,arg2,....,argN) (Declaraes Instrues ...) RETURN END
13
Introduo Programao
2.5.2 Programa
PROGRAM GRAVE C C Este Programa determina o tempo de chegada posio S de um C ponto material lanado de baixo para cima num campo gravtico C com acelerao G (constante) e cuja posio inicial S0 C com velocidade V0. C O mtodo utilizado baseia-se na frmula resolvente da equao C do segundo grau a*x**2+b*x+c=0, cujas razes so calculadas C na subroutine RAIZ2. C REAL S0,V0,G,S,T,X1,X2,Y1,Y2,A,B,C PARAMETER (S0=10.,V0=20.,G=9.81) C WRITE(*,*) 'Programa GRAVE' WRITE(*,*) 'Calculo do tempo de queda de um ponto material' WRITE(*,*) 'Indique o valor de S (posio final)' READ(*,*) S C A=-0.5*G B=V0 C=S0-S C CALL RAIZ2(A,B,C,X1,X2,Y1,Y2) C IF(Y1.NE.0. .OR. Y2.NE.0.) THEN WRITE(*,*) 'No h soluo' STOP ELSE T=MIN(X1,X2) IF(T.LT.0.) THEN T=MAX(X1,X2) ENDIF ENDIF C WRITE(*,*) 'Soluo: t=',T STOP END C C C SUBROUTINE RAIZ2(A,B,C,R1,R2,I1,I2) C C Esta subroutine calcula as razes C1=R1+i*I1, C2=R2+i*I2 C da equao do segundo grau a*x**2+b*x+c=0, utilizando a
14
Introduo Programao
C frmula resolvente. C REAL A,B,C,R1,R2,I1,I2,RAD,ARAD C RAD=B**2-4.*A*C C IF(RAD.LT.0.) THEN ARAD=ABS(RAD) R1=-B/(2.*A) R2=R1 I1=SQRT(ARAD)/(2.*A) I2=-I1 ELSE R1=(-B+SQRT(RAD))/(2.*A) R2=(-B-SQRT(RAD))/(2.*A) I1=0. I2=0. ENDIF C RETURN END
2.5.3 Notas
a) As variveis tm carcter local, i.e., o Programa principal e a subroutine s conhecem, alm das variveis definidas localmente em cada um deles, as variveis transferidas em argumento. As variveis transferidas em argumento no necessitam de ter o mesmo nome nos dois subprogramas. Devem no entanto ser no mesmo nmero e ter o mesmo tipo uma a uma (de acordo com a sua posio na ordem dos argumentos). b) A declarao de I1 e I2 como Real. O FORTRAN no exige a declarao explcita de escalares reais ou inteiros, atribuindo por defeito o tipo inteiro s variveis e constantes cujo nome comece pelas letras no intervalo I-N e o tipo real nos outros casos. Assim, I1 e I2 seriam, por defeito, variveis inteiras. boa programao declarar explicitamente todas as variveis utilizadas. b) A utilizao das funes intrnsecas MIN e MAX. Estas funes calculam, respectivamente, o mnimo ou mximo de uma sequncia de nmeros (2 ou mais). c) A utilizao das funes intrnsecas ABS (Calcula o valor absoluto de um nmero real) e SQRT (calcula a raiz quadrada de um nmero real).
2.6
Sugestes de trabalho
Escreva um pequeno programa principal para testar a subroutine com valores de A,B,C para os quais a soluo tenha sido obtida analiticamente.
15
Introduo Programao
Teste o Programa apresentado comparando-o com resultados analticos para os casos: a) s0 < s < s max ; b) s = s max ; c) s < s0 ; d) s > s max . Modifique o programa utilizando aritmtica complexa. Modifique o programa utilizando a estrutura de controle d2 definida em 4.2.
2.7
Conceitos introduzidos
a) Programa principal (PROGRAM, END) b) Declaraes (REAL) c) Definio de parmetros constantes (PARAMETER) d) Utilizao de subprogramas Subroutine (CALL, SUBROUTINE, RETURN) Transferncia de argumentos Carcter local das variveis e) Estrutura de escolha condicional mltipla (IF-THEN-ELSE, ENDIF) f) Leitura e escrita no terminal (WRITE(*,*), READ(*,*)) g) Funes intrnsecas: ABS(),MIN(),MAX(),SQRT()
16
Introduo Programao
e V P = h - W
(3-1)
em que W a chamada energia de arranque da clula, considerada constante para cada clula. O problema consiste, portanto, em: dados ( V P i , i )(i = 1,2,..., N) , calcular a melhor aproximao possvel (num sentido a definir) para h . A soluo do problema fornecer igualmente um valor para W .
3.2
Formulao matemtica
O problema referido um exemplo de uma famlia muito extensa de problemas de fsica (e no s) que se pode reduzir ao problema da determinao dos parmetros de uma recta (declive e ordenada na origem) que "melhor" se ajusta a uma srie de dados. Formalmente pode escrever-se: Dados ( xi , yi )(i = 1,2,..., N) , calcular a e b tais que a recta y = ax + b , a que melhor se ajusta aos dados (num sentido a definir). A soluo geralmente utilizada para este problema consiste em escolher os parmetros da recta que levam minimizao do erro mdio quadrtico:
e2 = 1 N 2 [y - (a xi + b )] N i=1 i
(3-2)
( ) ( )
(3-3)
obtm-se:
xi y i a= (xi2 ) 1 xi y i N 1 ( xi )2 N
(3-4)
17
Introduo Programao
b=
1 ( y i - a xi ) N
(3-5)
3.3
Mtodos numricos
O mtodo consiste unicamente no clculo dos somatrios necessrios e na sua introduo nas frmulas (5) e (6). No caso de N ser grande ou para valores particulares da srie { xi , yi } , pode haver problemas graves de arredondamento no clculo dos somatrios. Para limitar esses erros pode recorrer-se a clculos em dupla preciso.
3.4
Algoritmo
SUM 0 PARA i=1 AT N PASSO 1 SUM SUM + fi FIM DE CICLO Deve notar-se que: a) a varivel SUM primeiro posta a 0; b) A mesma varivel SUM aparece dos dois lados da expresso no interior do ciclo. Trata-se em cada iterao de somar mais um termo ao resultado do somatrio. Neste algoritmo recorre-se a uma varivel indexada, isto a uma sequncia de valores representada por fi (i=1,...,N), que pode ser identificada como um vector.
3.4.2 Algoritmo
Declarar variveis Ler N, { xi , y i }
Sx 0 Sy 0 S xx 0 S xy 0
18
Introduo Programao
S x S x + xi S y S y + yi S xx S xx + xi2 S xy S xy + xi y i
Fim de ciclo
1 Sx Sy N a 1 S xx - S 2 x N S xy b 1 (S y - a S x ) N
3.5
Programa Fortran
3.5.1 Preliminares
a) A traduo do algoritmo anterior em Fortran razoavelmente simples. Na sequncia de comentrio feito anteriormente, vai adoptar-se dupla preciso (64 bits, i.e., 8 bytes) para o clculo dos somatrios e do resultado final. As variveis correspondentes tero, por esse motivo de ser declaradas utilizando a instruo DOUBLE PRECISION (ou REAL*8). b) Este programa vai ainda utilizar duas sequncias de valores reais, i.e., dois vectores. Em Fortran, a declarao de um vector real X faz-se pela instruo REAL X(n) em que n o nmero de elementos do vector. Alternativamente pode escrever-se: REAL X DIMENSION X(n) Podem declarar-se vectores de qualquer tipo (REAL, INTEGER, LOGICAL, COMPLEX, CHARACTER) e podem declarar-se variveis com ndices mltiplos (e.g. DIMENSION X(n,m,k)). c) Dado que o nmero de pontos experimentais pode ser grande vai admitir-se que eles foram previamente escritos num ficheiro permanente (em disco). Esse facto obriga introduo de formas mais elaboradas da instruo de leitura READ. A instruo READ (assim como a instruo de escrita WRITE) tem a forma: READ(unidade,formato[,END=label1,ERR=label2,...]) variveis em que os parmetros no interior de [] so opcionais. O parmetro "unidade" um valor inteiro que identifica uma determinada unidade de leitura. Se se escrever o smbolo "*" a leitura ser feita sobre a "unidade por defeito" que o teclado. Se se
19
Introduo Programao
utilizar um nmero de unidade o seu significado, i.e., a sua correspondncia a um dado ficheiro, ao teclado, impressora, etc., ter de ser previamente estabelecida por intermdio de uma instruo de abertura da unidade que tem a forma: OPEN(unidade,FILE='nome_do_ficheiro',[STATUS='OLD',...]) Assim, poderia escrever-se, por exemplo: OPEN(10,FILE='PLANCK.DAT') READ(10,*) N O segundo parmetro da instruo READ, referido como o "formato" inclui informao referente forma de cada uma das linhas a ser lida, i.e., disposio dos algarismos e textos nessa linha. Se se utilizar o formato "*" o sistema ser capaz de reconhecer as diferentes variveis se elas estiverem separadas entre si por espaos, vrgulas ou mudanas de linha, com as variveis CHARACTER delimitadas por plicas ('). d) Na escrita dos resultados, utilizar-se a instruo WRITE com um formato.
3.5.2 Programa
PROGRAM REGRES C C Maro 1993 C Este programa faz uma regresso linear C A partir de um conjunto de N pares (x,y) calcula uma recta C y=ax+b, que melhor se ajusta a esses dados no sentido dos C mnimos quadrados C INTEGER NMAX,N,I PARAMETER(NMAX=1000) REAL X(NMAX),Y(NMAX) CHARACTER*30 FNAME,FORM DOUBLE PRECISION SX,SY,SXX,SXY,A,B,ELECT PARAMETER(ELECT=1.602D-19) WRITE(*,*) 'Regresso linear y=ax+b' WRITE(*,*) 'Ficheiro de dados de entrada' READ(*,'(A30)') FNAME OPEN(10,FILE=FNAME,STATUS='OLD') READ(10,*) N IF(N.GT.NMAX) THEN WRITE(*,*) 'ERRO: N>NMAX' STOP ENDIF DO I=1,N READ(10,*) X(I),Y(I)
20
Introduo Programao
ENDDO SX=0. SY=0. SXX=0. SXY=0. DO I=1,N SX=SX+X(I) SY=SY+Y(I) SXX=SXX+X(I)*X(I) SXY=SXY+X(I)*Y(I) ENDDO A=(SXY-SX*SY/DBLE(N))/(SXX-SX*SX/DBLE(N)) B=(SY-A*SX)/DBLE(N) FORM='(1X,''A='',E14.7,'' B='',E14.7)' WRITE(*,FORM) A,B,A*ELECT,B*ELECT END
3.5.3 Notas
a) Utilizao de preciso dupla para algumas variveis. b) Necessidade de inicializar (igualar a 0) os acumuladores antes de iniciar o somatrio. c) O modo como se procede abertura do ficheiro de dados de entrada. d) A utilizao da leitura em "Formato *" d grande liberdade ao modo como se podem inscrever os dados de entrada no ficheiro, podendo estes ser escritos em pares x,y em cada linha, separados entre si por um espao ou uma vrgula. Cada um dos valores x e y pode ser escrito na forma de uma constante numrica compreensvel pelo FORTRAN, de qualquer tamanho, como por exemplo: 1.0 3.14 1.0E+0 31.4E-01 e) A utilizao da constante NMAX definida pela instruo PARAMETER, em vez do seu valor numrico explcito em cada ponto em que ela aparece, torna o programa mais inteligvel e mais fcil de modificar. Assim, no caso de se pretender alterar esse valor bastar modificar o valor indicado em PARAMETER.
21
Introduo Programao
3.6
Sugestes de trabalho
Comprimento de onda (nm) Frequncia (1012Hz)
3.6.1 Teste o Programa com dados inventados, aproximadamente em linha recta. 3.6.2 Calcule o valor de h a partir dos dados da tabela. 3.6.3 Reescreva o programa de modo a introduzir como input o comprimento de onda e o potencial de paragem e a obter como output (formatado) os valores de h e W . 3.6.3 Considere o problema do ajustamento de recta que passa obrigatoriamente pela origem. Isto da determinao da recta y = ax , que minimiza o erro mdio quadrtico no ajustamento aos dados { xi , yi } . Deduza a expresso para a e escreva o algoritmo. 3.6.4 Introduza no programa REGRES o clculo do coeficiente de correlao linear.
VP (V) 1.0 0.99 0.89 0.79 0.68 0.57 0.47 0.37 0.28 0.17 0.07
400 414 429 444 462 480 500 522 545 571 600
749 724 699 674 649 624 599 574 549 524 499
3.7
Conceitos introduzidos
a) Declarao INTEGER b) Utilizao de vectores (DIMENSION); c) Dimensionamento de vectores com parmetros (PARAMETER). d) Utilizao de variveis CHARACTER e leitura de "strings" em formato A; e) Utilizao de preciso dupla (DOUBLE PRECISION); f) Utilizao de ficheiros de entrada de dados (OPEN); g) Utilizao de acumuladores, sua inicializao e realizao de somatrios; h) Utilizao de ciclos com contador (DO) i) Converso entre tipos, de inteiro para dupla preciso (DBLE) j) Escrita com formato (' ' e Em.n)
22
23
(4-1)
Nas condies referidas, a placa perde calor sob duas formas: por radiao e por conduo/conveco. O calor emitido pela placa sob a forma de radiao (medido em Wm-2) dado pela lei de Stefan-Boltzmann:
& = T 4 Q rad
(4-2)
O calor perdido directamente para o ar sob a forma de conduo/conveco pode ser dado, em primeira aproximao pela expresso:
& Q conv = (T T0 )
2 1
(4-3)
em que uma constante numrica. Considerar-se- = 0.4 Wm K . Nestas condies, a condio de balano trmico da placa escreve-se: & Q & E sol Q rad conv = 0 E sol T 4 (T T0 ) = 0 o que constitui uma equao no linear para T . Diversos problemas de Fsica envolvem a determinao de razes de equaes no lineares. Neste exemplo vamos considerar unicamente o caso do problema da determinao de razes reais. Em muitos casos, como no exemplo considerado, a funo tem mais do que uma raiz real. Os mtodos introduzidos neste problema permitem calcular essas razes uma a uma. (4-4)
4.2
Formulao matemtica:
500 5.67 10 8 T 4 0.4(T 273) = 0 (4-5)
23
24
O problema proposto pertence a uma classe de problemas que passam pela determinao de razes de uma equao no linear. O problema pode ser escrito na forma geral: Calcular x : f (x) = 0 No caso de existir mais do que uma raiz, ser necessrio considerar o processo de seleco das diferentes razes.
4.2.1 Comentrios
No caso concreto da equao (4), dado que se trata de uma equao do quarto grau, sabido que ela tem 4 razes, sendo que s uma delas relevante para o problema fsico posto. Acrescenta-se que neste caso existem duas razes reais (aprox: T=-338.5214924,+304.4922920) e duas razes complexas (aprox: T=17.01460017322.4060715 i), sendo claro que a raiz relevante a nica real e positiva (dado tratar-se de uma temperatura absoluta). No entanto, deve notar-se que em alguns problemas podero existir vrias solues com sentido fsico.
4.3
Mtodos numricos:
Salvo casos particulares, as equaes no lineares no podem ser resolvidas analiticamente, i.e., no podem ser resolvida explicitamente em ordem a x . Todos os mtodos disponveis so mtodos iterativos, que partem de uma estimativa inicial do valor da raiz e procedem por aproximaes sucessivas. Vamos considerar unicamente dois mtodos, entre os muitos disponveis. Uma descrio pormenorizada destes mtodos (e tambm do mtodo da secante) pode ser estudada na literatura de anlise numrica.
(4-6)
xi+1 = xi
f( xi ) xi ) f(
(4-7)
24
25
A expresso anterior pode ento ser utilizada de forma recursiva para, a partir de uma estimativa inicial do valor da raz, obter aproximaes sucessivamente melhores do seu valor. Contrariamente ao mtodo da bisseco, no existe garantia de convergncia do mtodo de Newton-Raphson. No caso em que h convergncia esta bastante rpida (quadrtica).
4.4
Algoritmo
Trabalho proposto. Dada a simplicidade dos algoritmos eles esto claramente identificados nos programas que se seguem. O problema novo mais interessante que se surge nesta aplicao o problema do controle da convergncia de um mtodo iterativo. Existem diferentes metodologias para fazer esse controle. Em qualquer caso, elas envolvem o estabelecimento de uma medida numrica do grau de convergncia atingido e a execuo da iterao ENQUANTO essa medida no atingir o valor pretendido. A implementao desse critrio faz-se facilmente com recurso a uma Estrutura de Controle designada como Iterao Condicional (sem contador) com teste inicial ou Estrutura DO WHILE que tem a seguinte forma:
ENQUANTO (condio) FAA conjunto de instrues FIM DE ITERAO Resta naturalmente estabelecer qual a condio de paragem. As condies mais comuns baseiamse no valor do ERRO ABSOLUTO (avaliado como o valor absoluto da correco introduzida pela ltima iterao) do ERRO RELATIVO (a razo entre o erro absoluto e o valor da soluo) e do NMERO DE ITERAES. Este ltimo critrio destina-se unicamente a impedir a continuao indefinida da iterao em caso de no convergncia e utiliza-se em simultneo com um dos anteriores.
4.5
Programas Fortran
Nos programas que se seguem apresenta-se um exemplo de programao modular em que se utilizam subprogramas de dois tipos: SUBROUTINE e FUNCTION. O subprograma FUNCTION define uma funo que, uma vez definida, se utiliza do mesmo modo que as funes intrnsecas. Tanto a subroutine como a function podem ter um ou mais argumentos, mas a function s devolve ao programa que a chama um nico valor do tipo estabelecido (implcita ou explicitamente) na sua definio.
4.5.1 Bisseco
PROGRAM TERMO C DETERMINACAO DA TEMPERATURA DE EQUILIBRIO DE UMA PLACA C EXPOSTA AO SOL E AO AR REAL A,B,EPS,X LOGICAL GO CHARACTER*1 SON
25
26
WRITE(*,*) 'Programa TERMO: determinacao da temperatura de' WRITE(*,*) 'equilibrio de uma placa exposta ao Sol e ao Ar' WRITE(*,*) 'utilizando o metodo da bisseccao' GO=.TRUE. DO WHILE(GO) WRITE(*,*) 'Indique os valores de:' WRITE(*,*) 'Tmin(Lim inf),Tmax(Lim sup),eps(Erro)' READ(*,*) A,B,EPS CALL BISSEC(A,B,EPS,X) WRITE(*,*) 'Raiz=',X,' f(x)=',F(X) WRITE(*,*) 'Repete: (S/N)' READ(*,'(A1)') SON IF(SON.NE.'S' .AND. SON.NE.'s') GO=.FALSE. ENDDO STOP END SUBROUTINE BISSEC(A,B,EPS,X) C C marco 1993, P.Miranda C determinacao de raizes pelo metodo da bisseccao C determinar x: f(x)=0 C C Supoe-se F(X) dado em FUNCTION externa C C criterio de paragem: eps (erro absoluto em x) C REAL A,B,X,EPS C C C verificar intervalo inicial: C IF(F(A)*F(B).GT.0.) THEN WRITE(*,*) 'erro na escolha do intervalo' RETURN ENDIF C C iteracao: C
26
27
DO WHILE (B-A.GT.EPS) X=(A+B)/2. IF(F(A)*F(X).LT.0.) THEN B=X ELSE A=X ENDIF WRITE(*,*) 'X=',X,' F(X)=',F(X) ENDDO RETURN END C C a funcao deve ser modificada para cada caso especifico: C FUNCTION F(X) REAL F,X,SIGMA,ALFA,TAR PARAMETER(SIGMA=5.67E-8,ALFA=0.4,TAR=273.) C F=500.-SIGMA*X**4-ALFA*(X-TAR) RETURN END
4.5.2 Newton-Raphson
PROGRAM NEWTON C C Maro 1993, P. Miranda C determinacao de raizes pelo metodo da Newton-Raphson C determinar x: f(x)=0 C C criterio de paragem: eps (erro absoluto em x) e N (numero max iteracoes) C REAL X0,X,EPS,DELTAX INTEGER I,N C WRITE(*,*) 'Programa Newton: determinacao de raizes' WRITE(*,*) 'indique os valores de:' WRITE(*,*) 'x0(Soluo inicial),eps(Erro),n(Num max de iter.)' READ(*,*) X0,EPS,N C C Inicializacao (erro=inf) C DELTAX=1.E30 I=0 X=X0 C
27
28
C iteracao: C DO WHILE (ABS(DELTAX).GT.EPS .AND. I.LT.N) I=I+1 DELTAX=F(X)/DFDX(X) X=X-DELTAX WRITE(*,*) I,' X=',X,' F(X)=',F(X),' DELTA=',DELTAX ENDDO C C solucao: C WRITE(*,*) 'Raiz=',X,' f(x)=',F(X), ' Num iter=',I C STOP END C C a funcao e a derivada devem ser modificadas para cada caso especifico: C FUNCTION F(X) REAL F,X,SIGMA,ALFA,TAR PARAMETER(SIGMA=5.67E-8,ALFA=0.4,TAR=273.) C F=500.-SIGMA*X**4-ALFA*(X-TAR) RETURN END C FUNCTION DFDX(X) REAL DFDX,X,SIGMA,ALFA PARAMETER(SIGMA=5.67E-8,ALFA=0.4) C DFDX=-4.*SIGMA*X**3-ALFA RETURN END
4.5.3 Notas
a) Note o controle feito aos valores iniciais de a e b no programa BISSEC. b) No Programa NEWTON o valor inicial de DELTAX posto a um nmero arbitrariamente elevado (1.E30), de modo a garantir que a iterao procede pelo menos uma vez. Nesse programa faz-se um teste duplo na iterao aos valores do mdulo de DELTAX (tomado como uma avaliao do erro) e de I (nmero de iteraes). O segundo teste destina-se a garantir o fim do processo de iterao no caso de: 1) O mtodo no convergir; 2) a condio de erro (EPS) estiver abaixo do erro de arredondamento. c) Note tambm que o mtodo da bisseco converge sempre a menos do erro de arredondamento. Se se estabelecer um erro demasiado pequeno (em termos relativos), ele deixa de convergir quando chega ao limite do erro de arredondamento. Portanto, o programa BISSEC tambm deveria ter um controle do nmero de iteraes.
28
29
d) Qualquer dos dois programas escreve tanto o valor da raiz como o valor da funo para permitir distinguir razes de descontinuidades.
4.6
Sugestes de trabalho
Teste os programas BISSEC e NEWTON. Verifique o seu comportamento para diferentes valores iniciais: a) Bisseco - considere intervalos iniciais incluindo cada uma das razes isoladamente e incluindo as 2 ou nenhuma raiz; b) Newton - considere diferentes de partida nas proximidades das razes e arbitrariamente distantes. Modifique os programas de modo a utilizar preciso dupla e repita os testes anteriores. Utilize estes programas para outras funes. Considere nomeadamente: a) A equao do segundo grau do Problema 1; b) A equao tan(x) = 0 . Verifique o comportamento dos mtodos na vizinhana de x = 0 e de x =
4.7
29
30
5 ARITMTICA COMPLEXA
5.1 Circuito RLC
A aritmtica complexa especialmente apropriada para a soluo de diversos problemas de circuitos em corrente alterna. Um exemplo concreto fornecido pelo circuito RLC descrito na Figura 1. Os componentes do circuito representado na Figura 1 so componentes lineares caracterizados pelas relaes tenso-corrente:
V R= R I 1 V C = I dt C dI V L= L dt
(5-1)
Se o circuito estiver sujeito a uma tenso sinusoidal V (circuito em corrente alterna), tem-se:
V = V L + V C + V R = V 0 cos( t)
(5-2)
A soluo do problema, isto o clculo da intensidade de corrente I, envolve, primeira vista, a soluo de uma equao diferencial. Dadas as propriedades das funes seno e coseno, verifica-se, no entanto, que o problema pode ser resolvido, no caso estacionrio, por meio de operaes algbricas sobre nmeros complexos. Para o efeito, definem-se impedncias complexas dos diferentes componentes lineares:
ZR= R ZC = i C ZL=i L
(5-3)
o que permite escrever para cada componente uma lei de Ohm (generalizada):
V=Z I
(5-4)
V = V 0 ei t
significa:
I = I 0 ei( t + )
(5-5)
V = Re{ V 0 ei t }
I = Re{ I 0 ei( t + ) }
(5-6)
em que o operador Re{} (parte real de{}) , portanto, subentendido. Uma vez definidas as impedncias complexas cada circuito pode ser resolvido mediante utilizao das leis de Kirchoff (Lei das malhas e Lei dos ns), exactamente do mesmo modo que
30
31
no caso dos circuitos s com Resistncias. Em resultado dessas leis obtm-se um sistema de equaes com coeficientes complexos para as incgnitas do problema (por exemplo, as correntes nas diferentes malhas). No caso do circuito RLC representado na Figura 1, obtm-se uma nica equao complexa para a corrente, que se pode escrever:
i i t i( t + ) V 0 e = R + i L I0 e C
(5-7)
eliminando o termo comum eit e escrevendo a impedncia complexa da srie RLC na forma a ei obtm-se:
V 0 = [R2 + - 2 C - 2 + 2 L2 ] etan
1/2
- 1 L
1 R RC
I0 e
(5-8)
ou seja:
I0=
+ C -2 + 2 L2 ] L 1 = tan -1 RC R
2 -2
[R
V0
1/2
(5-9)
As equaes anteriores (9) podem ser utilizadas directamente para obter a resposta do circuito, em funo da frequncia, utilizando unicamente aritmtica real. Se se utilizar aritmtica complexa pode resolver-se directamente a equao (7), que muito mais simples.
5.2
Em Fortran possvel utilizar variveis complexas em preciso simples (COMPLEX *8) e em preciso dupla (COMPLEX*16). Estas variveis tm de ser obrigatoriamente declaradas. Por outro lado, a linguagem possui as necessrias funes de converso (entre real e complexo) e a generalidade das funes matemticas.
5.2.1 Declaraes
A declarao de uma constante ou varivel (A) como complexo faz-se mediante a instruo:
COMPLEX A que equivalente a: COMPLEX*8 A Dado que um nmero complexo na verdade um par de nmeros reais as declaraes anteriores reservam 4 bytes (32 bits) para cada um desses nmeros reais. Se se pretender realizar os clculos com dupla preciso (64 bits por cada elemento do par) dever escrever-se: COMPLEX*16 A
5.2.2 Converses
Existe um nmero significativo de funes de converso. As mais importantes so:
31
32
Funo REAL A,B COMPLEX C,CC C=CMPLX(A,B) CC=CONJG(C) A=CABS(C) A=REAL(C) A=AIMAG(C)
Significado
Converte o par de Reais A,B no complexo C Complexo conjugado de C Mdulo do complexo C Parte real do complexo C Parte imaginria do complexo C
5.3
Para fazer o clculo da corrente do circuito RLC em funo da frequncia () necessrio unicamente resolver, para uma gama de valores da frequncia, a equao (7). A converso para Fortran bastante simples.
PROGRAM RLC C C Calculo da corrente em funo da frequncia num circuito RLC C COMPLEX I,Z,J REAL R,L,C,OMEGA,I0,PHI PARAMETER(R=1000.,L=1.E-3,C=1.E-6,V0=1.) J=CMPLX(0.,1.) PI=4.*ATAN(1.) OMEGA=2.*PI DO WHILE(OMEGA.LT.2.*PI*1.E6) Z=R+J*OMEGA*L-J/(OMEGA*C) I=V0/Z I0=CABS(I) PHI=ATAN2(AIMAG(I),REAL(I))
32
33
5.3.1 Comentrios
Para evitar confuses entre a corrente I e o nmero imaginrio i = - 1 , representa-se este ltimo com J. Notar a utilizao da funo intrnseca CMPLX para o definir. O programa faz um varrimento da frequncia entre 1 Hz e 106Hz. O clculo da frequncia angular implica a multiplicao por 2. O varrimento feito segundo uma srie geomtrica de razo 1.2. Note a utilizao de diferentes formatos na escrita da frequncia angular, da amplitude e da fase da corrente. A Figura apresenta de forma grfica o resultado do programa anterior.
33
34
em que T(t) a temperatura do caf em cada instante, T a a temperatura do ar e r um coeficiente de transferncia. O problema considerado um problema unidimensional e a sua soluo consiste na soluo da equao diferencial ordinria (1) dado o valor inicial da temperatura do caf e os valores das constantes T a e r . A soluo analtica dada por: T = T a + ( T 0 - T a ) e-r t (6-2)
(6-3)
O problema apresentado na equao (3) apresenta uma dificuldade adicional em relao ao problema (1.1) visto exigir a soluo de uma equao diferencial ordinria de segunda ordem. Por esse motivo, a sua soluo requer o estabelecimento de duas condies iniciais, para a posio e para a velocidade. claro, no entanto, que uma equao diferencial de segunda ordem pode ser facilmente substituda por um sistema equivalente de equaes diferenciais de primeira ordem. Assim, em vez da equao (3) pode escrever-se:
34
35
dv =- g dt dz =v dt
(6-4)
Prosseguindo na mesma linha, podem igualmente considerar-se problemas bi ou tridimensionais. Um exemplo interessante fornecido pelo movimento da Terra na sua rbita em torno do Sol. A lei do movimento neste caso dada pela conjuno da Lei da Atraco Universal com a Segunda Lei de Newton da Mecnica, expressa na relao:
r GM r d2r =- 3 r 2 dt r
(6-5)
em que M e m so, respectivamente, as massas do Sol e da Terra, G a constante de gravitao e r r o vector posio da Terra com referncia ao Sol. Numa boa aproximaao, pode considerar-se que o Sol e a Terra so pontuais e que o Sol se encontra fixo. Por outro lado o problema pode ser analisado de forma bidimensional, no plano da ecltica. Neste caso, a equao vectorial d origem a um sistema de duas equaes escalares, uma para cada componente:
GM d2 x =x 3/2 2 dt 2 ( x + y2 ) GM d2 y = y 2 3/2 2 dt ( x + y2 )
(6-6)
desdobrando as duas equaes diferenciais de segunda ordem, obtemos, portanto, neste caso, um sistema de 4 equaes diferenciais, cuja soluo exige quatro constantes de integrao (as condies iniciais para as duas componentes da velocidade e da posio). Todos os problemas considerados anteriormente tm tratamento analtico simples, pelo que fcil confirmar os resultados a obter numericamente. No entanto, preciso esclarecer que os mtodos numricos podem ser utilizados (e nesse caso que so verdadeiramente uteis) em situaes de difcil ou impossvel soluo analtica. Finalmente deve notar-se que todos os problemas apresentados so traduzidos por sistemas de equaes diferenciais ordinrias (uma s varivel independente) em que as condies fronteira so fornecidas num nico ponto, isto , para t=0. Outros casos exigiro tratamento diferenciado.
6.2
A soluo numrica de (sistemas de) equaes diferenciais, ordinrias ou no, passa necessariamente pela sua transformao (em sistemas) de equaes algbricas. Existem vrias metodologias possveis para operar essa transformao. Todas elas exigem, no entanto, a reduo do problema de um domnio contnuo (no tempo e/ou no espao) para um domnio discreto, isto a limitao do nmero de graus de liberdade a um nmero finito. Na prtica, isso quer dizer que a equao (ou o sistema) vai ser resolvida numa rede discreta de pontos da varivel independente. Isto define-se um intervalo de discretizao x e resolve-se o problema para x = x0 + ix {i = 0,..., N} . Deve notar-se que x a varivel independente que, nos casos apresentados anteriormente a varivel tempo.
35
36
Uma vez estabelecida a rede, a metodologia mais simples consiste em substituir directamente as derivadas presentes nas equaces por aproximaes obtidas por razes entre diferenas finitas das diferentes variveis. Assim, uma derivada de primeira ordem pode ser, por exemplo, substituda por:
y(a + x) - y(x) dy = x dx (x= a)
(6-7)
A utilizao da aproximao anterior, ou de qualquer outra metodologia, envolve, pelo menos, a considerao de trs conceitos bsicos, que no sero, no entanto, analisados em nenhuma profundidade neste curso: 1) Qual a preciso desta representaco ? 2) Existe convergncia ? Isto a soluo numrica tende para a soluo analtica quando o intervalo de discretizao x 0 ? 3) O mtodo estvel ? Isto , o erro cresce de forma "controlada" ou exponencialmente ? No caso da representao sugerida anteriormente, simples verificar que existe convergncia. O seu grau de preciso pode ser analisado recorrendo srie de Taylor:
y(x + x) = y(x) + dy 1 d2 y 2 1 d3 y 3 x + x + x + ... dx 2! dx 2 3! dx3
(6-8)
(6-9)
em que E( x) representa o erro de truncatura, cujo desenvolvimento em srie de potncias de x tem como termo de menor ordem um termo de primeira ordem. Nestas condies diz-se que a aproximao utilizada uma aproximao de primeira ordem, querendo significar que medida que x 0 o erro de truncatura se torna proporcional a x . O estudo do problema da estabilidade , em geral, muito mais complexo. No caso dos problemas de Mecnica existe muitas vezes um teste simples que permite verificar, posteriori, a estabilidade de um mtodo a partir do clculo da energia mecnica total do sistema em cada instante. A conservao de energia uma condio suficiente de estabilidade (mas no de preciso ou de convergncia). Estamos agora em condies de apresentar o mtodo de Euler. O mtodo consiste simplesmente em, a partir da posio inicial x0 (notar,mais uma vez, que a varivel independente tanto pode ser o espao como o tempo) e para cada posio na rede x = x0 + x , calcular o valor de cada uma das variveis dependentes (e.g. temperatura, velocidades e posies) a partir da frmula:
y i+1,k = y i,k + y ( xi,k , yi,k ) x
(6-10)
36
37
6.2.1 Comentrios
O mtodo de Euler tem em geral uma preciso insuficiente. Na prtica sempre prefervel recorrer a mtodos de 2 ou mesmo de 4 ordem (e.g. mtodos de Runge-Kutta), cuja utilizao ainda relativamente simples. A introduo do mtodo de Euler neste curso deve-se, pois, essencialmente a razes pedaggicas, dado o carcter altamente intuitivo do seu desenvolvimento. Quando o mtodo de Euler se utiliza para resolver equaes de ordem superior primeira, possvel utilizar os valores do primeiro integral no extremo superior do intervalo de integrao para calcular o segundo integral. Muitas vezes esse procedimento necessrio para evitar instabilidade. Na integrao das equaes da Mecnica utilizar-se- essa variante do mtodo de Euler. Concretamente, far-se-:
vi+1 = vi + a( xi ) t xi+1 = xi + vi+1 t
(6-11)
6.3
Algoritmo
t 0.01 r 0.1 N 200 Ta 20. T 80. t0 PARA i=1 AT N T T - r (T - Ta) t t t + t ESCREVER t,T FIM DE CICLO
37
38
Movimento Planetrio - Mtodo de Euler Constantes (Reais): G 6.67*10-11 M 1.99*10+30 UA 1.5*10+11 ANO 365*24*3600 GM G*M*ANO2*UA-3 Inicializar: x0, y0, vx0, vy0, t, N X x0 Y y0 VX vx0 VY vy0 PARA I=1 AT N VX VX + AX(X,Y)*t VY VY + AY(X,Y)*t X X + VX*t Y Y + VY*t FIM DE CICLO ESCREVER RESULTADOS Funes: AX(X,Y)= -GM*X*(X2+Y2)-3/2 AY(X,Y)= -GM*Y*(X2+Y2)-3/2 FIM
38
39
6.4
Programas FORTRAN
6.4.1 Arrefecimento
PROGRAM ARREFECE C C Clculo da evoluao da temperatura de um corpo em contacto com C o ar utilizando a lei Newton do arrefecimento. C C METODO DE EULER C C TSA: Solucao analtica C CHARACTER*30 FNAME WRITE(*,*) 'Arrefecimento de um corpo - Lei de Newton' WRITE(*,*) 'Temperatura inicial=' READ(*,*) T0 WRITE(*,*) 'Temperatura do AR=' READ(*,*) TA WRITE(*,*) 'Coeficiente de arrefecimento=' READ(*,*) R WRITE(*,*) 'Passo de tempo=' READ(*,*) DELTAT WRITE(*,*) 'Numero de iteracoes=' READ(*,*) N WRITE(*,*) 'Nome do ficheiro de RESULTADOS:' READ(*,'(A30)') FNAME OPEN(10,FILE=FNAME) T=0. TEMP=T0 WRITE(10,'(3F10.3)') T,TEMP DO I=1,N TEMP=TEMP-R*DELTAT*(TEMP-TA) T=I*DELTAT TSA=TA+(T0-TA)*EXP(-R*T) WRITE(10,'(3F10.3)') T,TEMP,TSA ENDDO END
39
40
41
C WRITE(*,*) 'Nome do ficheiro de RESULTADOS:' READ(*,'(A30)') FNAME OPEN(10,FILE=FNAME) C X=X0 Y=Y0 VX=VX0 VY=VY0 C ENERGY=0.5D0*(VX**2+VY**2)-GM/DSQRT(X**2+Y**2) WRITE(*,*) 'ENERGIA:',T,ENERGY WRITE(*,*) ' ' WRITE(10,*) N+1,0 WRITE(10,'(2E15.7)') X,Y C DO I=1,N T=I*DELTAT VX=VX+AX(X,Y)*DELTAT VY=VY+AY(X,Y)*DELTAT X=X+VX*DELTAT Y=Y+VY*DELTAT WRITE(10,1000) X,Y IF(MOD(I,10).EQ.0) THEN ENERGY=0.5D0*(VX**2+VY**2)-GM/DSQRT(X**2+Y**2) WRITE(*,'(''+'',A8,I5,E14.7)') 'ENERGIA:',I,ENERGY ENDIF ENDDO STOP END
6.4.3.1 Comentrios
A listagem apresentada inclui diversos aspectos interessantes no referidos no algoritmo: 1) A definio das funes AX e AY feita sem recurso a um subprograma (FUNCTION). As funes assim definidas so INTERNAS ao programa ou subrotina e no podem ser utilizadas a partir de outros subprogramas. As funes internas devem ser definidas imediatamente aps as declaraes, antes de qualquer instruo "executvel". Trata-se de uma possibilidade oferecida pelo FORTRAN que tem vantagens no caso de funes simples, dado simplificar o cdigo. 2) A energia mecnica total calculada de 10 em 10 passos de tempo, para verificao da sua (no) conservao pelo mtodo. Em relao a isso dois aspectos devem ser considerados: a) A utilizao da funo MOD(I,J) - esta funo calcula o resto da diviso inteira de I por J, s ser 0 se I for um mltiplo de J; b) O formato utilizado para a escrita do valor da energia parte do princpio de que o monitor tratado como uma impressora, pelo que as linhas sucessivas devero aparecer sobrepostas (o primeiro caracter o '+'),
41
42
permitindo uma visualizao muito rpida das alteraes dos diferentes algarismos significativos sem ter que parar constantemente a sada para o monitor (com CTRL-S, por exemplo) e sem encher o cran de nmeros em movimento vertical (SCROLL). 3) O programa utiliza preciso dupla em todos os clculos.
6.5
Algumas solues
42
43
43
44
6.6
Mtodos numricos
Programao
d) Funes em dupla preciso: DEXP (exponencial) DSQRT (raz quadrada); e) Funes internas; f) Linhas de continuao.
44
45
7 INTEGRAO NUMRICA
7.1 Identificao do Problema e Formulao Matemtica
Existem muitas situaes em que a soluo de problemas em Fsica passam pelo clculo de integrais. A necessidade de proceder a esse clculo por mtodos numricos surge sempre que a funo integranda oferece dificuldades ao tratamento analtico, por no ser integrvel analiticamente ou por a integrao analtica ser muito laboriosa, ou quando os limites de integrao impedem ou dificultam o recurso a mtodos analticos. Outro caso em que o recurso a mtodos numricos obrigatrio quando a funo integranda no conhecida analiticamente, sendo o seu valor dado (por exemplo a partir de medida experimental) num nmero finito de pontos. Para simplificar, vo considerar-se dois exemplos de Mecnica. O primeiro passa pela soluo de um integral simples. O segundo exige o clculo de um integral triplo difcil de calcular analiticamente dada a definio dos limites de integrao.
7.1.1 Clculo do momento de inrcia de uma placa fina homognea em relao a um eixo
Vai-se considerar o problema de calcular o momento de inrcia, em relao ao eixo dos yy, da placa fina apresentada na Figura 1, de densidade =3.5kg m-2, cuja forma dada por:
180
I=
I=
( x + y - 3) 1
2 2 2
(7-3)
x1 y 3
Neste caso o problema consiste no clculo do integral triplo:
(7-4)
45
r dV dV
V
46
(7-5)
com limites de integrao dados pelas desigualdades anteriores. O problema no tratvel analiticamente dada a geometria peculiar do corpo.
7.2
Mtodos numricos
Existem diversos mtodos numricos utilizveis no clculo de integrais. No caso do problema 1.1 vo considerar-se 3 mtodos possveis, de simples implementao, mas que so, em geral, suficientemente eficientes (mtodo do ponto mdio, mtodo do trapzio, mtodo de Simpson). No caso do problema 1.2 introduzir-se- uma tcnica extremamente geral de integrao numrica (mtodo de Monte Carlo), que permite resolver, ainda que com um tempo de clculo relativamente elevado, muitos problemas de difcil tratamento.
(7-6)
(7-7)
47
f (x) dx _ S N _ h
i=1
x0
f i -1 + f i f f = h 0 + f 1 + f 2 + ...+ f N -1 + N 2 2 2
(7-8)
x0
4 1 1 f (x) dx _ h f 0 + f 1 + f 2 3 3 3
(7-9)
x0
2 f N - 2 4 f N -1 f N 4 f1 2 f2 4 f3 f f (x) dx _ S N = h 0 + + + + ...+ + + 3 3 3 3 3 3 3
(7-10)
(7-11)
em que:
< f >= 1 N f ( xi , y i , z i ) N i=1 < f
2
>=
1 N 2 [ f ( xi , y i , z i ) ] N i=1
(7-12)
Em geral s fcil obter uma srie de pontos aleatoriamente distribudos com distribuio uniforme, em volumes muito simples, como por exemplo um paraleleppedo. Se no for esse o caso, o mtodo pode ainda ser utilizado substituindo o volume V por um paraleleppedo P que contenha esse volume e redefinindo a funo integranda. Nesse caso faz-se: f dV = g dP
V P
f ( xi ) xi V g( xi ) = 0 xi V
(7-13)
47
48
O preo a pagar pela substituio anterior consiste numa reduo da velocidade de convergncia do mtodo, inversamente proporcional ao aumento do volume de V para P.
7.3
Algoritmo
7.3.2 Clculo do centro de massa de um corpo de geometria complicada, pelo mtodo de Monte Carlo
O clculo de uma srie de N nmeros aleatrios exige normalmente uma inicializao do sistema, mediante a definio de uma "semente", seguida de N chamadas rotina geradora de nmeros aleatrios. O sistema determinista, gerando para cada "semente" sempre a mesma srie de nmeros. Vai partir-se do princpio de que os nmeros gerados se encontram uniformemente distribudos no intervalo [0,1]. O algoritmo seguinte refere-se unicamente ao clculo de cada um dos integrais triplos necessrios para determinar o centro de massa. So necessrios 4 integrais triplos (um para a massa e um para cada uma das trs componentes do centro de massa). A diferena entre eles est unicamente na funo integranda f(x,y,z). Note que o Programa Fortran procede ao clculo de todos os integrais necessrios.
Mtodo de Monte Carlo Comentrios: Paralelipedo 1x4; 3y7; -1z1
2 Toro z 2 + x 2 + y 3 le 1 2
Algoritmo: RO1.2 103 Ler N Inicializar gerador de nmeros aleatrios S0 Q0 PARA i=1 ATE N Calcular os nmeros aleatrios x,y,z Com: Deslocar e escalar os nmeros para o interior do paralelipipedo x1+x*3 y3+y*4 z-1+z*2 SE (x,y,z) interior ao Toro ENTO SS+f(x,y,z)
48
49
2
7.4
Programas Fortran
50
C IMPLICIT DOUBLE PRECISION (A-H,O-Z) EXTERNAL FUN C H=(B-A)/N C IF(N.LT.3) THEN WRITE(*,*) 'Erro: N<3' RETURN ENDIF C S=FUN(A)+4.*FUN(B-H)+FUN(B) DO I=1,N-3,2 X=I*H S=S+4.*FUN(X)+2.*FUN(X+H) ENDDO S=S/3.*H C RETURN END C FUNCTION FUN(X) IMPLICIT DOUBLE PRECISION (A-H,O-Z) PI=4.D0*DATAN(1.D0) RO=3.5D+3 FUN=RO*X*X*DSQRT(ABS(SIN(PI*X/180.D0))) RETURN END
7.4.2.1 Comentrios
a) Utilizou-se dupla preciso para reduzir a acumulao de erros de arredondamento no caso de se utilizar um nmero grande de pontos no clculo do integral. Caso contrrio (sugere-se a verificao) pode criar-se facilmente a situao em que um aumento do nmero de pontos se traduz numa degradao do resultado. Note que mesmo com dupla preciso esse problema no completamente evitado, mas improvvel para valores utilizveis de N. b) Note o modo como foi escrito o clculo do somatrio do mtodo de Simpson, agrupando os termos em pares e tratando de modo independente 3 termos (o primeiro e os dois ltimos). Assim, cada par tem sempre os mesmos 2 pesos (4/3 e 2/3), por esta ordem. Alternativamente, podia ter-se tratado de modo independente os dois primeiros e o ltimo termo (usando pesos 2/3 e 4/3). c) A rotina SIMPSON pode ser utilizado para qualquer outra funo integranda, bastando modificar a FUNCTION FUN(X).
50
51
d) Note que se N=3 o ciclo do no executado nenhuma vez. e) Note a definio de (PI) em dupla preciso.
52
Z=-1.+2*AL IF((Z*Z+(SQRT(X*X+Y*Y)-3.)**2).LE.1.) THEN ERO=ERO+RO ERO2=ERO2+RO*RO EX=EX+RO*X EX2=EX2+(RO*X)**2 EY=EY+RO*Y EY2=EY2+(RO*Y)**2 EZ=EZ+RO*Z EZ2=EZ2+(RO*Z)**2 ENDIF IF(MOD(I,1000).EQ.0) WRITE(*,'(''+'',I10)') I ENDDO C C Calculo do valor esperado e do erro C ERO=ERO/FLOAT(N) ERO2=ERO2/FLOAT(N) RMAS=V*ERO DELMAS=V*SQRT((ERO2-ERO**2)/N) EX=EX/FLOAT(N) EX2=EX2/FLOAT(N) RX=V*EX DELX=V*SQRT((EX2-EX**2)/N) EY=EY/FLOAT(N) EY2=EY2/FLOAT(N) RY=V*EY DELY=V*SQRT((EY2-EY**2)/N) EZ=EZ/FLOAT(N) EZ2=EZ2/FLOAT(N) RZ=V*EZ DELZ=V*SQRT((EZ2-EZ**2)/N) C WRITE(*,'(1X,T1,''Massa='',E14.7,'' Erro='',E14.7)') RMAS,DELMAS WRITE(*,1000) WRITE(*,1001) 'X',RX,DELX WRITE(*,1001) 'Y',RY,DELY WRITE(*,1001) 'Y',RZ,DELZ STOP 1000 FORMAT(1X,'Centro de Massa:') 1001 FORMAT(1X,A1,'=',E14.7,3X,' Erro=',E14.7) END
7.4.3.1 Notas
a) A rotina de gerao de nmeros aleatrios no standard do Fortran, podendo ter sintaxe diferente em diferentes compiladores. Existem, no entanto, diversas rotinas na literatura, fceis de implementar.
52
53
b) Note a utilizao da funo MOD para fazer uma sada regular no terminal, que ser til se o nmero N for muito grande, para fornecer uma indicao do tempo que falta para terminar o clculo. c) Note a necessidade de utilizar '' em vez de ' nalguns formatos. d) Este exemplo foi retirado do livro "Numerical Recipes, the art of scientific computing" (Press et al).
7.5
Trabalho proposto
a) Desenvolva os programas propostos e teste-os por comparao com integrais conhecidos; b) Teste o programa MONTCAR com diferentes valores de N e de ISEED; c) Desenvolva uma rotina para calcular um integral pelo mtodo do trapzio para nmeros de intervalo iguais a 1,2,4,...,2N, recursivamente, utilizando para cada valor de N os resultados obtidos para N-1 (metade dos intervalos).
7.6
53
54
(8-1)
O problema pode tambm ser escrito de forma condensada, usando notao matricial:
r r Ax=b r r A {a i j} ; b = {bi} ; x = {x j} (i = 1, M , j = 1, N )
(8-2)
Vamos considerar unicamente o caso em que M=N. Os outros dois casos (casos com mais ou menos equaes do que incgnitas), que esto tambm associados a importantes problemas de Fsica, so demasiado especializados para o mbito deste curso. Se M=N (a partir deste ponto referir-se- unicamente N como a dimenso do sistema de equaes) e as equaes forem linearmente independentes, o sistema tem soluo. Caso contrrio, diz-se que a matriz dos coeficientes A singular (nesse caso, tem determinante nulo). Em sistemas quase-singulares, ou quando N muito grande, o erro de arredondamento pode dificultar a obteno da soluo.
8.2
Mtodos numricos
Existem basicamente duas famlias de mtodos de soluo de sistemas de equaes lineares: mtodos directos e iterativos. Neste curso vamos considerar unicamente mtodos directos, que so geralmente os mais apropriados para sistemas de dimenso "manejvel". Tanto os mtodos directos como os mtodos iterativos podem ser desenvolvidos de modo a tirarem partido de casos em que a matriz dos coeficientes esparsa, isto tem grande nmero de termos nulos, com uma disposio organizada. O caso mais tpico de uma matriz esparsa constitudo pela matriz tridiagonal em que todos os elementos so nulos excepto os da diagonal principal e das duas subdiagonais adjacente. Os mtodos de soluo de sistemas de equaes lineares baseiam-se na imposio de uma sequncia de transformaes equivalentes da matriz dos coeficientes ( A )e do vector dos termos r independentes ( b ). Cada transformao equivalente, por definio, prodece a modificaes daqueles termos sem alterar a soluo do sistema. As transformaes bsicas so: a) Multiplicao de equao por uma constante;
54
55
b) Substituio de uma equao pelo resultado de uma combinaao linear dessa equao com outra (adio de uma equao com o produto de outra por uma constante); c) Troca de duas equaes. Notar que as modificaes de uma equao implicam alteraes em todos os seus termos (na matriz e no vector independente).
(8-3)
A soluo pode ser obtida muito facilmente comeando na ltima equao e substituindo para trs ("backsubstitution"). O mtodo da eliminao de Gauss consiste pois na construo de um conjunto de transformaes que permitam a eliminao progressiva dos termos da matriz dos coeficientes que se encontram abaixo da diagonal principal. Para uma boa compreenso do mtodo recomenda-se o estudo dos exemplos simples apresentados na bibliografia e uma consulta sobre o desenvolvimento do algoritmo. Em geral, para k = 1,..., N - 1 ,usa-se a equao k para eliminar o termo em xk das equaes j = k + 1,..., N . Para o efeito multiplica-se a equao k for -a jk / a kk e soma-se equao j . evidente, no entanto, que se akk = 0 o processo no funciona. A situao anterior no implica necessariamente que a matriz seja singular, podendo acontecer que existam outras equaes ainda disponveis que possam ser utilizadas nessa fase da eliminao. O problema consiste, portanto, em, em cada passo, escolher para eliminar a varivel x k , no a equao k , mas qualquer outra das equaes ainda disponveis ( i ) para a qual a jk / aik 0 . A essa equao chama-se equao pivot. O algoritmo da eliminao de Gauss deve pois, no caso geral, incluir uma escolha de pivot. Em certos casos h garantia de que a situao a k k = 0 nunca ocorre e a estratgia de pivot desnecessria. A utilizao de estratgia de pivot equivalente realizao da transformao equivalente de troca entre duas equaes no sistema. No entanto, para evitar os custos computacionais de proceder a essa troca, que envolve em cada caso a 3( N + 1) movimentaes de coeficientes, utiliza-se um sistema de indexao indirecta que mantm um registo das equaes j utilizadas e das falta utilizar.
8.3
Algoritmo
56
p( i )ri PARA k = 1 ATE n1 ESCOLHER m k : a[p(m), k] _ 0 TROCAR p(k) COM p(m) PARA i = k + 1 ATE n a[p(i), k] er a[p(k), k] a[p(i), k] r e PARA j = k + 1 ATE n a[p(i), j] r a[p(i), j] ea[p(k), j] b[p(i)] r b[p(i)] eb[p(k)] PARA k = n ATE 1 PASSO 1 b[ p (k)] x( k ) r
j= k +1
a[
p(k), j ] x( j )
a[ p(k), k] FIM
8.4
Programa Fortran
57
WRITE(*,*) ' Ficheiro de Entrada' READ(*,'(A)') FNAME OPEN(10,FILE=FNAME,STATUS='OLD') C READ(10,*) N IF(N.GT.NMAX) THEN WRITE(*,*) 'ERRO FATAL: N>NMAX' STOP ENDIF C C Leitura de dados C Notar que se faz uma copia dos coeficientes para a matriz AA C e vector BB a fim de testar a solucao C DO I=1,N READ(10,*) (A(I,J),J=1,N),B(I) DO J=1,N AA(I,J)=A(I,J) ENDDO BB(I)=B(I) ENDDO C C Solucao do sistema C CALL GAUSS(NMAX,N,A,B,X,IERR) C C Escrita dos resultados C IF(IERR.EQ.1) THEN WRITE(*,*) 'ERRO: IERR=1' STOP ENDIF C C Verificao do resultado e escrita C WRITE(*,'('' I'',T5,''X'',T22,''ERRO(B)'',T40,''B'')') DO I=1,N ERR=BB(I) DO J=1,N ERR=ERR-AA(I,J)*X(J) ENDDO WRITE(*,'(I3,T5,E14.7,T22,E14.7,T40,E14.7)') I,X(I),ERR,BB(I) ENDDO STOP END C C
57
58
C SUBROUTINE GAUSS(NMAX,N,A,B,X,IERR) C C Algoritmo da eliminacao de Gauss sem pivot C REAL A(NMAX,NMAX),B(NMAX),X(NMAX),E,SUM INTEGER I,J,K,N,NMAX,IERR C C Eliminacao C DO K=1,N-1 C C Eliminacao do coeficiente k C IF(A(K,K).EQ.0.) THEN IERR=1 RETURN ENDIF DO I=K+1,N E=A(I,K)/A(K,K) DO J=K+1,N A(I,J)=A(I,J)-E*A(K,J) ENDDO B(I)=B(I)-E*B(K) ENDDO ENDDO C C Substituicao C DO K=N,1,-1 SUM=0. DO J=K+1,N SUM=SUM+A(K,J)*X(J) ENDDO X(K)=(B(K)-SUM)/A(K,K) ENDDO C IERR=0 C RETURN END
58
59
60
DO I=1,N WRITE(*,'(I3,T5,E14.7)') I,X(I) ENDDO STOP END C C C SUBROUTINE GAUSSP(NMAX,N,A,B,X,P,ANOR,IERR) C C Algoritmo da eliminacao de Gauss com pivot C REAL A(NMAX,NMAX),B(NMAX),X(NMAX),ANOR(NMAX) INTEGER P(NMAX) C C Inicializacao do vector pivot C WRITE(*,*) 'N=',N DO I=1,N P(I)=I ENDDO C C Calculo da norma de cada linha C DO I=1,N ANOR(I)=0. DO J=1,N ANOR(I)=MAX(ANOR(I),ABS(A(I,J))) ENDDO IF(ANOR(I).EQ.0.) THEN IERR=1 WRITE(*,*) 'ERRO FATAL: MATRIZ SINGULAR' RETURN ENDIF ENDDO C C Eliminacao C DO K=1,N-1 C C Escolha da equacao pivot C KP=P(K) M=K COLMAX=ABS(A(KP,K))/ANOR(KP) DO KK=K+1,N KKP=P(KK)
60
61
COLKK=ABS(A(KKP,K))/ANOR(KKP) IF(COLMAX.LT.COLKK) THEN COLMAX=COLKK M=KK ENDIF ENDDO IF(M.NE.K) THEN ITEMP=P(K) P(K)=P(M) P(M)=ITEMP ENDIF C C Eliminacao do coeficiente k C DO I=K+1,N E=A(P(I),K)/A(P(K),K) C A(P(I),K)=E DO J=K+1,N A(P(I),J)=A(P(I),J)-E*A(P(K),J) ENDDO B(P(I))=B(P(I))-E*B(P(K)) ENDDO ENDDO C C Substituicao C DO K=N,1,-1 SUM=0. DO J=K+1,N SUM=SUM+A(P(K),J)*X(J) ENDDO X(K)=(B(P(K))-SUM)/A(P(K),K) ENDDO C IERR=0 C WRITE(*,*) 'N=',N RETURN END
8.4.3 Notas
a) Na escolha da equao pivot utilizou-se um critrio ligeiramente mais complicado que o referido anteriormente no texto, para diminuir problemas associados a erros de arredondamento. Ver bibliografia. b) Notar a utilizao da varivel IERR para a sinalizao do erro fatal correspondente utilizao de uma matriz de coeficientes singular.
61
62
c) A passagem do parmetro NMAX juntamente com N para a subrotina indispensvel para uma definio consistente da dimenso ajustvel das diferentes tabelas (arrays). d) Notar a utilizao de indexao indirecta na referncia ao primeiro ndice da matriz A. e) Os valores abaixo da diagonal principal de A no so realmente postos a zero neste programa. Isso no necessrio porque o algoritmo de substituio no os utiliza.
8.5
Sugestes de trabalho
a) Teste os programas apresentado com sistemas de soluo conhecida. Considere os 5 sistemas de equaes (todos com soluo x1=x2=x3=1):
0.0001 1000 1000 x1 2000.0001 6 4 1 1 x 2 = 2 3 1 6 x3 0.01 1000 1000 x1 2000.01 1 1 x 2 = 6 4 2 3 1 6 x 3 1 1000 1000 x1 2001 1 1 x 2 = 6 4 2 3 1 6 x3 1000 1000 1000 x1 3000 1 1 x 2 = 6 4 2 3 1 6 x 3 4 1 2 x1 7 4 1 1 x 2 = 6 2 3 1 x3 6
b) Inclua no fim do programa SISTEMP um teste da soluo encontrada, mediante o clculo r directo do produto da r matriz dos coeficientes A pelo vector soluo x e comparao do r resultado com o vector b . Ateno: isso implica guardar cpias dos valores originais de A e b , uma vez que eles so modificados na subrotina GAUSS. Uma vez concluda a modificao b) (e testada!), pode utilizar o programa em testes com qualquer input. c) Verifique o comportamento do programa com sistemas singulares e quase singulares.
8.6
Conceitos introduzidos
a) Utilizao de matrizes; b) Passagem de matrizes para subrotinas, dimenses ajustveis;
62
63
63
64
(9-1)
em que V o potencial elctrico, (x,y) a densidade volmica de carga e 0 a permitividade elctrica do meio. A equao anterior uma Equao de Poisson. A soluo da equao de Poisson o que geralmente se designa como um problema de condies fronteira, na medida em que a soluo completamente determinada pelas condies impostas na fronteira do domnio do problema. A equao de Poisson surge em muitos outros problemas de Fsica, em particular na determinao do potencial elctrico (ou gravtico) na presena de uma distribuio de cargas (ou de massas) geradoras e em problemas de Mecnica de Fluidos. Recorda-se que nos problemas considerados no mbito da apresentao do mtodo de Euler a soluo dependia essencialmente das condies iniciais (valor da funo ou da funo e suas derivadas no instante inicial).
(9-2)
Se a temperatura na fronteira do corpo for imposta e se esperar tempo suficiente a distribuio de temperatura no seu interior pode obter-se resolvendo a equao anterior com o primeiro membro igual a zero. A equao designa-se ento por equao de Laplace. Se o corpo em estudo tiver uma geometria bidimensional (caso de uma placa fina) a equao de Laplace escreve-se simplesmente:
2 T 2 T + =0 x2 y 2
(9-3)
claro que a Equao de Laplace um caso particular da Equao de Poisson (com =0), pelo que se vai considerar unicamente o caso mais geral para o desenvolvimento de um algoritmo. A
64
65
equao de Laplace surge em muitos outros problemas de Fsica, em particular na determinao do potencial elctrico (ou gravtico) numa zona do espao exterior s cargas (ou s massas) geradoras e em problemas de Mecnica de Fluidos.
(9-4)
(9-5)
Valores concretos para as condies fronteira e para o termo independente (f) sero considerados antes da apresentao dos programas.
9.2
Contrariamente ao caso dos problemas de valores iniciais considerados num captulo anterior (em que se apresentou o mtodo de Euler), no possvel obter a soluo da equao de Poisson partindo do valor da soluo num ponto da fronteira e calculando a soluo ponto a ponto, localmente. Para satisfazer as condies fronteira em todos os pontos limite necessrio obter a soluo para os pontos interiores de forma global. Existem vrios mtodos numricos (iterativos e directos) de soluo da Equao de Poisson. No mbito deste curso vai-se considerar unicamente um mtodo iterativo, chamado mtodo da Relaxao (sobrerrelaxao simultnea) que tem a vantagem de ser muito simples e convergir sempre, sendo no entanto relativamente lento. Para problemas em que o tempo seja um factor determinante devem ser considerados mtodos directos. O mtodo da relaxao baseia-se (tal como a generalidade dos outros mtodos) na representao das derivadas parciais presentes na equao (4) por diferenas finitas centradas (numa aproximao de segunda ordem):
2 i -1, j - 2 i, j + i+1, j _ x2 x 2 2 i, j -1 2 i, j + i, j+1 _ y2 y 2
(9-6)
com:
65
66
i , j = ( xi , y j )
xi = i x ; i = 0,..., M y j = j y ; j = 0,..., N
(9-7)
A deduo das relaes anteriores muito simples e baseia-se no desenvolvimento da funo considerada em srie de Taylor. Assim, na vizinhana do ponto x tem-se:
(x t) = (x)
2 3 x + 2 x 2 3 x 3 + ... x x x
(9-8)
(9-9)
pelo que as aproximaes (6) consistem em desprezar termos de segunda ordem (em x2) e superiores. Para simplificar, vai considerar-se o caso x=y=. Fazendo a substituio na equao (4) obtm-se um sistema de (M-1)(N-1) equaes:
i -1 , j + i+1 , j + i , j -1 + i , j+1 - 4 i , j - 2 f i , j = 0 i = 1,..., M - 1 ; j = 1,...N - 1
(9-10)
Note-se que o sistema (10) se refere unicamente aos pontos interiores, devendo a soluo na fronteira ser imposta. O sistema (10) um sistema de equaes lineares mas que envolve em geral um nmero muito grande de equaes pelo que a sua soluo directa apresenta algumas dificuldades. O mtodo da relaxao consiste na soluo iterativa desse sistema de equaes. Tal como em outros mtodos iterativos necessrio escolher uma primeira aproximao, para a qual se escolhe normalmente um valor constante. Como o mtodo converge sempre, a escolha da soluo "inicial" s interfere no nmero de iteraes necessrio. Assim, na iterao n pode escrever-se:
n n n n n 2 i1 , j + i+1 , j + i , j -1 + i , j+1 - 4 i , j - f i , j = R i , j
(9-11)
em que Ri , j , definido por (9), uma medida do erro em cada ponto (resduo) aps a ltima iterao. O objectivo da iterao , naturalmente fazer tender o resduo para zero. Um mtodo de reduzir o erro calcular um novo valor no ponto (i,j) que garanta o anulamento do resduo correspondente, isto :
1 n in+ , j =i , j +
Ri , j 4
(9-12)
Deve notar-se no entanto que quando se anula o resduo num ponto, vai-se perturbar necessariamente a soluo em pontos adjacentes. Mas h convergncia. H duas pequenas modificaes que podem melhorar o mtodo, acelerando a convergncia. A primeira consiste em utilizar para o clculo dos resduos os valores da funo medida que vo
66
67
sendo conhecidos. Neste caso, alguns dos termos do primeiro membro da equao (11) pertencem iterao n+1 enquanto outros ainda pertencem iterao n. Ao mtodo da relaxao modificado desta maneira chama-se relaxao simultnea. Em termos de programao a relaxao simultnea ainda mais simples do que a relaxao sucessiva porque no necessrio guardar os valores da funo em vrias iteraes. A segunda modificao, designada por sobrerrelaxao, consiste em introduzir um peso no clculo da correco (12). Nesse caso escreve-se:
1 n in+ , j = i , j +
Ri , j 4
(9-13)
1 2
A justificao da vantagem da sobrerrelaxao no trivial, mas pode ser facilmente verificada nos programas apresentados posteriormente. No caso da Equao de Poisson o valor ptimo do parmetro de sobrerrelaxao dado por:
opt = 2 -
1 1 2 2+ 2 N M
1/2
(9-14)
para uma rede de M por N pontos. Recomenda-se a consulta da bibliografia para mais informao.
9.3
Algoritmo
Trabalho proposto
9.4
Programas FORTRAN
67
68
PROGRAM RELAXP C C SOLUCAO DE EQUACAO DE POISSON PELO METODO DA RELAXACAO C SOBRERRELAXACAO SIMULTANEA C IMPLICIT DOUBLE PRECISION (A-H,O-Z) REAL*8 LX,LY PARAMETER(NMAX=100) PARAMETER(RESMAX=1.E-5,ITMAX=100) PARAMETER(V0=0.) PARAMETER(LX=1.,LY=1.) PARAMETER(Q1= 1.E-9,XQ1=LX/3. ,YQ1=LY/2.) PARAMETER(Q2=-1.E-9,XQ2=2.*LX/3.,YQ2=LY/2.) PARAMETER(EPS0=8.8544E-12) C DIMENSION V(0:NMAX,0:NMAX),F(0:NMAX,0:NMAX) CHARACTER*30 FNAME C PI=4.D0*DATAN(1.D0) C WRITE(*,*) 'Solucao da equacao de Poisson Lap V=F' WRITE(*,*) 'num rectangulo 0<x<',LX,' 0<y<',LY WRITE(*,'(1X,A,\)') 'DX=DY=' READ(*,*) D M=LX/D N=LY/D DD=D*D IF(MAX(N,M).GT.NMAX) THEN WRITE(*,*) 'ERRO FATAL: N,M>NMAX' STOP ENDIF ALFA=2.-PI*SQRT(2.)*SQRT(1./(FLOAT(M)**2)+1./(FLOAT(N)**2)) WRITE(*,*) 'Sobre-relaxacao Valor optimo=',ALFA WRITE(*,'(1X,A5\)') 'ALFA=' READ(*,*) ALFA C WRITE(*,*) 'Ficheiro para escrita dos resultados' READ(*,'(A30)') FNAME OPEN(10,FILE=FNAME) C C Condicoes fronteira C DO I=0,M
68
69
V(I,0)=V0 V(I,N)=V0 ENDDO C DO J=0,M V(0,J)=V0 V(M,J)=V0 ENDDO C C Condicoes "iniciais" no interior ("First guess") C DO I=1,M-1 DO J=1,N-1 V(I,J)=V0 ENDDO ENDDO
69
C C FONTES: Cargas/eps C DO I=0,M DO J=0,N F(I,J)=0. ENDDO ENDDO IQ1=XQ1/D JQ1=YQ1/D IQ2=XQ2/D JQ2=YQ2/D F(IQ1,JQ1)=-Q1/(EPS0*DD) F(IQ2,JQ2)=-Q2/(EPS0*DD) C C Relaxacao C IT=0 RESIT=1.E20 C DO WHILE(RESIT.GT.RESMAX .AND. IT.LE.ITMAX) IT=IT+1 RESIT=0. VMAX=0. DO I=1,M-1 DO J=1,N-1 RIJ=V(I-1,J)+V(I+1,J)+V(I,J-1)+V(I,J+1)-4.*V(I,J) : -DD*F(I,J) V(I,J)=V(I,J)+0.25*ALFA*RIJ RESIT=MAX(RESIT,ABS(RIJ)) VMAX=MAX(VMAX,ABS(V(I,J))) ENDDO ENDDO C RESIT=RESIT/VMAX WRITE(*,*) IT,RESIT ENDDO C IF(RESIT.GT.RESMAX) THEN WRITE(*,*) 'Criterio de convergencia nao foi atingido' ENDIF C WRITE(10,*) M+1,N+1 DO J=0,N
70
9.4.3 Comentrios
a) O critrio de convergncia baseado no erro relativo com um controle simultneo do nmero mximo de iteraes, para evitar situaes de repetio infinita da iterao; b) Na escrita dos valores da Temperatura de equilbrio poderia utilizar-se, por exemplo um formato F6.1 dado se conhecer priori o alcance dos valores dessa distribuio (entre T0 e T0+TM). No outro programa utiliza-se, em vez disso, um formato E14.6 que mais dispendioso mas oferece a garantia de poder representar um nmero de qualquer grandeza com 6 algarismos significativos. c) Notar a utilizao de ndices nulos nas matrizes; d) Ao parmetro de sobrerrelaxao atribudo "por defeito" o valor ptimo. Se esse valor for o escolhido pode responder-se pergunta correspondente com "/" ou "," seguidos de um "ENTER". Esta uma facilidade standard do sistema de leitura com "formato *" ("list directed input").
9.5
Algumas solues
Nas figuras seguintes apresentam-se graficamente solues obtidas com os programas anteriores. Em cada caso calcularam-se isolinhas, isto , linhas de igual valor da soluo (Temperatura ou Potencial
71
Elctrico) igualmente espaadas. Note-se, no entanto, que nas Figura 3 e 4 no se desenhou a isolinha correspondente a V=0 (segmento de recta x=Lx/2 e fronteira), dado ela apresentar uma bifurcao.
9.6
Trabalho proposto
a) Teste os programas; b) Verifique a diferena de comportamento do mtodo para diferentes valores do parmetro de sobrerrelaxao; c) Experimente modificar as condies fronteira; d) Compare os resultados do potencial das duas cargas "pontuais" com resultados analticos; e) Tente outras distribuies de carga "pontuais" e contnuas.
9.7
Mtodos numricos
c) Matrizes com ndice inferior diferente de 1; d) Escolha de formatos com ateno ao seu alcance; e) Valores por defeito de variveis.
73
BIBLIOGRAFIA As normas da linguagem Fortran encontram-se detalhadamente explicadas com muitos exemplos em diversos livros. A ttulo de exemplo indica-se:
Ellis, T.M.R., "A structured approach to FORTRAN 77 Programming", Addison-Wesley, London, 1982. Deve, no entanto, notar-se que os programas desenvolvidos neste curso utilizam duas extenses ao Fortran 77 (implementadas na maioria dos compiladores acessveis e introduzidas no Fortran 90): a estrutura {DO WHILE() ... ENDDO} e o ciclo DO na forma {DO i=1,N,J .... ENDDO}. O Fortran 90 uma linguagem moderna, extremamente poderosa, que inclui diversas outras extenses de muito maior impacto na norma do Fortran que, no entanto no sero abordadas. Assim, os programas desenvolvidos ao longo dos exemplos utilizados no curso faro uso unicamente de um subconjunto da linguagem, evitando os aspectos mais complexos da sua implementao. No que se refere aos algoritmos e mtodos numricos utilizados, eles foram introduzidos no curso essencialmente como exemplos convenientes e teis de programao. Quer isto dizer que no se procede a demonstraes formais das suas propriedades, sendo estes apresentados em funo da sua simplicidade em termos de programao e por constiturem exemplos prticos de muita utilidade, em que a utilizao de computadores se revela uma vantagem em face de outras metodologias. Os exemplos apresentados cobrem, no entanto, aspectos fundamentais de um curso de introduo aos mtodos numricos. Para uma melhor compreenso desses e doutros algoritmos sugere-se a consulta do livro: Press et al, "Numerical Recipes, the art of Scientific Computing", Cambridge University Press, verso em Fortran, 1986 (1 ed) e 1993 (2 ed). Existem verses do mesmo livro para outras linguagens de alto nvel (Pascal, C e Basic).
74