Área 3: mudanças entre as edições

De Física Computacional
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(6 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 6: Linha 6:


2 - Em aula fizemos um algoritmo que interpola um conjunto de pontos usando o algoritmo de Neville.
2 - Em aula fizemos um algoritmo que interpola um conjunto de pontos usando o algoritmo de Neville.
Na ocasião, eu propus que os polinômios fossem mapeados em uma matriz quadrada A de dimensão NxN, onde os elementos da primeira coluna eram os pontos P11, P22, P33, etc e os demais elementos eram colocados nas demais colunas...
Na ocasião, eu propus que os polinómios fossem mapeados em uma matriz quadrada A de dimensão NxN, onde os elementos da primeira coluna eram os pontos P11, P22, P33, etc e os demais elementos eram colocados nas demais colunas...
Agora eu quero propor uma outra maneira de mapear e isto implica uma outra maneira de construir o algoritmo. O objetivo é que você ENTENDA os passos, construa o seu algortimo com calma.  
Agora eu quero propor uma outra maneira de mapear e isto implica uma outra maneira de construir o algoritmo. O objetivo é que você ENTENDA os passos, construa o seu algoritmo com calma.  
Mapeie da seguinte maneira:
Mapeie da seguinte maneira:
os polinômios P11, P22, P33, etc (os quais são dados do problema) são colocados na diagonal principal da matrix A (A[1][1], A[2][2], etc). Em seguida, os polinômios P12, P23, P34, etc, são colocados na diagonal seguinte (A[1][2], A[2][3], etc) . Os poliômios P123, P234, etc na outra diagonal (A[1][3], A[2][4], etc) e assim sucessivamente.
os polinómios P11, P22, P33, etc (os quais são dados do problema) são colocados na diagonal principal da matriz A (A[1][1], A[2][2], etc). Em seguida, os polinómios P12, P23, P34, etc, são colocados na diagonal seguinte (A[1][2], A[2][3], etc) . Os polinómios P123, P234, etc na outra diagonal (A[1][3], A[2][4], etc) e assim sucessivamente.
Este algoritmo terá uma fórmula de recorrência difente daquele feito em aula e também a maneira de variar os índices será outra.
Este algoritmo terá uma fórmula de recorrência diferente daquele feito em aula e também a maneira de variar os índices será outra.


Use os seguintes N=4 pontos como dados de entrada:
Use os seguintes N=4 pontos como dados de entrada:
Linha 21: Linha 21:


4.500000 -0.977530
4.500000 -0.977530


Uma vez que o algoritmo esteja funcionando para N=4, use os seguintes N=9 pontos:
Uma vez que o algoritmo esteja funcionando para N=4, use os seguintes N=9 pontos:
Linha 47: Linha 46:




3 - Use o algorimo construído em 8 para interpolar os seguintes N=11 pontos:
3 - Use o algoritmo construído em 2 para interpolar os seguintes N=11 pontos:


0.000000 -0.200000
0.000000 -0.200000
Linha 78: Linha 77:


Legenda para esta seção:  
Legenda para esta seção:  
:<math>F(x) = f(x) + x </math>
<math>F(x) = f(x) + x</math>
<math>F'(x)</math> é a derivada de <math>F(x)</math> com relação à <math>x</math>


F'(x) é a derivada de F(x) com relação à x


Considere a função <math>f(x) = exp(-0.1*x)*sin(2*x)</math>.


Considere a função <math>f(x) = e^{-x/10}\sin(2x)</math>.


4 - Faça no gnuplot um gráfico desta função dentro do intervalo pedido [-5:5]. Desenhe junto a linha <math>y=0</math> para que você possa visualizar graficamente quantas raízes há neste intervalo.


4 - Faça no gnuplot um gráfico desta função dentro do intervalo pedido [-5:5]. Desenhe junto a linha y=0 para que você possa visualizar graficamente quantas raízes há neste intervalo.


5 - Retome o programa (fornecido em aula e que está no moodle) que calcula zeros de funções usando o método de Newton-Raphson e adapte-do para encotrar TODOS os zeros da função <math>f(x)</math> no intervalo [-5:5]. Imprima estas raízes num arquivo chamado raizes.dat.
 
5 - Retome o programa (fornecido em aula e que está no Moodle) que calcula zeros de funções usando o método de Newton-Raphson e adapte-do para encontrar TODOS os zeros da função f(x) no intervalo [-5:5]. Imprima estas raízes num arquivo chamado raizes.dat.
Fundamental se dar conta de alguns "detalhes" antes de executar esta tarefa:
Fundamental se dar conta de alguns "detalhes" antes de executar esta tarefa:
* Como o método de Newton-Raphson encontra apenas uma raiz para cada valor "chute" de x ("x_init"), então você deverá relançar o método várias vezes até encontrar todas as raízes do intervalo. Isto exige que você faça um loop variando "x_init" e, para cada x_init, você aplica o método de iteração.
* Como o método de Newton-Raphson encontra apenas uma raiz para cada valor "chute" de x ("x_init"), então você deverá relançar o método várias vezes até encontrar todas as raízes do intervalo. Isto exige que você faça um loop variando "x_init" e, para cada x_init, você aplica o método de iteração.
* Note que o método pode (e provavelmente vai) encontrar a mesma raiz mais de uma vez. Você não deve estocar raízes repedidas! e isto implica que você deve pensar em uma maneira de fazer isto (dicas no final da lista para os que quiserem)
* Note que o método pode (e provavelmente vai) encontrar a mesma raiz mais de uma vez. Você não deve estocar raízes repetidas! e isto implica que você deve pensar em uma maneira de fazer isto (dicas no final da lista para os que quiserem)




6 - Faça exatamente o mesmo procedimento que fizeste no problema 5 com o método de iteração simples. Uma vez feito o algoritmo do problema 5, basta você alterar a parte que calcula a iteração para usar o método de iteração simples visto em aula.  
6 - Faça exatamente o mesmo procedimento que fizeste no problema 5 com o método de iteração simples. Uma vez feito o algoritmo do problema 5, basta você alterar a parte que calcula a iteração para usar o método de iteração simples visto em aula.  
Usando este método, quantas raízes você consegue encontrar?  
Usando este método, quantas raízes você consegue encontrar?  
Calcule <math>F'(x)</math> para cada raiz encontrada no problema 5 e interprete o resultado que você acaba de obter à luz do que foi discutido em aula sobre a estabalidade do método de iteração simples.
Calcule F'(x) para cada raiz encontrada no problema 5 e interprete o resultado que você acaba de obter à luz do que foi discutido em aula sobre a estabilidade do método de iteração simples.




Linha 118: Linha 118:
y:  0.62    0.63    0.64    0.66    0.68    0.71  0.76    0.81    0.89  1.00
y:  0.62    0.63    0.64    0.66    0.68    0.71  0.76    0.81    0.89  1.00


Ajuste uma função do tipo <math<f(x) = a0+a1*x+a2*x2</math> usando o método dos mínimos quadrados. Depois faça um gráfico usando os pontos da tabela e compare com a curva teórica que você calculou.
Ajuste uma função do tipo f(x) = a0+a1*x+a2*x2 usando o método dos mínimos quadrados. Depois faça um gráfico usando os pontos da tabela e compare com a curva teórica que você calculou.




Linha 127: Linha 127:
sigma:    7000  6125  5237    4665    4123  3810  3107    3070    2580    2287
sigma:    7000  6125  5237    4665    4123  3810  3107    3070    2580    2287


Usando o método dos mínimos quadrados e utilizando uma função do tipo <math>f(x)= a0*exp(-a1* w/c )</math>, ajuste sigma aos dados da tabela. Grafique os pontos da tabela e a função obtida.
Usando o método dos mínimos quadrados e utilizando uma função do tipo <math>g(x)= a e^{-bx}</math> ,  onde <math>g(x)=sigma</math>  e  <math>x=w/c</math>, ajuste sigma aos dados da tabela.  
Note que é possível linearizar a g(x) fazendo uma substituição de variável:  <math>f(x) = ln(g(x)) = ln(a) - b x</math>. Isto recai exatamente na função linear <math>f(x)=a_0+a_1x</math>, onde <math>a_0=ln(a)</math> e <math>a_1=-b</math>.  É importante dar-se conta, no momento de ajustar a g(x), que você usou o <math>ln(g(x))</math>  para chegar a sua forma linearizada. Portanto, no momento de ajustar os pontos fornecidos, você deve também  transformar o "sigma" pela mesma função: <math>ln(sigma)</math>.
 
Grafique junto os pontos fornecidos na tabela acima com a função exponencial g(x) (usando obviamente os valores de a e b encontrados com o seu programa).

Edição atual tal como às 14h05min de 14 de abril de 2016

A) Interpolação e Extrapolação


