Você está na página 1de 74

Departamento de Fsica Faculdade de Cincias da Universidade de Lisboa

INTRODUO PROGRAMAO com exemplos em Fortran

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

1.1 1.2 1.3


2

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

2.1 2.2 2.3 2.4 2.5 2.6 2.7


3

AJUSTAMENTO DE DADOS EXPERIMENTAIS POR REGRESSO LINEAR .......................... 17

3.1 3.2 3.3 3.4 3.5 3.6 3.7


4

DETERMINAO DE RAZES DE EQUAES NO LINEARES. ............................................ 23

4.1 4.2 4.3 4.4 4.5 4.6 4.7


5

ARITMTICA COMPLEXA........................................................................................................... 30

5.1 5.2 5.3 6.1 6.2 6.3 6.4 6.5 6.6


7

6 SOLUO DE EQUAES DIFERENCIAIS ORDINRIAS COM CONDIES FRONTEIRA NUM PONTO ........................................................................................................................................ 34

INTEGRAO NUMRICA.......................................................................................................... 45

7.1 7.2 7.3 7.4 7.5 7.6

Introduo Programao 8 SOLUO DE SISTEMAS DE EQUAES LINEARES ............................................................ 54

8.1 8.2 8.3 8.4 8.5 8.6


9

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

SOLUO DE PROBLEMAS DE FSICA PELO MTODO DA RELAXAO ........................... 64

9.1 9.2 9.3 9.4 9.5 9.6 9.7

Introduo Programao

1 NMEROS, OPERAES E ERROS


1.1 Nmeros inteiros
Todas as instrues executadas por um computador tm de ser traduzidas em sequncias de operaes elementares compreendidas pela Unidade de Processamento Central (CPU, i.e., pelo(s) Microprocessador(es)). O leque de instrues elementares disponveis varia muito de mquina para mquina, dependendo da sua arquitectura e da existncia ou no de processadores especializados opcionais (co-processadores aritmticos, nomeadamente). Para o utilizador normal aquilo que se passa a esse nvel , num certo sentido (e felizmente) pouco relevante, dependendo a sua utilizao do computador fundamentalmente dos recursos fornecidos pelo software, isto , pela linguagem de alto nvel ou por outra aplicao utilizada. No entanto, claro que os recursos oferecidos pelo software so fundamentalmente condicionados pelo modo de operao do computador a um nvel mais baixo. Os computadores (digitais) so construdos para obter um elevado grau de eficincia na realizao de operaes matemticas sobre nmeros com um nmero bem determinado de dgitos (na base 2) e segundo regras bem definidas. Nesse contexto s podem ser representados exactamente um subconjunto dos nmeros usuais (inteiros, reais, complexos, etc.) e so de esperar limitaes e, eventualmente, erros, nas operaes a efectuar. A afirmao anterior no implica que no possa utilizar-se computadores para realizar operaes exactas com nmeros reais ou com qualquer preciso pretendida, mas, to s, que tais operaes sero necessariamente muito menos eficientes. Na verdade existem aplicaes que permitem fazer isso mesmo ou at realizar operaes simblicas sobre expresses matemticas. As linguagens de alto nvel, no entanto, limitam-se a oferecer um leque limitado de possibilidades representao de nmeros e operaes. Internamente, os nmeros so sempre representados em computadores como sequncias de algarismos binrios (0 ou 1), que correspondem, cada um deles, aos dois estados possveis do elemento fsico elementar em que se encontram armazenados. Quer isto dizer que os nmeros armazenados num computador utilizam como base natural a base binria. Cada algarismo binrio, ou a correspondente clula de armazenamento, designa-se geralmente por bit. Todas as operaes realizadas por um computador so, por isso, em ltima anlise, operaes sobre esses bits e podem ser entendidas como sequncias de operaes lgicas (0 ou 1 o mesmo que verdadeiro ou falso), estudadas com base na lgebra de Boole. Por motivos prticos conveniente agrupar os bits em conjuntos. Assim o conjunto de 8 bits designa-se por byte. Se se considerar que um byte constitui um nmero inteiro na base 2 claro que um byte poder representar qualquer nmero inteiro positivo entre 0 (00000000) e 255 (11111111 = 127+126+125+124+123+122+121+120). Os computadores actuais actuam preferencialmente sobre conjuntos de bytes, sendo os respectivos microprocessadores designados em funo do comprimento dos seus registos (16 bits, 32 bits ou 64 bits). As diferentes linguagens permitem definir variveis com diversos comprimentos (geralmente de 2, 4 ou 8 bytes).

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

