62
Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson Diferenciação Numérica Alexandre Rosas Departamento de Física Universidade Federal da Paraíba 19 de Março de 2009 Alexandre Rosas Diferenciação Numérica

Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Diferenciação Numérica

Alexandre Rosas

Departamento de FísicaUniversidade Federal da Paraíba

19 de Março de 2009

Alexandre Rosas Diferenciação Numérica

Page 2: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

O problema

Como calcular?

df (x)

dx= lim

h→0

f (x + h)− f (x)

h

Expansão em série de Taylor

f (x + h) = f (x) + hf ′(x) +h2f ′′(x)

2. . .

Logo, podemos estimar a derivada como

f ′c(x) ≈ f (x + h)− f (x)

h≈ f ′(x) +

hf ′′(x)

2. . .

Erro é de ordem h!

Alexandre Rosas Diferenciação Numérica

Page 3: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

O problema

Como calcular?

df (x)

dx= lim

h→0

f (x + h)− f (x)

h

Expansão em série de Taylor

f (x + h) = f (x) + hf ′(x) +h2f ′′(x)

2. . .

Logo, podemos estimar a derivada como

f ′c(x) ≈ f (x + h)− f (x)

h≈ f ′(x) +

hf ′′(x)

2. . .

Erro é de ordem h!

Alexandre Rosas Diferenciação Numérica

Page 4: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

O problema

Como calcular?

df (x)

dx= lim

h→0

f (x + h)− f (x)

h

Expansão em série de Taylor

f (x + h) = f (x) + hf ′(x) +h2f ′′(x)

2. . .

Logo, podemos estimar a derivada como

f ′c(x) ≈ f (x + h)− f (x)

h≈ f ′(x) +

hf ′′(x)

2. . .

Erro é de ordem h!

Alexandre Rosas Diferenciação Numérica

Page 5: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

O problema

Como calcular?

df (x)

dx= lim

h→0

f (x + h)− f (x)

h

Expansão em série de Taylor

f (x + h) = f (x) + hf ′(x) +h2f ′′(x)

2. . .

Logo, podemos estimar a derivada como

f ′c(x) ≈ f (x + h)− f (x)

h≈ f ′(x) +

hf ′′(x)

2. . .

Erro é de ordem h!

Alexandre Rosas Diferenciação Numérica

Page 6: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Derivada numérica – primeira tentativa

x-2h x-h x x+h x+2h

f(x-h)

f(x)

f(x+h)

Alexandre Rosas Diferenciação Numérica

Page 7: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Análise do método

Usando dois pontos, podemos calcular a derivada de duasformas

f ′2(x) =f (x + h)− f (x)

h

f ′2(x) =f (x)− f (x − h)

h

Em ambos os casos, o erro é de ordem hPara f (x) = a + bx2, f ′2(x) = 2bx+h

Alexandre Rosas Diferenciação Numérica

Page 8: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Análise do método

Usando dois pontos, podemos calcular a derivada de duasformas

f ′2(x) =f (x + h)− f (x)

h

f ′2(x) =f (x)− f (x − h)

h

Em ambos os casos, o erro é de ordem hPara f (x) = a + bx2, f ′2(x) = 2bx+h

Alexandre Rosas Diferenciação Numérica

Page 9: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Simetrizando

Expandindo em série de Taylor

f±h = f (x ± h) = f (x)± hf ′ +h2f ′′

2± h3f ′′′

6+O(h4)

Subtraindo as expressões

f ′3 =fh − f−h

2h− h2f ′′′

6

Erro de ordem h2

Alexandre Rosas Diferenciação Numérica

Page 10: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Simetrizando

Expandindo em série de Taylor

f±h = f (x ± h) = f (x)± hf ′ +h2f ′′

2± h3f ′′′

6+O(h4)

Subtraindo as expressões

f ′3 =fh − f−h

2h− h2f ′′′

6

Erro de ordem h2

Alexandre Rosas Diferenciação Numérica

Page 11: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Simetrizando

Expandindo em série de Taylor

f±h = f (x ± h) = f (x)± hf ′ +h2f ′′

2± h3f ′′′

6+O(h4)

Subtraindo as expressões

f ′3 =fh − f−h

2h− h2f ′′′

6

Erro de ordem h2

Alexandre Rosas Diferenciação Numérica

Page 12: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Segunda derivada

Definição

d2f (x)

dx2 = limh→0