1 - Explique a ideia do algoritmo de Neville (linhas gerais).


2 - Em aula fizemos um algoritmo que interpola um conjunto de pontos usando o algoritmo de Neville. Na ocasião, eu propus que os polinómios fossem mapeados em uma matriz quadrada A de dimensão NxN, onde os elementos da primeira coluna eram os pontos P11, P22, P33, etc e os demais elementos eram colocados nas demais colunas... Agora eu quero propor uma outra maneira de mapear e isto implica uma outra maneira de construir o algoritmo. O objetivo é que você ENTENDA os passos, construa o seu algoritmo com calma. Mapeie da seguinte maneira: os polinómios P11, P22, P33, etc (os quais são dados do problema) são colocados na diagonal principal da matriz A (A[1][1], A[2][2], etc). Em seguida, os polinómios P12, P23, P34, etc, são colocados na diagonal seguinte (A[1][2], A[2][3], etc) . Os polinómios P123, P234, etc na outra diagonal (A[1][3], A[2][4], etc) e assim sucessivamente. Este algoritmo terá uma fórmula de recorrência diferente daquele feito em aula e também a maneira de variar os índices será outra.

Use os seguintes N=4 pontos como dados de entrada:

0.000000 0.000000

1.500000 0.997495

3.000000 0.141120