Nmeros de vrgula flutuante

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

No so necessrios. Vai usar-se a forma resolvente da equao do segundo grau:


ax + bx + c = 0 _ x =
2

(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.1 Estrutura Geral:

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

t Menor de x1,x2 FIM DE OPES

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

3 AJUSTAMENTO DE DADOS EXPERIMENTAIS POR REGRESSO LINEAR


3.1 Problema
Vamos considerar o problema da determinao da constante de Planck h , a partir de dados obtidos numa experincia com uma clula fotoelctrica, que consistem numa srie de valores do potencial de paragem V P , em funo do comprimento de onda da luz incidente na clula. Utilizando a lei de Planck E = h em que E a energia de um foto e a sua frequncia, e a lei de conservao da energia pode escrever-se:

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)

Impondo a condio de minimizao, i.e., resolvendo as duas equaes:


e2 = e2 = 0 a b

( ) ( )

(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)

em que todos os somatrios so de 1 a N.

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

3.4.1 Clculo de um somatrio


O clculo de um somatrio, com um nmero suficientemente grande de termos, realiza-se de forma iterativa, utilizando uma Estrutura de Controle do tipo ITERAO COM CONTADOR (Ciclo DO). O valor do somatrio calculado termo a termo sobre uma varivel que assume a funo de um acumulador. Assim, para calcular SUM = f i faz-se:
i =1 N

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

Para I=1 at N faa

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

Escrever a,b FIM

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

Balano trmico de um painel solar

23

4 DETERMINAO DE RAZES DE EQUAES NO LINEARES.


4.1 Equilbrio trmico de um painel solar
Considere o seguinte problema de Termodinmica: determinar a temperatura de equilbrio de uma placa exposta ao Sol e ao ar, considerando dados a temperatura do ar, T0 = 273K , e a
irradincia solar ( E S = 500 W m-2 ). Fisicamente, o problema consiste em resolver a equao de balano energtico da placa (primeiro princpio da Termodinmica ou Princpio da conservao da energia) que se pode escrever:

Fluxo de calor recebido - Fluxo de calor perdido = 0

(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)

em que = 5.67 10 8 Wm 2 K 4 a constante de Stefan-Boltzmann e T a temperatura absoluta da placa (Kelvin).

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)

Determinar T que satisfaz a equao:

23

Balano trmico de um painel solar

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.3.1 Mtodo da bisseco


O mtodo da bisseco baseia-se directamente no teorema do valor mdio. Dado o intervalo [a, b] se sinal{f(a)} sinal{f(b)} ento existe x [a, b] : f (x) = 0 . O mtodo consiste na diviso sucessiva do intervalo original em duas partes iguais seguida da escolha do sub-intervalo em que ocorre a mudana de sinal. O mtodo da bisseco converge sempre (para uma raiz ou para uma singularidade). A sua convergncia , no entanto, lenta (linear).

4.3.2 Mtodo de Newton-Raphson


O mtodo de Newton-Raphson, baseia-se directamente no desenvolvimento em srie de Taylor da funo em torno de um ponto nas proximidades de uma raz:

f( xi+1 ) = f( xi ) + f ( xi ) ( xi+1 - xi ) + ...

(4-6)

Impondo a condio f( xi+1 ) = 0 , e desprezando os termos de ordem superior primeira, obtmse:

xi+1 = xi

f( xi ) xi ) f(

(4-7)

24

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Conceitos de programao introduzidos


a) Iterao sem contador com teste inicial (DO WHILE); b) Utilizao de funes externas (FUNCTION); c) Controle de erros de input; d) Verificao da convergncia de um mtodo iterativo; e) Utilizao de variveis lgicas (LOGICAL).

29

Balano trmico de um painel solar

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)

se se subentender que quando se escreve a tenso ou a corrente na forma:

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

Balano trmico de um painel solar

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

Aritmtica complexa em Fortran

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

Balano trmico de um painel solar

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.2.3 Outras Funes Intrnsecas


Em geral, as funes sobre nmeros complexos tm nomes quase iguais s funes correspondentes sobre nmeros reais, diferindo unicamente pelo acrscimo do prefixo C. Exemplo: CSIN(C), CCOS(C), etc..

