Preview only show first 10 pages with watermark. For full document please download

Sor

Primeiro exercício programa de MAP2121 - Cálculo numérico. SOR - Successive Over Relaxation. (2005)

   EMBED


Share

Transcript

MAP-2121 - Primeiro Exerc´ıcio Programa - 2005 Instru¸ c˜ oes gerais Os exerc´ıcios computacionais pedidos na disciplina C´ alculo Num´erico tˆem por objetivo fundamental familiarizar o aluno com problemas pr´ aticos que requeiram t´ecnicas num´ericas em sua solu¸c˜ ao. Neste programa sua tarefa ser´ a desenvolver um m´etodo iterativo, varia¸c˜ ao do m´etodo de Gauss-Seidel, para resolver sistemas lineares resultantes de algumas equa¸c˜ oes diferenciais. Seu programa deve ser entregue no Panda at´e o dia 09 de outubro. N˜ ao deixe para fazˆe-lo no final do prazo. O programa deve ser escrito em Linguagem C e ser compilado e executado com o compilador dispon´ıvel atrav´es do Panda. Caso vocˆe desenvolva seu programa em outro compilador, confira se ele tamb´em compila e executa na vers˜ao sugerida no Panda. Programas que n˜ ao compilarem ter˜ao notas muito baixas. N˜ao deixe de comentar seu programa, os coment´ arios ser˜ao considerados na corre¸c˜ ao. O seu programa deve ser desenvolvido por vocˆe individualmente. Haver´ a controle de c´opias e caso estas sejam detectadas, os envolvidos ter˜ ao nota zero no programa e o caso ser´a levado ` a coordena¸c˜ ao do biˆenio. Introdu¸ c˜ aoSua tarefa ser´a determinar aproxidamente a distribui¸c˜ ao de temperatura em uma placa plana, quadrada, cujo contorno ´e mantido a uma temperatura g(x, y) dada. Para uma placa homogˆenea a temperatura ser´ a dada pela solu¸c˜ ao da equa¸c˜ao diferencial: ∂2t ∂2t (x, y) + (x, y) = 0 ∂x2 ∂y 2 (1) para (x, y) no interior do quadrado Ω = [0, 1]×[0, 1], com a condi¸c˜ ao de fronteira t(x, y) = g(x, y) no contorno de Ω. Para a resolu¸c˜ao num´erica desta equa¸c˜ ao aproximaremos as derivadas por diferen¸cas finitas. Estas s˜ao baseadas em expans˜ oes em polinˆ omios de Taylor da solu¸c˜ao. Para um valor constante de y, temos que t(x, y) ´e fun¸c˜ ao de x. Supondo ent˜ao que t(x, y) seja 4 vezes continuamente diferenci´ avel podemos escrever: t(x + h, y) = t(x, y) + ∂t h2 ∂ 2 t h3 ∂ 3 t (x, y)h + (x, y) + (x, y) + O(h4 ) ∂x 2 ∂x2 6 ∂x3 (2) onde o termo O(h4 ) denota o resto na expans˜ ao de Taylor e ´e proporcional a h4 . Analogamente t(x − h, y) = t(x, y) − h2 ∂ 2 t h3 ∂ 3 t ∂t (x, y)h + (x, y) − (x, y) + O(h4 ) 2 ∂x 2 ∂x 6 ∂x3 1 (3) Somando estas express˜oes obtemos as aproxima¸c˜ oes para a segunda derivada em rela¸c˜ao a x da fun¸c˜ao t em um ponto (x, y): t(x − h, y) − 2t(x, y) + t(x + h, y) ∂2t (x, y) = + O(h2 ) ∂x2 h2 (4) Analogamente obtemos as aproxima¸c˜ oes para a segunda derivada em rela¸c˜ ao a y da fun¸c˜ao t em um ponto (x, y): ∂2t t(x, y − h) − 2t(x, y) + t(x, y + h) (x, y) = + O(h2 ) ∂y 2 h2 (5) Nestas express˜oes o termo O(h2 ) indica o erro da discretiza¸c˜ ao, que ´e proporcional a h2 . Substituindo as aproxima¸c˜ oes (4) e (5) na equa¸c˜ ao (1), desprezando o erro O(h2 ), obtemos a aproxima¸c˜ ao: t(x, y) = t(x, y − h) + t(x − h, y) + t(x + h, y) + t(x, y + h) 4 (6) mostrando que a temperatura resultante em um ponto ´e aproximadamente igual `a m´edia da temperatura em quatro pontos vizinhos. Para a discretiza¸c˜ao da equa¸c˜ ao em todo o dom´ınio iremos empregar uma malha de pontos, particionando Ω. Definimos a parti¸c˜ ao de Ω dada pelos pontos (xi , yj ) = (ih, jh), i, j = 0, 1, ..., n, com h = 1/n. Para uma fun¸c˜ ao g qualquer definida no ponto (xi , yj ) usraemos a nota¸c˜ ao gi,j = g(xi , yj ). Empregando esta nota¸c˜ao obtemos as aproxima¸c˜ oes em cada ponto (xi , yj ) = (ih, jh), i, j = 1, ..., n − 1: ti,j−1 + ti−1,j + ti+1,j + ti,j+1 ti,j = (7) 4 Das condi¸c˜oes de fronteira temos que ti,j = gi,j caso i = 0, i = n, j = 0 ou j = n. Ou seja, os valores de t s˜ ao conhecidos na fronteira. Para a determina¸c˜ ao de t nos pontos da malha temos que resolver o sistema linear que resulta das equa¸c˜oes (7), ap´os fazermos uso dos valores de t na fronteira. Trata-se de um sistema linear com (n − 1)2 inc´ ognitas (os valores de t no interior da malha), cuja matriz ´e bastante esparsa. O m´ etodo SOR Para a solu¸c˜ao do sistema linear (7) vocˆe dever´ a empregar o m´etodo iterativo SOR (Successive Over Relaxation), que consiste em uma generaliza¸c˜ ao do m´etodo de Gauss-Seidel visto no curso. Para a solu¸c˜ ao de um sistema linear Ax = b, o m´etodo de Gauss-Seidel, partindo de uma aproxima¸c˜ ao inicial x(0) ´e dado por: Para k = 0, 1, 2, ... fa¸ca: Para i = 1, 2, ..., n fa¸ca: (k+1) xi = (bi − i−1 X (k+1) ai,j xj j=1 − n X j=i+1 2 (k) ai,j xj )/ai,i No m´etodo SOR introduz-se um parˆ ametro ω, que dever´ a ser escolhido de forma a acelerar a velocidade de convergˆencia. O m´etodo SOR ´e dado por: Para k = 0, 1, 2, ... fa¸ca: Para i = 1, 2, ..., n fa¸ca: (k+1) xi = (1 − (k) ω)xi + ω(bi − i−1 X (k+1) ai,j xj j=1 − n X (k) ai,j xj )/ai,i j=i+1 Note que o m´etodo de Gauss-Seidel se torna um caso particular do m´etodo SOR, para a escolha de ω = 1. Alguns resultados sobre SOR: O m´etodo s´ o pode convergir caso 0 < ω < 2. Caso a matriz A seja sim´etrica positiva definida, ent˜ ao o m´etodo SOR converge para todo 0 < ω < 2. (Para estes resultados veja o livro Introduction to numerical analysis, Stoer e Bulirsch ou o livro An´ alise Num´erica, de Burden e Faires.) O programa: Usando SOR para o c´ alculo da temperatura a) tome g(x, y) = x(x − 1) + y(y − 1) e resolva o sistema linear (7) pelo m´etodo SOR. Note que a a matriz A do sistema linear resultante ser´ a muito esparsa. N˜ao h´a necessidade de armazenar esta matriz. Veja que o vetor x da descri¸c˜ao do m´etodo SOR ir´ a corresponder ` as temperaturas na malha. Estas est˜ao indexadas como ti,j em nossa descri¸c˜ ao das equa¸c˜ oes. Cada itera¸c˜ ao do m´etodo SOR, pode ser escrita como: Para i = 1, ..., n − 1 fa¸ca Para j = 1, ..., n − 1 fa¸ca (k+1) ti,j (k) (k+1) (k+1) (k) (k) = (1 − ω)ti,j + ω(ti−1,j + ti,j−1 + ti+1,j + ti,j+1 )/4 lembrando que as referˆencias aos valores na fronteira devem usar os valores de g(x, y). Por exemplo, na equa¸c˜ ao com i = j = 1, usa-se os valores de t0,1 e t1,0 . Estes s˜ao conhecidos e iguais a g0,1 e g1,0 (g(0, h) e g(h, 0) respectivamente). A implementa¸c˜ao ser´a facilitada se os valores de ti,j para i = 0, i = n, j = 0 e j = n forem inicializados adequadamente antes da itera¸c˜ ao. Para os valores de n = 32, 64 e 128 seu programa dever´ a (come¸ando da aproxima¸c˜ao inicial nula - nos pontos do interior do quadrado): • Calcular e imprimir o valor do βmax do crit´erio de Sassenfeld, verificando se este crit´erio garante a convergˆencia do m´etodo de Gauss-Seidel (ou seja, SOR para ω = 1). • Para valores de ω variando de 1.0 a 1.8, com passo 0.2, determinar qual o n´ umero de itera¸c˜oes necess´ arias at´e obter a norma do res´ıduo menor que 10−6 (para tal seu programa deve calcular o res´ıduo e sua norma a cada itera¸c˜ao do SOR). Vocˆe deve imprimir apenas, para cada ω, o n´ umero de itera¸c˜oes necess´arias para convergˆencia. Observe que a aproxima¸c˜ ao inicial (nula) deve ser a mesma para cada ω, para que esta compara¸c˜ ao fa¸ca sentido. 3 • Sabe-se para este problema que o melhor valor de ω ´e 2/(1 + sin πh) (note que depende de n). Determine e imprima o n´ umero de itera¸c˜ oes necess´ arias com este ω-´otimo. b) Tome g(x, y) = xy, use o valor ω-´ otimo e resolva o sistema (7) para n = 128. Neste caso, a fun¸c˜ao t(x, y) = xy ´e a solu¸c˜ ao exata de (1) (verifique). Seu programa dever´a calcular e imprimir a m´ axima diferen¸ca em m´ odulo entre a solu¸c˜ao calculada e a fun¸c˜ao xy nos pontos do interior da malha. 4