4.500000 -0.977530

Uma vez que o algoritmo esteja funcionando para N=4, use os seguintes N=9 pontos:

0.000000 0.000000

0.750000 0.681639

1.500000 0.997495

2.250000 0.778073

3.000000 0.141120

3.750000 -0.571561

4.500000 -0.977530

5.250000 -0.858935

6.000000 -0.279415


O ideal é fazer um programa que leia estes dados de dentro de um arquivo de entrada e faça a interpolação para um valor de N qualquer que o usuário queira.


3 - Use o algoritmo construído em 2 para interpolar os seguintes N=11 pontos:

0.000000 -0.200000

0.600000 -0.227273

1.200000 -0.263158

1.800000 -0.312500

2.400000 -0.384615

3.000000 -0.500000

3.600000 -0.714286

4.200000 -1.250000

4.800000 -4.999993

5.400000 2.500002

6.000000 1.000000

Desenhe no gnuplot estes pontos e os valores interpolados pelo seu programa. Varie x entre 0 e 6 varrendo x a cada 0.2.


B) Zeros de Funções


Legenda para esta seção:

F'(x) é a derivada de F(x) com relação à x


Considere a função .


4 - Faça no gnuplot um gráfico desta função dentro do intervalo pedido [-5:5]. Desenhe junto a linha y=0 para que você possa visualizar graficamente quantas raízes há neste intervalo.


5 - Retome o programa (fornecido em aula e que está no Moodle) que calcula zeros de funções usando o método de Newton-Raphson e adapte-do para encontrar TODOS os zeros da função f(x) no intervalo [-5:5]. Imprima estas raízes num arquivo chamado raizes.dat. Fundamental se dar conta de alguns "detalhes" antes de executar esta tarefa:

  • Como o método de Newton-Raphson encontra apenas uma raiz para cada valor "chute" de x ("x_init"), então você deverá relançar o método várias vezes até encontrar todas as raízes do intervalo. Isto exige que você faça um loop variando "x_init" e, para cada x_init, você aplica o método de iteração.
  • Note que o método pode (e provavelmente vai) encontrar a mesma raiz mais de uma vez. Você não deve estocar raízes repetidas! e isto implica que você deve pensar em uma maneira de fazer isto (dicas no final da lista para os que quiserem)


6 - Faça exatamente o mesmo procedimento que fizeste no problema 5 com o método de iteração simples. Uma vez feito o algoritmo do problema 5, basta você alterar a parte que calcula a iteração para usar o método de iteração simples visto em aula. Usando este método, quantas raízes você consegue encontrar? Calcule F'(x) para cada raiz encontrada no problema 5 e interprete o resultado que você acaba de obter à luz do que foi discutido em aula sobre a estabilidade do método de iteração simples.


7- método de bissecção: discuta brevemente as desvantagens deste método.


Dicas para o problema 5 (no ponto onde você vai verificar se a nova raiz encontrada já foi calculada) a) você pode estocar as raízes em uma matriz (ex raizes[] ) e, a cada vez que o algoritmo encontra uma raiz, ele deve comparar com as demais raízes já estocadas na matriz raizes[]. b) quando você for comparar a nova raiz encontrada (digamos x) com os elementos da matriz raizes[] (digamos raizes[i]), perceba que você estará comparando números reais. Então cuidado com os operadores de igual (==) ou diferente (!=), pois um número será diferente do outro se e somente se todas os algarismos significativos o forem! portanto, ao invés de comparar se x!=raizes[i], faça fabs(x-raizes[i]) < PRECISAO, onde fmod(a) é o módulo de a. c) não hesite em "debugar" o seu programa ! Isto vai ajudá-la(o) a entender o que há de errado.


C) Ajuste de curvas usando o método dos mínimos quadrados



8) Dados os pontos;

x: 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00

y: 0.62 0.63 0.64 0.66 0.68 0.71 0.76 0.81 0.89 1.00

Ajuste uma função do tipo f(x) = a0+a1*x+a2*x2 usando o método dos mínimos quadrados. Depois faça um gráfico usando os pontos da tabela e compare com a curva teórica que você calculou.


9) A resistência à compressão do concreto ( chamada de sigma ), decresce com o aumento da razão água/cimento (w/c, cuja unidade é em galões de água por saco de cimento). A resistência à compressão de várias amostras é dada na tabela a seguir:

w/c: 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0

sigma: 7000 6125 5237 4665 4123 3810 3107 3070 2580 2287

Usando o método dos mínimos quadrados e utilizando uma função do tipo , onde e , ajuste o sigma aos dados da tabela. Note que é possível linearizar a g(x) fazendo uma substituição de variável: . Isto recai exatamente na função linear , onde e . É importante dar-se conta, no momento de ajustar a g(x), que você usou o para chegar a sua forma linearizada. Portanto, no momento de ajustar os pontos fornecidos, você deve também transformar o "sigma" pela mesma função: .

Grafique junto os pontos fornecidos na tabela acima com a função exponencial g(x) (usando obviamente os valores de a e b encontrados com o seu programa).