5.3

Clculo da corrente no circuito RLC

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

Balano trmico de um painel solar

33

WRITE(*,'(F10.0,E14.7,F10.5)') OMEGA,I0,PHI/PI OMEGA=OMEGA*1.2 ENDDO END

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.

Fig. 5.1 Circuito RLC.

33

Balano trmico de um painel solar

34

6 SOLUO DE EQUAES DIFERENCIAIS ORDINRIAS COM CONDIES FRONTEIRA NUM PONTO


6.1 Identificao do Problema e Formulao Matemtica

6.1.1 Lei de Newton do arrefecimento


Vamos considerar um problema simples de termodinmica: o problema do arrefecimento de uma chvena de caf. Em primeira aproximao o processo de arrefecimento obedece lei de Newton do arrefecimento, expressa pela relao diferencial: dT = - r (T - T a ) dt (6-1)

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.1.2 Integrao das equaes da Mecnica


Existem muitos outros problemas em Fsica que apresentam uma estrutura formalmente idntica. Esse o caso nomeadamente da soluo do problema tpico de Mecnica: dado um ponto r r r material actuado por uma lei de foras F(t) , inicialmente na posio r 0 e com velocidade v 0 , calcular a sua posio no instante t. Um exemplo muito simples desta famlia de problemas dado pelo movimento unidimensional de um ponto material de massa m , com velocidade inicial r r r ascendente v 0 = v0 e z , num campo gravtico uniforme de acelerao - g e z , j considerado anteriormente no mbito deste curso (Cap. 2). A lei do movimento desse corpo (segunda lei de Newton da Mecnica) pode escrever-se: d z =- g 2 dt
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

Balano trmico de um painel solar

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

Mtodos numricos (Mtodo de Euler)

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

Balano trmico de um painel solar

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)

Resolvendo para a primeira derivada pode escrever-se:


dy y(x + x) - y(x) = + E( x) dx x

