Dicas para EP parabólica

Dicas para EP parabólica

por Andreza Lukosiunas -
Número de respostas: 13

Oi pessoal,

Quem tiver dicas, postem aí!

O erro global da minha tabela estava meio esquisito, oscilando. Troquei a atualizacão de tempo de lugar do final do while(tempo) para o começo, a cara do erro global mudou. Quando uso deltaT = deltaX (o meu deltaX = deltaY) a tabela chega em 0,8 (tem que chegar em 1) quando matriz de tamanho 128 x 128.

Quando uso deltaT = deltaX*deltaX o erro global aumenta, mas percebo que o mesmo vai aumento cada vez menos, imagino que com matrizes maiores ele vai se igualando até diminuir (sonho meu!). Será que isso é possível, demorar mais para convergir, dado que neste caso converge para 2? 

Em resposta à Andreza Lukosiunas

Re: Dicas para EP parabólica

por Daniela Passos Maia -

Oi pessoal!

Percebi que quanto mais iterações eu permito que o G-S faça (aumentando o numero máximo de iterações e/ou exigindo uma variação relativa cada vez menor ),  menores ficam os erros.. Mas no meu caso, infelizmente, eles ainda estão oscilando.. 

Alguém sabe um valor razoável para o numero maximo de iterações e variação relativa para o G-S? Estou usando 500 para o numero maximo de iterações e 0.0001 para a variação relativa..

Daniela

 

Em resposta à Andreza Lukosiunas

Re: Dicas para EP parabólica

por Andreza Lukosiunas -

Fiz dx = dy = dt, particionei em dx, dx/2, ..., dx/32, esta última deu uma matriz 128X128, enquanto a primeira 4x4.

Minha tabela é a seguinte:
q       dxerro global(e2) e1/e2(Razão)         log2
02.500000E-014.700318E-02
11.250000E-013.530491E-021.331350E+004.128895E-01
26.250000E-022.262721E-021.560286E+006.418101E-01
33.125000E-021.387546E-021.630736E+007.055229E-01
41.562500E-027.985128E-031.737663E+007.971486E-01
57.812500E-034.381176E-031.822599E+008.659972E-01
 
onde e1: erro global anterior, e2: erro global atual.
 
Perceba que log2 é (log de base 2 da razão) que é para onde converge, queremos que vá para 1, na tabela vai para 0,8 que com mais partições 
"parece"ir para 1. A razão e1/e2 tem que ir para 2, na tabela vai para 1,8.
 
Nos trabalhos anteriores, que eram apenas gráficos de linha, os erros convergiam mesmo para partições pequenas. 
No caso de estudarmos uma matriz o erro demora mais, ou será problema com o meu código?
Em resposta à Andreza Lukosiunas

Re: Dicas para EP parabólica

por Andreza Lukosiunas -

Oooops,

Segue tabela novamente.

q                dx                     erro global(e2)      e1/e2(razao)                   log2
0    2.500000E-01       4.700318E-02
1     1.250000E-01        3.530491E-02      1.331350E+00       4.128895E-01
2    6.250000E-02       2.262721E-02       1.560286E+00      6.418101E-01
3    3.125000E-02        1.387546E-02       1.630736E+00      7.055229E-01
4    1.562500E-02         7.985128E-03       1.737663E+00      7.971486E-01
5    7.812500E-03         4.381176E-03       1.822599E+00      8.659972E-01

Em resposta à Andreza Lukosiunas

Re: Dicas para EP parabólica

por Andreza Lukosiunas -

Problema utilizado

A = cos(X + Y)*exp(-T);

μ = 0.5 ,  (x,y) ∈ [0;1]x[0;1]  e  t ∈ [0;1]

já quando dt = dx*dx

não converge, porém tem cara de que se o intervalo for bem mais particionado a convergência irá acontecer, pois inicialmente erro global aumenta, mas ele passa a aumentar cada vez menos parecendo que vai se igualando até diminuir.

Amanhã tentarei no labmap, assim posso trabalhar com partições maiores, 

mas penso também que se sempre precisarmos de matrizes gigantes estamos ferra-dos. 

Em resposta à Andreza Lukosiunas

Re: Dicas para EP parabólica

por Daniela Passos Maia -

Oi pessoal!

Mudei o critério de parada do Gauss Seidel conforme sugerido pelo professor na ultima aula, i.e., comparando com a solução exata do sistema.