f (x + h)− 2f (x) + f (x − h)

h2

Expansão em série de Taylor

f±h = f (x ± h) = f (x)± hf ′ +h2f ′′

2± h3f ′′′

6+

h4f (4)

24+O(h5)

f ′′c (x) =f (x + h)− 2f (x) + f (x − h)

h2 +O(h2)

Erro é de ordem h2!

Alexandre Rosas Diferenciação Numérica

Page 13: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Segunda derivada

Definição

d2f (x)

dx2 = limh→0

f (x + h)− 2f (x) + f (x − h)

h2

Expansão em série de Taylor

f±h = f (x ± h) = f (x)± hf ′ +h2f ′′

2± h3f ′′′

6+

h4f (4)

24+O(h5)

f ′′c (x) =f (x + h)− 2f (x) + f (x − h)

h2 +O(h2)

Erro é de ordem h2!

Alexandre Rosas Diferenciação Numérica

Page 14: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Segunda derivada

Definição

d2f (x)

dx2 = limh→0

f (x + h)− 2f (x) + f (x − h)

h2

Expansão em série de Taylor

f±h = f (x ± h) = f (x)± hf ′ +h2f ′′

2± h3f ′′′

6+

h4f (4)

24+O(h5)

f ′′c (x) =f (x + h)− 2f (x) + f (x − h)

h2 +O(h2)

Erro é de ordem h2!

Alexandre Rosas Diferenciação Numérica

Page 15: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Segunda derivada

Definição

d2f (x)

dx2 = limh→0

f (x + h)− 2f (x) + f (x − h)

h2

Expansão em série de Taylor

f±h = f (x ± h) = f (x)± hf ′ +h2f ′′

2± h3f ′′′

6+

h4f (4)

24+O(h5)

f ′′c (x) =f (x + h)− 2f (x) + f (x − h)

h2 +O(h2)

Erro é de ordem h2!

Alexandre Rosas Diferenciação Numérica

Page 16: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Cabeçalho

#include <stdio.h>#include <stdlib.h>#include <math.h>

void initialize (double *, double *, int *);void second_derivative (int, double,double, double *, double *);

void output (double *, double *, double, int);double funcao(double);

