Á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
 
(4 revisões intermediárias por um outro usuário 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:  
F(x) = f(x) + x
<math>F(x) = f(x) + x</math>


F'(x) é a derivada de F(x) com relação à x
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>.




Linha 89: Linha 88:




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 f(x) 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 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 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 128: 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 f(x)= a *exp( f * x ),  onde <math>f(x)=sigma</math>  e  <math>x=w/c</math> ajuste sigma aos dados da tabela.  
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 f(x) fazendo uma substituição de variável:  <math>f2(x) = ln*f(x) = ln(a) - b x</math>. Isto recai exatamente na função linear <math>f(x)-=a0+a1x</math>, onde <math>a0=exp(a)</math> e <math>a1=-b</math>.
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 os pontos da tabela e a função obtida.
 
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).