Aumentei muito (em torno de 2500) o numero de iterações e percebi uma grande diminuição nos erros.. =)

Quanto mais fina a malha, mais iterações o Gauss-seidel faz, mas a partir de de um ponto essas 2500 iterações não estão sendo suficientes, pois estou saindo do Gauss-Seidel por atingir o numero maximo de iterações e não por causa do erro.  Isso aconteceu quando o refinamento ficou em  1/128.. a partir deste ponto o erro dá um salto e passa a aumentar.. =(  Pensei em aumentar o numero de iterações,  mas não sei se é uma boa ideia.. o programa já está demorando bastante pra rodar.. 

Pode ser que ainda haja erros que justifiquem esse comportamento.. se alguém tiver alguma sugestão..

Daniela

Em resposta à Daniela Passos Maia

Re: Dicas para EP parabólica

por Andreza Lukosiunas -

Imagine só! Eu nem estava usando iterações apenas a tolerância. Após refinar a malha em 128 se não houveriterações entra num loop infinito, ou ao menos muitíssimo longo. Estou usando 5000. 

Preciso ver o código de alguém que conseguiu, pois muitos parecem ter chegado nesta mesma situação, talvez tenha uma função "própria" a ser testada.

Mudando o domínio do tempo vc pode manipular bastante o erro. 

Em resposta à Daniela Passos Maia

Re: Dicas para EP parabólica

por Cassiano Reinert Novais dos Santos -

Pra mim também tá acontecendo o mesmo agora que tenho diminuído cada vez mais a tolerância quando faço a comparação em relação à variação relativa.

Testei também com critério de parada dado como proposto pelo professor. E também cheguei na malha com 128 divisões, com a diferença dos erros dando próximo de 2. Está demorando bastante mas tá chegando.

Parece que os resultados estão ficando parecidos.

Em resposta à Cassiano Reinert Novais dos Santos

Re: Dicas para EP parabólica

por Carla Reis -

Usando como critério de parada a variação absoluta entre o u da iteração k e o u  da iteração k+1 (genericamente), dentro do Gauss Seidel e, enquanto esta variação fosse maior que dt/10 (sugerido pelo prof. e colegas), consegui, para a norma infinita, a razão do erro caindo perto de 2^2, com dt = min{(dx)²,(dy)²}.

Mas para a norma dois,  no mesmo caso acima, consigo o erro caindo perto de 2^1, o que não acho que está certo.

Está ocorrendo isso com mais alguém?

P.S. : até agora testei apenas para matrizes até o tamanho 256, pretendo aumentar o refinamento, embora demore também.

Em resposta à Carla Reis

Re: Dicas para EP parabólica

por Andreza Lukosiunas -

Usei esse critério dentro do G-S para dt =min(dx, dy) com tolerância = 0,1*dt : a razão 

do erro global anterior com atual vai para 2, i.é log na base 2 da razão vai para 1, sendo o erro

a norma máxima.

Como o professor decidiu fazer esta tarefa também vou aguardar os resultados dele, cheguei a 

conclusão que estamos fazendo o código certo, só precisamos saber a melhor forma de calcular erros 

e uma função com boa convergência. 

Em resposta à Carla Reis

Re: Dicas para EP parabólica

por Daniela Passos Maia -

Olá!

Carla, isso aconteceu comigo também. No caso dt=min{dx²,dy²}  consegui a razão entre os erros na norma do sup indo para 4, mas na norma 2, estava indo para 2. O erro pode estar no cálculo da norma 2:

Veja se é assim que vc está calculando:

||e|| = [sqrt (somatório [( u_ij - ue_ij )²*dx*dy] ) ]/ (Area do domínio)

Eu estava calculando errado, i.e., se multiplicar por dxdy e sem dividir pela área do domínio.

Assim que arrumei isso, começou a dar certo.

Daniela

Em resposta à Daniela Passos Maia

Re: Dicas para EP parabólica

por Carla Reis -

Obrigada Andreza e Daniela, vou arrumar a norma dois e verificar.

Em resposta à Carla Reis

Re: Dicas para EP parabólica

por Daniela Passos Maia -

Oi pessoal!

Quero compartilhar com vocês o meu ep da equação parabólica. O codigo está em C++.

Para a solução manufaturada usei a função exp(-t)cos(x+y), mas com a função exp(-t)(cos(x)+senSim) também funcionou. 

Espero que possa ajudar!

Daniela