(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

Balano trmico de um painel solar

37

em que i identifica o ponto da rede e k a equao do sistema.

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

6.3.1 Arrefecimento da chvena de caf


Vamos considerar uma chvena com caf cuja temperatura inicial de 80oC e que se encontra numa sala em que a temperatura do ar de Ta=20oC. Admite-se que a temperatura do ar constante. conveniente neste caso utilizar como unidades oC (para a temperatura) e minutos (para o tempo). Nessas unidades podemos utilizar o valor de r=0.1 (min-1). Sugere-se o estudo do comportamento da soluo para outros valores dos parmetros. O algoritmo pode ento escrever-se:
Lei do Arrefecimento de Newton - Mtodo de Euler

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

Balano trmico de um painel solar

38

6.3.2 Queda de um corpo


Trabalho proposto.

6.3.3 Movimento planetrio


As equaes relevantes para este caso foram apresentados na seco 1. Dado que neste problema as variveis tomam valores muito elevados no Sistema Internacional de unidades, com consequentes problemas numricos, prefervel utilizar como unidades de base o ano (unidade de tempo) e a "unidade astronmica" (unidade de distncia), em que 1 u.a. a distncia mdia da Terra ao Sol _ 150 000 000 km. A unidade de massa irrelevante uma vez que no produto G M ela cancelada. A converso de unidades est feita explicitamente no algoritmo.

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

Balano trmico de um painel solar

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

Balano trmico de um painel solar

40

6.4.2 Queda de um grave


Trabalho proposto.

6.4.3 Movimento Planetrio


PROGRAM PLANETA C C Clculo da posicao de um Planeta na sua orbita em torno do Sol C C Unidades utilizadas: C tempo - ano C distancia - 1 UA (unidade astronomica = 150 000 km) C C METODO DE EULER C C ENERGY : energia mecnica total do planeta em cada instante C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DOUBLE PRECISION MSOL PARAMETER(ANO=365.*24.*3600.,UA=1.5D11) PARAMETER(BIGG=6.67D-11,MSOL=1.99D30) PARAMETER(GM=BIGG*MSOL*ANO**2/UA**3) C CHARACTER*30 FNAME C C Funcoes: (INTERNAS) C AX(X,Y)=-GM/(X**2+Y**2)**1.5D0*X AY(X,Y)=-GM/(X**2+Y**2)**1.5D0*Y C WRITE(*,*) 'Movimento planetario' WRITE(*,*) 'Integracao das equacoes do movimento pelo metodo de' : ,' Euler' WRITE(*,*) ' ' C WRITE(*,*) 'POSICAO INICIAL X,Y (u.a.):' READ(*,*) X0,Y0 WRITE(*,*) 'VELOCIDADE INICIAL VX,VY (u.a./ano):' READ(*,*) VX0,VY0 C WRITE(*,*) 'Passo de tempo (ANO):' READ(*,*) DELTAT WRITE(*,*) 'Numero de iteracoes:' READ(*,*) N
40

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

6.5.1 Lei de Newton do Arrefecimento


A Figura apresenta 5 solues do problema do arrefecimento utilizando passos de tempo de 6.25 min, 5 min, 2 min, 1 min e 0.1 min, com a integrao a prosseguir at t=50 min. A soluo analtica tambm se encontra no grfico, mas , a esta escala, indistinguvel da soluo numrica com maior resoluo. O mtodo de Euler parece pois suficiente para resolver o problema, desde que o nmero de pontos no seja muito pequeno.

Fig. 6.1 Arrefecimento de um corpo

42

Balano trmico de um painel solar

43

6.5.2 Movimento Planetrio


Algumas solues obtidas na integrao das equaes da Mecnica para o movimento planetrio so apresentadas nas Figuras 6.2a-c. Em todos os casos utilizou-se: t=0.001 ano-1, N=2000, x0=1 ua, y0=0. Nos casos das Figuras 2a e 2b as sucessivas rbitas sobrepem-se. No caso da Figura 2c, cuja rbita tem maior elipticidade, o erro de truncatura muito significativo (e visvel tambm em oscilaes da energia Mecnica total). Esse erro ser mais acentuado nas regies de maior variao da acelerao. O erro de truncatura no produz, neste exemplo, um crescimento (ou diminuio) sistemtico da energia do sistema (i.e. da distncia mdia do Planeta ao Sol) mas traduz-se em oscilaes importantes dessa energia ao longo da rbita, que fica sujeita a uma precesso espria. Em qualquer dos casos, parece claro que o mtodo de Euler no o mtodo mais indicado.

Fig 6.2 Movimento planetrio (mtodo de Euler)

43

Balano trmico de um painel solar

44

6.5.3 Trabalho proposto


a) Introduza no programa do movimento planetrio um controle evoluo do momemto angular do planeta. b) Considere o caso da queda de um grave introduzindo o efeito da resistncia do ar, admitindo que a fora de resistncia proporcional ao quadrado da velocidade em cada instante e tem a direco oposta velocidade. c) Considere o movimento de um oscilador harmnico governado pela lei F=-kx. Integre as equaes do movimento desse corpo, calculando em cada instante a sua energia total.

6.6

Sumrio dos conceitos introduzidos


a) Representao de derivadas por diferenas finitas; b) Preciso, convergncia e estabilidade de um mtodo numrico; c) Condies fronteira;

Mtodos numricos

Programao

d) Funes em dupla preciso: DEXP (exponencial) DSQRT (raz quadrada); e) Funes internas; f) Linhas de continuao.

44

Balano trmico de um painel solar

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=

2 x f (x) dx ; f (x) = sin 180 (7-1) 0

A soluo do problema consiste no clculo do integral:


180

I=

2 x f (x) dx ; f (x) = sin 180 (7-2) 0

7.1.2 Clculo do centro de massa de uma seco de um toro


Considere-se o problema do clculo do centro de massa do slido, de densidade =1.2103 kg m3 , obtido a partir de um toro (de raio menor 2 e raio maior 4) dado por:
2 z +

( x + y - 3) 1
2 2 2

(7-3)

por intermdio do corte:

x1 y 3
Neste caso o problema consiste no clculo do integral triplo:

(7-4)

45

Balano trmico de um painel solar


V

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.2.1 Clculo de integrais por interpolao entre pontos regularmente espaados


O mtodo mais simples de calcular integrais consiste em utilizar directamente a definio de integral de Riemman. Neste caso, divide-se o domnio de integrao em N intervalos, limitados por N+1 pontos, e calcula-se o integral como a soma das reas definidas em cada intervalo. Para calcular estas reas considera-se que a funo varia em cada intervalo de acordo com uma lei simples, concretamente, que ela aproximada por um polinmio de baixo grau. Assim, em todos os casos vai considerar-se a discretizao:
xi = x0 + i h