main(){

bibliotecas

protótipo das funções

Alexandre Rosas Diferenciação Numérica

Page 17: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Cabeçalho

#include <stdio.h>#include <stdlib.h>#include <math.h>

void initialize (double *, double *, int *);void second_derivative (int, double,double, double *, double *);

void output (double *, double *, double, int);double funcao(double);

main(){

bibliotecas

protótipo das funções

Alexandre Rosas Diferenciação Numérica

Page 18: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

main()

main(){int number_of_steps;double x, initial_step;double *h_step, *computed_derivative;

initialize(&initial_step, &x, &number_of_steps);

h_step=malloc(number_of_steps*sizeof(double));computed_derivative=malloc(number_of_steps*sizeof(double));

second_derivative(number_of_steps, x, initial_step,h_step, computed_derivative);

output(h_step, computed_derivative, x, number_of_steps);

free(h_step);free(computed_derivative);exit(0);

def. variáveis

inicialização

alocação de memória

cálculo de d2ex

dx2

saída de dados

liberação de memória

Alexandre Rosas Diferenciação Numérica

Page 19: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

main()

main(){int number_of_steps;double x, initial_step;double *h_step, *computed_derivative;

initialize(&initial_step, &x, &number_of_steps);

h_step=malloc(number_of_steps*sizeof(double));computed_derivative=malloc(number_of_steps*sizeof(double));

second_derivative(number_of_steps, x, initial_step,h_step, computed_derivative);

output(h_step, computed_derivative, x, number_of_steps);

free(h_step);free(computed_derivative);exit(0);

def. variáveis

inicialização

alocação de memória

cálculo de d2ex

dx2

saída de dados

liberação de memória

Alexandre Rosas Diferenciação Numérica

Page 20: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

main()

main(){int number_of_steps;double x, initial_step;double *h_step, *computed_derivative;

initialize(&initial_step, &x, &number_of_steps);

h_step=malloc(number_of_steps*sizeof(double));computed_derivative=malloc(number_of_steps*sizeof(double));

second_derivative(number_of_steps, x, initial_step,h_step, computed_derivative);

output(h_step, computed_derivative, x, number_of_steps);

free(h_step);free(computed_derivative);exit(0);

def. variáveis

inicialização

alocação de memória

cálculo de d2ex

dx2

saída de dados

liberação de memória

Alexandre Rosas Diferenciação Numérica

Page 21: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

main()

main(){int number_of_steps;double x, initial_step;double *h_step, *computed_derivative;

initialize(&initial_step, &x, &number_of_steps);

h_step=malloc(number_of_steps*sizeof(double));computed_derivative=malloc(number_of_steps*sizeof(double));

second_derivative(number_of_steps, x, initial_step,h_step, computed_derivative);

output(h_step, computed_derivative, x, number_of_steps);

free(h_step);free(computed_derivative);exit(0);

def. variáveis

inicialização

alocação de memória

cálculo de d2ex

dx2

saída de dados

liberação de memória

Alexandre Rosas Diferenciação Numérica

Page 22: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

main()

main(){int number_of_steps;double x, initial_step;double *h_step, *computed_derivative;

initialize(&initial_step, &x, &number_of_steps);

h_step=malloc(number_of_steps*sizeof(double));computed_derivative=malloc(number_of_steps*sizeof(double));

second_derivative(number_of_steps, x, initial_step,h_step, computed_derivative);

output(h_step, computed_derivative, x, number_of_steps);

free(h_step);free(computed_derivative);exit(0);

def. variáveis

inicialização

alocação de memória

cálculo de d2ex

dx2

saída de dados

liberação de memória

Alexandre Rosas Diferenciação Numérica

Page 23: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

main()

main(){int number_of_steps;double x, initial_step;double *h_step, *computed_derivative;

initialize(&initial_step, &x, &number_of_steps);

h_step=malloc(number_of_steps*sizeof(double));computed_derivative=malloc(number_of_steps*sizeof(double));

second_derivative(number_of_steps, x, initial_step,h_step, computed_derivative);

output(h_step, computed_derivative, x, number_of_steps);

free(h_step);free(computed_derivative);exit(0);

def. variáveis

inicialização

alocação de memória

cálculo de d2ex

dx2

saída de dados

liberação de memória

Alexandre Rosas Diferenciação Numérica

Page 24: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Inicialização

void initialize(double *initial_step, double *x,int *number_of_steps)

{printf("Valor de x: ");scanf("%lf", x);printf("Valor inicial de h: ");scanf("%lf", initial_step);printf("Número de passos: ");scanf("%d", number_of_steps);

}

ponteiros endereço de armazenamento

Alexandre Rosas Diferenciação Numérica

Page 25: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Cálculo da segunda derivada

void second_derivative(int number_of_steps, double x,double initial_step, double *h_step, double *computed_derivative)

{int counter;double y, derivative, h;h = initial_step;for(counter = 0; counter < number_of_steps; counter++){

h_step[counter] = h;computed_derivative[counter] = (funcao(x+h)-2.0*funcao(x)

+funcao(x-h))/(h*h);h *= 0.1;

}}

h inicial

laço dos passos

armazena h

calcula derivadaobtém novo h

Alexandre Rosas Diferenciação Numérica

Page 26: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Cálculo da segunda derivada

void second_derivative(int number_of_steps, double x,double initial_step, double *h_step, double *computed_derivative)

{int counter;double y, derivative, h;h = initial_step;for(counter = 0; counter < number_of_steps; counter++){

h_step[counter] = h;computed_derivative[counter] = (funcao(x+h)-2.0*funcao(x)

+funcao(x-h))/(h*h);h *= 0.1;

}}

h inicial

laço dos passos

armazena h

calcula derivadaobtém novo h

Alexandre Rosas Diferenciação Numérica

Page 27: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Cálculo da segunda derivada

void second_derivative(int number_of_steps, double x,double initial_step, double *h_step, double *computed_derivative)

{int counter;double y, derivative, h;h = initial_step;for(counter = 0; counter < number_of_steps; counter++){

h_step[counter] = h;computed_derivative[counter] = (funcao(x+h)-2.0*funcao(x)

+funcao(x-h))/(h*h);h *= 0.1;

}}

h inicial

laço dos passos

armazena h

calcula derivadaobtém novo h

Alexandre Rosas Diferenciação Numérica

Page 28: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Cálculo da segunda derivada

void second_derivative(int number_of_steps, double x,double initial_step, double *h_step, double *computed_derivative)

{int counter;double y, derivative, h;h = initial_step;for(counter = 0; counter < number_of_steps; counter++){

h_step[counter] = h;computed_derivative[counter] = (funcao(x+h)-2.0*funcao(x)

+funcao(x-h))/(h*h);h *= 0.1;

}}

h inicial

laço dos passos

armazena h

calcula derivadaobtém novo h

Alexandre Rosas Diferenciação Numérica

Page 29: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Cálculo da segunda derivada

void second_derivative(int number_of_steps, double x,double initial_step, double *h_step, double *computed_derivative)

{int counter;double y, derivative, h;h = initial_step;for(counter = 0; counter < number_of_steps; counter++){

h_step[counter] = h;computed_derivative[counter] = (funcao(x+h)-2.0*funcao(x)

+funcao(x-h))/(h*h);h *= 0.1;

}}

h inicial

laço dos passos

armazena h

calcula derivadaobtém novo h

Alexandre Rosas Diferenciação Numérica

Page 30: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Saída de dados

void output(double *h_step, double *computed_derivative,double x, int number_of_steps)

{int counter;FILE *output;

output=fopen("saida.dat", "a")for(counter = 0; counter < number_of_steps; counter++){

fprintf(output, "%f %f\n", h_step[counter],computed_derivative[counter]);

}fclose(output);

}

Abrindo arquivo

Escrevendo resultado

Fechando arquivo

Alexandre Rosas Diferenciação Numérica

Page 31: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Saída de dados

void output(double *h_step, double *computed_derivative,double x, int number_of_steps)

{int counter;FILE *output;

output=fopen("saida.dat", "a")for(counter = 0; counter < number_of_steps; counter++){

fprintf(output, "%f %f\n", h_step[counter],computed_derivative[counter]);

}fclose(output);

}

Abrindo arquivo

Escrevendo resultado

Fechando arquivo

Alexandre Rosas Diferenciação Numérica

Page 32: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Saída de dados

void output(double *h_step, double *computed_derivative,double x, int number_of_steps)

{int counter;FILE *output;

output=fopen("saida.dat", "a")for(counter = 0; counter < number_of_steps; counter++){

fprintf(output, "%f %f\n", h_step[counter],computed_derivative[counter]);

}fclose(output);

}

Abrindo arquivo

Escrevendo resultado

Fechando arquivo

Alexandre Rosas Diferenciação Numérica

Page 33: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Função

double funcao(double x){return exp(x);

}

Alexandre Rosas Diferenciação Numérica

Page 34: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Erro da aproximação e erro numérico

Matematicamente, diminuir h ⇒ diminuir erroComputacionalmente, diminuir h ⇒ aumentar erro dearredondamento

f ′′c (x) =f (x + h)− 2f (x) + f (x − h)

h2 ≤ εMh2

Pois o cálculo de d2fdx2 envolve diferença de números

próximos!

Erro (definição)

ε = log10

∣∣∣∣ f ′′comp − f ′′exact

f ′′exact

∣∣∣∣Alexandre Rosas Diferenciação Numérica

Page 35: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Erro da aproximação e erro numérico

Matematicamente, diminuir h ⇒ diminuir erroComputacionalmente, diminuir h ⇒ aumentar erro dearredondamento

f ′′c (x) =f (x + h)− 2f (x) + f (x − h)

h2 ≤ εMh2

Pois o cálculo de d2fdx2 envolve diferença de números

próximos!

Erro (definição)

ε = log10

∣∣∣∣ f ′′comp − f ′′exact

f ′′exact

∣∣∣∣Alexandre Rosas Diferenciação Numérica

Page 36: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Erro da aproximação e erro numérico

Matematicamente, diminuir h ⇒ diminuir erroComputacionalmente, diminuir h ⇒ aumentar erro dearredondamento

f ′′c (x) =f (x + h)− 2f (x) + f (x − h)

h2 ≤ εMh2

Pois o cálculo de d2fdx2 envolve diferença de números

próximos!

Erro (definição)

ε = log10

∣∣∣∣ f ′′comp − f ′′exact

f ′′exact

∣∣∣∣Alexandre Rosas Diferenciação Numérica

Page 37: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Erro da aproximação e erro numérico

Matematicamente, diminuir h ⇒ diminuir erroComputacionalmente, diminuir h ⇒ aumentar erro dearredondamento

f ′′c (x) =f (x + h)− 2f (x) + f (x − h)

h2 ≤ εMh2

Pois o cálculo de d2fdx2 envolve diferença de números

próximos!

Erro (definição)

ε = log10

∣∣∣∣ f ′′comp − f ′′exact

f ′′exact

∣∣∣∣Alexandre Rosas Diferenciação Numérica

Page 38: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Erro da aproximação e erro numérico

-9

-8

-7

-6

-5

-4

-3

-2

-1

-7 -6 -5 -4 -3 -2 -1

ε

log10(h)

x = 0x = 1x = 2x = 3x = 4x = 5

εaprox ∼ h2εarredond

Alexandre Rosas Diferenciação Numérica

Page 39: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Erro da aproximação e erro numérico

-9

-8

-7

-6

-5

-4

-3

-2

-1

-7 -6 -5 -4 -3 -2 -1

ε

log10(h)

x = 0x = 1x = 2x = 3x = 4x = 5

εaprox ∼ h2εarredond

Alexandre Rosas Diferenciação Numérica

Page 40: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Método

Objetivo: melhorar a precisãoIdéia básica: combinar o cálculo da derivada paradiferentes valores de h e extrapolar para h = 0

Exemplo

Sendo D1(h) → 1a ou 2a derivada , temos que:

D1(h) = D0 + a1h2 +O(h4)

AnalogamenteD1(2h) = D0 + 4a1h2 +O(h4)

Portanto,D2(h) =

4D1(h)− D1(2h)

3= D0 +O(h4)

Alexandre Rosas Diferenciação Numérica

Page 41: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Método

Objetivo: melhorar a precisãoIdéia básica: combinar o cálculo da derivada paradiferentes valores de h e extrapolar para h = 0

Exemplo

Sendo D1(h) → 1a ou 2a derivada , temos que:

D1(h) = D0 + a1h2 +O(h4)

AnalogamenteD1(2h) = D0 + 4a1h2 +O(h4)

Portanto,D2(h) =

4D1(h)− D1(2h)

3= D0 +O(h4)

Alexandre Rosas Diferenciação Numérica

Page 42: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Método

Objetivo: melhorar a precisãoIdéia básica: combinar o cálculo da derivada paradiferentes valores de h e extrapolar para h = 0

Exemplo

Sendo D1(h) → 1a ou 2a derivada calculada usando ospontos x − h, x , x + h , temos que:

D1(h) = D0 + a1h2 +O(h4)

AnalogamenteD1(2h) = D0 + 4a1h2 +O(h4)

Portanto,D2(h) =

4D1(h)− D1(2h)

3= D0 +O(h4)

Alexandre Rosas Diferenciação Numérica

Page 43: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Método

Objetivo: melhorar a precisãoIdéia básica: combinar o cálculo da derivada paradiferentes valores de h e extrapolar para h = 0

Exemplo

Sendo D1(h) → 1a ou 2a derivada , temos que:

D1(h) = D0 + a1h2 +O(h4)

onde D0 é o resultado exato. AnalogamenteD1(2h) = D0 + 4a1h2 +O(h4)

Portanto,D2(h) =

4D1(h)− D1(2h)

3= D0 +O(h4)

Alexandre Rosas Diferenciação Numérica

Page 44: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Método

Objetivo: melhorar a precisãoIdéia básica: combinar o cálculo da derivada paradiferentes valores de h e extrapolar para h = 0

Exemplo

Sendo D1(h) → 1a ou 2a derivada , temos que:

D1(h) = D0 + a1h2 +O(h4)

AnalogamenteD1(2h) = D0 + 4a1h2 +O(h4)

Portanto,D2(h) =

4D1(h)− D1(2h)

3= D0 +O(h4)

Alexandre Rosas Diferenciação Numérica

Page 45: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Método

Objetivo: melhorar a precisãoIdéia básica: combinar o cálculo da derivada paradiferentes valores de h e extrapolar para h = 0

Exemplo

Sendo D1(h) → 1a ou 2a derivada , temos que:

D1(h) = D0 + a1h2 +O(h4)

AnalogamenteD1(2h) = D0 + 4a1h2 +O(h4)

Portanto,D2(h) =

4D1(h)− D1(2h)

3= D0 +O(h4)

Alexandre Rosas Diferenciação Numérica

Page 46: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Método

RecursivamenteEscrevendo,

D2(h) = D(0) + a2h4 +O(h6)

D2(2h) = D(0) + 24a2h4 +O(h6)

Temos

D3(h) =24D2(h)− D2(2h)

24 − 1= D0 +O(h6)

Alexandre Rosas Diferenciação Numérica

Page 47: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Método

RecursivamenteEscrevendo,

Dn(h) = D(0) + anh2n +O(h2(n+1))

Dn(2h) = D(0) + 22nanh2n +O(h2(n+1))

Temos

Dn+1(h) =22nDn(h)− Dn(2h)

22n − 1= D0 +O(h2(n+1))

Alexandre Rosas Diferenciação Numérica

Page 48: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Implementação

O que precisamos calcular?

Dn+1(h)

Dn(h)

Dn−1(h)

Dn−2(h)

Dn−2(2h)

Dn−1(2h)

Dn(2h)

Dn−1(2h)

Dn−2(2h)

Dn−2(4h)

Dn−1(4h)

Dn−2(4h)

Dn−2(8h)

D1(h), D1(2h), D1(22h), . . . , D1(2nh)Alexandre Rosas Diferenciação Numérica

Page 49: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Implementação

O que precisamos calcular?

Dn+1(h)

Dn(h)

Dn−1(h)

Dn−2(h)

Dn−2(2h)

Dn−1(2h)

Dn(2h)

Dn−1(2h)

Dn−2(2h)

Dn−2(4h)

Dn−1(4h)

Dn−2(4h)

Dn−2(8h)

D1(h), D1(2h), D1(22h), . . . , D1(2nh)Alexandre Rosas Diferenciação Numérica

Page 50: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Implementação

double **D;

D=(double **)malloc(number_of_steps*sizeof(double));

for(k=0; k<number_of_steps; k++)

D[k]=(double *)malloc((number_of_steps-k)*sizeof(double))

for(k=0; k<number_of_steps; k++)

{

h=(1«k)*initial_step;

D[0][k] = (f(x+h)+f(x-h)-2.0*f(x))/(h*h);

}

Alocando memória para DD[n][k] ≡ Dn(2k h)

Dn(2k h) = f (x+h)−2∗f (x)+f (x−h)

h2

Alexandre Rosas Diferenciação Numérica

Page 51: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Implementação

double **D;

D=(double **)malloc(number_of_steps*sizeof(double));

for(k=0; k<number_of_steps; k++)

D[k]=(double *)malloc((number_of_steps-k)*sizeof(double))

for(k=0; k<number_of_steps; k++)

{

h=(1«k)*initial_step;

D[0][k] = (f(x+h)+f(x-h)-2.0*f(x))/(h*h);

}

Alocando memória para DD[n][k] ≡ Dn(2k h)

Inicializando Dn(2k h)

Dn(2k h) = f (x+h)−2∗f (x)+f (x−h)

h2

Alexandre Rosas Diferenciação Numérica

Page 52: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Implementação

double **D;

D=(double **)malloc(number_of_steps*sizeof(double));

for(k=0; k<number_of_steps; k++)

D[k]=(double *)malloc((number_of_steps-k)*sizeof(double))

for(k=0; k<number_of_steps; k++)

{

h=(1«k)*initial_step;

D[0][k] = (f(x+h)+f(x-h)-2.0*f(x))/(h*h);

}

Alocando memória para DD[n][k] ≡ Dn(2k h)

Inicializando Dn(2k h)

h← 2k h

Dn(2k h) = f (x+h)−2∗f (x)+f (x−h)

h2

Alexandre Rosas Diferenciação Numérica

Page 53: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Implementação

double **D;

D=(double **)malloc(number_of_steps*sizeof(double));

for(k=0; k<number_of_steps; k++)

D[k]=(double *)malloc((number_of_steps-k)*sizeof(double))

for(k=0; k<number_of_steps; k++)

{

h=(1«k)*initial_step;

D[0][k] = (f(x+h)+f(x-h)-2.0*f(x))/(h*h);

}

Alocando memória para DD[n][k] ≡ Dn(2k h)

Inicializando Dn(2k h)

Dn(2k h) = f (x+h)−2∗f (x)+f (x−h)

h2

Alexandre Rosas Diferenciação Numérica

Page 54: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Resultado

x n = 1 n = 2 n = 3 log10

˛̨̨̨f ′′comp−f ′′exact

f ′′exact

˛̨̨̨0.000000 1.00005208 1.00000000 1.00000000 -11.927158611.000000 2.71842341 2.71828182 2.71828183 -11.915192962.000000 7.38944095 7.38905607 7.38905610 -12.167809763.000000 20.08658307 20.08553684 20.08553692 -11.991900754.000000 54.60099375 54.59814980 54.59815003 -11.662923275.000000 148.42088912 148.41315846 148.41315910 -12.17189689

Alexandre Rosas Diferenciação Numérica

Page 55: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Resultado

x n = 1 n = 2 n = 3 log10

˛̨̨̨f ′′comp−f ′′exact

f ′′exact

˛̨̨̨0.000000 1.00005208 1.00000000 1.00000000 -11.927158611.000000 2.71842341 2.71828182 2.71828183 -11.915192962.000000 7.38944095 7.38905607 7.38905610 -12.167809763.000000 20.08658307 20.08553684 20.08553692 -11.991900754.000000 54.60099375 54.59814980 54.59815003 -11.662923275.000000 148.42088912 148.41315846 148.41315910 -12.17189689

Alexandre Rosas Diferenciação Numérica

Page 56: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Alocação dinâmica de memória

Processo de solicitar e utilizar memória durante execuçãode um programaÚtil quando não se sabe tamanho de um vetor na hora decompilaçãoFunção para alocação de memória:void malloc (tamanho da memória em bytes)

ponteiro_int = (int *) malloc (N * sizeof(int))

Função para liberar memória: void free(ponteiro)

Alexandre Rosas Diferenciação Numérica

Page 57: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Alocação dinâmica de memória

Processo de solicitar e utilizar memória durante execuçãode um programaÚtil quando não se sabe tamanho de um vetor na hora decompilaçãoFunção para alocação de memória:void malloc (tamanho da memória em bytes)

ponteiro_int = (int *) malloc (N * sizeof(int))

Função para liberar memória: void free(ponteiro)

Alexandre Rosas Diferenciação Numérica

Page 58: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Alocação dinâmica de memória

Processo de solicitar e utilizar memória durante execuçãode um programaÚtil quando não se sabe tamanho de um vetor na hora decompilaçãoFunção para alocação de memória:void malloc (tamanho da memória em bytes)

ponteiro_int = (int *) malloc (N * sizeof(int))

Função para liberar memória: void free(ponteiro)

Alexandre Rosas Diferenciação Numérica

Page 59: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Alocação dinâmica de memória

Processo de solicitar e utilizar memória durante execuçãode um programaÚtil quando não se sabe tamanho de um vetor na hora decompilaçãoFunção para alocação de memória:void malloc (tamanho da memória em bytes)

ponteiro_int = (int *) malloc (N * sizeof(int))

castingFunção para liberar memória: void free(ponteiro)

Alexandre Rosas Diferenciação Numérica

Page 60: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Alocação dinâmica de memória

Processo de solicitar e utilizar memória durante execuçãode um programaÚtil quando não se sabe tamanho de um vetor na hora decompilaçãoFunção para alocação de memória:void malloc (tamanho da memória em bytes)

ponteiro_int = (int *) malloc (N * sizeof(int))

operador tamanho de variável ou tipoFunção para liberar memória: void free(ponteiro)

Alexandre Rosas Diferenciação Numérica

Page 61: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Alocação dinâmica de memória

Processo de solicitar e utilizar memória durante execuçãode um programaÚtil quando não se sabe tamanho de um vetor na hora decompilaçãoFunção para alocação de memória:void malloc (tamanho da memória em bytes)

ponteiro_int = (int *) malloc (N * sizeof(int))

tamanho da memória alocadaFunção para liberar memória: void free(ponteiro)

Alexandre Rosas Diferenciação Numérica

Page 62: Diferenciação Numérica - Departamento de Físicaarosas/FisicaComputacional/aula02...Definição Método direto Programa segunda derivada Análise do erro Extrapolação de Richardson

DefiniçãoMétodo direto

Programa segunda derivadaAnálise do erro

Extrapolação de Richardson

Alocação dinâmica de memória

Processo de solicitar e utilizar memória durante execuçãode um programaÚtil quando não se sabe tamanho de um vetor na hora decompilaçãoFunção para alocação de memória:void malloc (tamanho da memória em bytes)

ponteiro_int = (int *) malloc (N * sizeof(int))

Função para liberar memória: void free(ponteiro)

De volta ao programa

Alexandre Rosas Diferenciação Numérica