(7-6)

em que h o intervalo de discretizao.

7.2.1.1 Mtodo do ponto mdio


Este mtodo consiste em admitir que o valor mdio da funo em cada intervalo igual ao seu valor no ponto mdio. Esta hiptese ser satisfeita, em particular, se a variao for linear dentro do intervalo. Neste caso, com N intervalos, calcula-se o integral na forma:
xN x0

f (x) dx _ S N = h f i -1/2 = h [ f 1/2 + f 3/2 + ...+ f N1/2 ]


N i=1

(7-7)

7.2.1.2 Mtodo do trapzio


Esto mtodo semelhante ao anterior. Neste caso, no entanto, toma-se como valor mdio da funo integranda a mdia aritmtica do seu valor nas duas extremidades do intervalo. Geometricamente, esta regra consiste em aproximar o integral pela rea de um trapzio, isto , em aproximar a funo integranda por um segmento de recta no intervalo.
46

Balano trmico de um painel solar

47

Com N intervalos tem-se:


xN

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)

7.2.1.3 Mtodo de Simpson


Tanto nol mtodo do ponto mdio como nomtodo do trapzio o erro decresce com N2. possvel obter mtodos de convergncia mais rpida, se a funo integranda for suficientemente suave, recorrendo a polinmios interpoladores de ordem mais elevada. O mtodo de Simpson corresponde ao passo seguinte nesse sentido, utilizando como interpolador uma parbola. Nesse caso, merc de um cancelamento que ocorre no desenvolvimento do problema, obtm-se um mtodo cujo erro decresce com N4. Para definir uma parbola so precisos trs pontos. Assim, impondo o valor da funo nos dois extremos do intervalo e no ponto mdio, obtm-se por substituio:
x2

x0

4 1 1 f (x) dx _ h f 0 + f 1 + f 2 3 3 3

(7-9)

com N+1 pontos obtm-se:


xN

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.2.2 Mtodo de Monte Carlo


O mtodo de Monte Carlo baseia-se no teorema do mesmo nome. De acordo com este teorema dado um volume V e N xi pontos aleatoriamente distribudos nesse volume, com uma distribuio uniforme, tem-se:
f (x, y, z) dV _ V < f > V
< f
2

> - < f >2 N

(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

Balano trmico de um painel solar

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.1 Clculo do momento de inrcia de uma placa


Trabalho proposto. Os algoritmos correspondem unicamente ao clculo dos somatrios apresentados anteriormente, para cada um dos mtodos.

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

Balano trmico de um painel solar

49
2

QQ+f(x,y,z) FIM DE OPES FIM DE CICLO SS/N QQ/N SMCS*V ERRO V


Q - S2 n

ESCREVER SMC, ERRO

7.4

Programas Fortran

7.4.1 Mtodos do ponto mdio e do trapzio


Trabalho proposto.

7.4.2 Mtodo de Simpson


PROGRAM SIMP C C Calculo do momento de inercia de uma placa de densidade RO C e forma f(x), pelo mtodo de Simpson C IMPLICIT DOUBLE PRECISION (A-H,O-Z) WRITE(*,*) 'Nmero de pontos:' READ(*,*) N WRITE(*,*) 'Limites de integrao (a,b)' READ(*,*) A,B C CALL SIMPSON(A,B,N,S) C WRITE(*,'(1X,A11,E14.7)') 'INTEGRAL = ',S STOP END C C C SUBROUTINE SIMPSON(A,B,N,S) C C Clculo de integrais pelo mtodo de Simpson C Integral FUN(x) dx C Limites A,B
49

Balano trmico de um painel solar

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

Balano trmico de um painel solar

51

d) Note que se N=3 o ciclo do no executado nenhuma vez. e) Note a definio de (PI) em dupla preciso.

7.4.3 Mtodo de Monte Carlo


PROGRAM MONTCAR C C Clculo do centro de massa de uma seco de um toro. C C Integrao numrica pelo mtodo de Monte Carlo C IMPLICIT DOUBLE PRECISION (A-H,O-Z) INTEGER*2 ISEED REAL*4 AL PARAMETER(RO=1.2E3) C C Inicializao do Gerador de nmeros aleatrios C WRITE(*,'(A\)') ' Semente (Inteiro 2 bytes)=' READ(*,*) ISEED CALL SEED(ISEED) C WRITE(*,'(A\)') ' Numero de pontos:' READ(*,*) N C C Volume do paralelipipedo C V=3.*4.*2. C C Inicializao dos acumuladores C ERO=0. ERO2=0. EX=0. EX2=0. EY=0. EY2=0. EZ=0. EZ2=0. C DO I=1,N CALL RANDOM(AL) X=1.+3*AL CALL RANDOM(AL) Y=3.+4*AL CALL RANDOM(AL)
51

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Sumrio de conceitos introduzidos


a) Gerao de nmeros aleatrios b) Clculo de somatrios e de mdias c) Dupla preciso d) Ciclos com passo diferente de 1 e) Diferentes formatos de escrita

53

Balano trmico de um painel solar

54

8 SOLUO DE SISTEMAS DE EQUAES LINEARES


8.1 Identificao do problema e formulao matemtica
Muitos problemas em Fsica passam pela soluo de sistemas de equaes algbricas lineares. Formalmente, esses problemas consistem na determinao do conjunto de N variveis ( x1 , x 2 ,..., x N ) , dados { ai j , b j ; i = 1, M ; j = 1, N} e as relaes:
a11 x1 + a12 x 2 + ...+ a1N x N = b1 a 21 x1 + a 22 x 2 + ... + a 2N x N = b 2 ... a M1 x1 + a M2 x 2 + ... + a MN x N = b N

(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

Balano trmico de um painel solar

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.2.1 Eliminao de Gauss


O mtodo da eliminao de Gauss baseia-se no seguinte facto: se o sistema de equaes for transformado (por uma sequncia de transformaes equivalentes) num sistema tridiagonal superior, isto um sistema da forma:
u11 u12 0 u 22 ... 0 0 ... u1N x1 c1 ... u 2 N x2 = c2 ... ... ... ... u NN x N c N

(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

Com: Algoritmo de Eliminao de Gauss. Resolve o sistema ai k x k = bi . Com: Definir variveis


55

Balano trmico de um painel solar

56

Reais a(n,n),b(n),x(n) Inteiro p(n) PARA i = 1 ATE n

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

8.4.1 Eliminao de Gauss sem estratgia de Pivot


PROGRAM SISTEMA C C Este programa utiliza o metodo da eliminacao de Gauss sem C estrategia de pivot para C resolver um sistema de N equacoes lineares com N incognitas, C da forma A(i,j)X(j)=B(i) C PARAMETER(NMAX=100) REAL A(NMAX,NMAX),B(NMAX),X(NMAX) REAL AA(NMAX,NMAX),BB(NMAX),ERR CHARACTER*30 FNAME INTEGER I,J,N,NMAX,IERR C C Leitura dos coeficientes da problema (A e B) a partir de C um ficheiro C
56

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Balano trmico de um painel solar

59

8.4.2 Eliminao de Gauss com estratgia de Pivot


PROGRAM SISTEMP C C Este programa utiliza o metodo da eliminacao de Gauss com C estrategia de pivot para C resolver um sistema de N equacoes lineares com N incognitas, C da forma A(i,j)X(j)=B(i) C P e o vector de ponteiros para o "pivoting" C INTEGER NMAX,N,I,J,IERR PARAMETER(NMAX=100) REAL A(NMAX,NMAX),B(NMAX),X(NMAX),ANOR(NMAX) INTEGER P(NMAX) CHARACTER*30 FNAME C C Leitura dos coeficientes da problema (A e B) a partir de C um ficheiro C WRITE(*,*) 'Ficheiro de dados de entrada ?' READ(*,'(A)') FNAME OPEN(10,FILE=FNAME,STATUS='OLD') C READ(10,*) N WRITE(*,*) 'N=',N IF(N.GT.NMAX) THEN WRITE(*,*) 'ERRO FATAL: N>NMAX' STOP ENDIF C DO I=1,N READ(10,*) (A(I,J),J=1,N),B(I) ENDDO C C Solucao do sistema C CALL GAUSSP(NMAX,N,A,B,X,P,ANOR,IERR) C C Escrita dos resultados C IF(IERR.EQ.1) THEN WRITE(*,*) 'ERRO FATAL A(KK)=0.' STOP ENDIF C WRITE(*,'('' I'',T5,''X'')')
59

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Balano trmico de um painel solar

63

c) Indexao indirecta; d) Controle de erros em subrotinas; e) Escrita formatada.

63

Balano trmico de um painel solar

64

9 SOLUO DE PROBLEMAS DE FSICA PELO MTODO DA RELAXAO


9.1 Identificao do Problema e Formulao Matemtica

9.1.1 Equao de Poisson do potencial de uma distribuio contnua de carga


Recorda-se da Electrosttica que o potencial gerado por uma distribuio contnua de carga elctrica numa placa satisfaz equao:
2V 2V + = x2 y2 0

(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.1.2 Equao de Laplace aplicada ao equilbrio trmico de uma placa


Na ausncia de fontes ou sumidouros de calor, a conduo de calor num corpo satisfaz a equao:
2 T 2 T 2 T T =2 2 + + t y2 z2 x

(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

Balano trmico de um painel solar

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.1.3 Formulao geral


Vai-se ento considerar a soluo da equao:
2 2 + = f (x, y) x2 y2

(9-4)

dadas condies fronteira, por exemplo, na forma:


(0 , y) = 1 ( y) ( L x , y) = 2 ( y) (x , 0) = 3 (x) (x , L y ) = 4 ( x)

(9-5)

Valores concretos para as condies fronteira e para o termo independente (f) sero considerados antes da apresentao dos programas.

9.2

Mtodos numricos (Relaxao)

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

Balano trmico de um painel solar

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)

somando as duas equaes (8) e resolvendo para a segunda derivada obtm-se:


2 i -1, j - 2 i, j + i+1, j 4 = - 4 x 2 - ... x2 x 2 x

(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

Balano trmico de um painel solar

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

9.4.1 Potencial de uma distribuio bidimensional contnua de cargas (Equao de Poisson)


O exemplo apresentado corresponde ao caso limite em que a distribuio pontual, sendo, no entanto, tratada como contnua. A utilizao do programa para outras distribuies trivial, sendo unicamente necessrio recalcular o termo independente da equao de Poisson (a densidade de carga). No programa seguinte consideram-se duas cargas pontuais nos pontos (XQ1,YQ1) e (XQ2,YQ2). O nmero de pontos da rede depende do espaamento escolhido (x=y). As cargas tm, respectivamente 10-9 e -10-9 Coulomb. Do ponto de vista do programa elas so tratadas como distribuies contnuas, centradas naqueles pontos e com densidade igual a razo entre a carga respectiva e a rea de um rectngulo elementar da rede ("grid box"). Impe-se a condio de potencial constante (V=0) na fronteira. de esperar, naturalmente, que a soluo seja bastante diferente da soluo analtica para uma distribuio de cargas pontuais, no interior do rectngulo elementar onde est localizada a carga e na sua vizinhana imediata. Se se aumentar o nmero de pontos da rede a soluo converge.

67

Balano trmico de um painel solar

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

Balano trmico de um painel solar

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

Introduo aos Computadores (2 Semestre)

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

Introduo aos Computadores (2 Semestre)

WRITE(10,'(10E14.6)') (V(I,J),I=0,M) ENDDO STOP END

9.4.2 Distribuio de Temperatura numa placa em regime estacionrio (Equao de Laplace)


Vai considerar-se a situao em que a temperatura na fronteira da placa constante (T0) em trs das arestas (x=0,Lx e y=0) e tem uma distribuio sinusoidal (meia onda) na quarta aresta (y=Ly). A imposio de condies fronteira diferentes trivial e sugere-se que se tentem diversos exemplos. No exemplo apresentado na alnea 5 utiliza-se a condio fronteira:
C C Condicoes fronteira C DO I=0,M T(I,0)=T0 T(I,N)=T0+TM*SIN(I*PI/M) ENDDO C DO J=0,M T(0,J)=T0 T(M,J)=T0 ENDDO

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

Introduo aos Computadores (2 Semestre)

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.

Fig. 9.1 Exemplos de soluo

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

Sumrio dos conceitos introduzidos


a) Mtodo da Relaxao
72

Mtodos numricos

Introduo aos Computadores (2 Semestre)

b) ou Soluo iterativa de sistemas de equaes


Programao

c) Matrizes com ndice inferior diferente de 1; d) Escolha de formatos com ateno ao seu alcance; e) Valores por defeito de variveis.

73

Introduo aos Computadores (2 Semestre)

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

Você também pode gostar