Buscar

Trabalho teorico e computacional

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE FEDERAL DA BAHIA 
INSTITUTO DE CIÊNCIAS AMBIENTAIS E 
DESENVOLVIMENTO SUSTENTÁVEL- (ICADS) 
COLEGIADO DE FÍSICA 
DISCIPLINA: CALCULO NUMÉRICO 
 
 
 
 
 
 
 
 
 
 
 Dérick	
  Gabriel	
  F.	
  Borges	
  	
  
 
 
 Calculo	
  numérico	
  abordagem	
  teórica	
  e	
  computacional	
  
Professor: Kennedy Morais Fernandes 
 
 
 
 
 
 
 
 
 
 
 
Barreiras-ba, 8 de outobro de 2012 
	
  
	
  
	
  
	
  
 
	
  
	
  
	
  
Sumário	
  	
  	
  
1- Introdução 
-Conceito de calculo numérico 
-Aplicações 
-erros 
 
2- Raizes 
-Método da Bisseção 
-Método de Newton 
-Método da Secante 
 
3- Sistemas Lineares 
-Método da Eliminação Gaussiana 
-Método da Gauss Seidel 
 
4- Ajuste de curvas 
-Métodos do Mínimo Quadrado 
 
5- Interpolação 
-Polinômio de Lagrange 
-Spline Cubico 
 
6- Integração Numérica 
-Regra do Trapézio 
-Método de Simpson 
 
7- Resolução de EDO 
-Método Euler 
-Métodos de Runge Kutta 
 
8- Conclusão 
 
9- Referências 	
  	
  	
  	
  	
  	
  	
  	
  	
  
1. Introdução	
  	
   Cálculo	
   Numérico	
   e	
   o	
   ramo	
   da	
   matemática	
   que	
   desenvolve	
   algoritmos	
  para	
   simular	
   processos	
   matemáticos	
   complexos	
   provenientes	
   do	
   mundo	
   real.	
  Esses	
  algoritmos	
  são	
  seqüência	
  de	
  instruções	
  ordenadas,	
  de	
  modo	
  a	
  fornecer	
  em	
  seu	
   decurso,	
   a	
   solução	
   para	
   um	
   problema	
   específico.	
   No	
   contexto	
   de	
   Cálculo	
  Numérico,	
   os	
   algoritmos	
   são	
   denominados	
   de	
   Métodos	
   Numéricos.[1]	
   Esses	
  métodos	
   se	
   aplicam	
   principalmente	
   a	
   problemas	
   que	
   não	
   apresentam	
   uma	
  solução	
  exata(situação	
  real),	
  portanto	
  precisam	
  ser	
  resolvidos	
  numericamente.	
  	
   Calculo	
   numerico	
   aplica-­‐se	
   as	
   ciências	
   exatas	
   e	
   as	
   engenharias,	
  geralmente	
  em	
  problemas	
  fisicos	
  do	
  contexto	
  real,	
  como:	
  -­‐ elétricidade	
  -­‐ petróleo	
  -­‐ cores	
  	
  -­‐ pressão	
  	
  -­‐ resistência	
  	
  A	
  utilização	
  de	
  simuladores	
  numéricos	
  para	
  determinação	
  da	
  solução	
  de	
  um	
  problema	
  requer	
  a	
  execução	
  da	
  seguinte	
  seqüência	
  de	
  etapas:	
  Etapa	
  1:	
  Definir	
  o	
  problema	
  real	
  a	
  ser	
  resolvido	
  	
  Etapa	
  2:	
  Observar	
  fenômenos,	
   levantar	
  efeitos	
  dominantes	
  e	
  fazer	
  referências	
  a	
  conhecimentos	
  prévios	
  físicos	
  e	
  matemáticos	
  Etapa	
  3:	
  Modelagem,	
  fase	
  de	
  obtenção	
  de	
  um	
  modelo	
  matemático	
  que	
  descreve	
  um	
  problema	
  físico	
  em	
  questão.	
  Etapa	
  4:	
  Resolução,	
  fase	
  de	
  obtenção	
  da	
  solução	
  através	
  da	
  aplicação	
  de	
  métodos	
  numéricos.	
  	
   𝑝𝑟𝑜𝑏𝑙𝑒𝑚𝑎   ⇒𝒎𝒐𝒅𝒆𝒍𝒂𝒈𝒆𝒎   ⇒ 𝑚𝑜𝑑𝑒𝑙𝑜  𝑚𝑎𝑡𝑒𝑚á𝑡𝑖𝑐𝑜   ⇒ 𝒓𝒆𝒔𝒐𝒍𝒖çã𝒐   ⇒ 𝑠𝑜𝑙𝑢çã𝑜	
  	
   Ao	
   se	
   tentar	
   representar	
   um	
   fenômeno	
   físico	
   por	
   meio	
   de	
   um	
   método	
  matemático,	
   raramente	
   se	
   tem	
   uma	
   descrição	
   correta	
   deste	
   fenômeno,	
  normalmente,	
  são	
  necessárias	
  várias	
  simplificações	
  do	
  mundo	
  físico	
  para	
  que	
  se	
  tenha	
  um	
  modelo.	
  Tais	
  simplificações	
  resultam	
  em	
  erros.	
  A	
  resolução	
  de	
  modelos	
  matemáticos	
   exige,	
   muitas	
   vezes,	
   o	
   uso	
   de	
   instrumentos	
   de	
   cálculo	
   que	
  necessitam	
  de	
  aproximações,	
  tais	
  aproximações	
  podem	
  gerar	
  erros,	
  tais	
  como:	
  [1]	
  -­‐ Erros	
  inerentes.	
  -­‐ Erros	
  de	
  arredondamento.	
  -­‐ Erros	
  de	
  truncamento.	
  	
   Erro	
   inerentes,	
   são	
   erros	
   que	
   existem	
   nos	
   dados	
   e	
   são	
   causados	
   pelos	
  erros	
  dos	
  próprios	
  equipamentos	
  utilizados	
  na	
  captaçao	
  dos	
  dados.	
  Erros	
  de	
  arredondamento,	
  são	
  os	
  erros	
  originados	
  pela	
  representação	
  do	
  números	
  reais	
  utilizando-­‐se	
  apenas	
  um	
  numero	
  finito	
  de	
  casas	
  decimais.	
  Erros	
   de	
   truncamento,	
   são	
   os	
   erros	
   causados	
   quando	
   utilizamos	
   num	
  processo	
  algoritmo	
  infinito	
  apenas	
  uma	
  parte	
  finita	
  do	
  processo.	
  A	
  noção	
  de	
  erro	
  sempre	
  estará	
  presente	
  em	
  todos	
  os	
  campos	
  do	
  Cálculo	
  Numérico,	
   pois	
   sempre	
   temos	
   dados	
   nem	
   sempre	
   exatos,	
   as	
   operações	
   sobre	
  valores	
   não	
   exatos	
   propagam	
  os	
   erros	
   e	
   os	
   	
  Métodos	
  Numéricos	
   são,	
   em	
  geral	
  métodos	
  de	
  aproximação.	
  [1]	
  
2. Raizes	
  	
  	
   Nas	
  mais	
  diversas	
  áreas	
  das	
  ciências	
  exatas	
  ocorrem,	
  frequentemente,	
  situações	
  que	
  envolvem	
  a	
  resolução	
  de	
  uma	
  equação	
  do	
  tipo	
  𝑓(𝑥) = 0	
  	
  A	
  idéia	
  central	
  dos	
  métodos	
  numéricos	
  para	
  encontrar	
  as	
  raizes	
  de	
  uma	
  equação,	
   parti	
   de	
   uma	
   aproximação	
   inicial	
   para	
   a	
   raiz	
   (um	
   intervalo	
   onde	
  imaginamos	
  a	
  raiz	
  estar	
  contida)	
  e	
  em	
  seguida	
  refinar	
  essa	
  aproximação	
  através	
  de	
  um	
  processo	
  iterativo.	
  [2]	
  A	
   forma	
   como	
   se	
   efetua	
   o	
   refinamento	
   é	
   que	
   diferencia	
   os	
   métodos.	
  Temos	
  varios	
  método,	
  serão	
  apontados	
  nesse	
  trabalho	
  o	
  	
  da	
  Bisseçao,	
  de	
  Newton,	
  da	
  Secante.	
  	
  
Método	
   da	
   Bisseção,	
   parte	
   de	
   um	
   	
   intervalo	
   inicial	
   [a,b]	
   que	
   se	
   sabe	
  conter	
   o	
   zero	
   de  𝑓,	
   suposto	
   único.	
   Em	
   cada	
   iteração	
   é	
   produzido	
   um	
   intervalo	
  com	
  metade	
  do	
  comprimento	
  do	
  intervalo	
  actual.	
  Para	
  tal,	
  divide-­‐se	
  o	
  intervalo	
  actual	
  a	
  meio	
  e	
  escolhe-­‐se	
  o	
  subintervalo	
  esquerdo	
  ou	
  direito	
  de	
  forma	
  a	
  que	
  a	
  função	
  tenha	
  sinais	
  diferentes	
  nos	
  extremos	
  do	
  subintervalo	
  escolhido.	
  Ou	
  seja,	
  sendo	
   [𝑎!,  𝑏!]	
  o	
   intervalo	
  na	
   iteração	
  n,	
   calcula-­‐se	
  𝑥!!! = !!!!!!  .	
  O	
  valor	
  𝑥𝑛 + 1	
  substitui	
  𝑎! 	
  ou	
  𝑏! 	
  consoante	
  𝑓 𝑥!!!    𝑓(𝑏!  ) < 0 	
  ou	
  𝑓 𝑥!!!    𝑓(𝑎!  ) < 0 .	
   Desta	
  forma,	
   assegura-­‐se	
   que	
   s	
  ∈	
   [𝑎!,	
  𝑏!]	
   em	
   qualquer	
   iteração.	
   O	
   erro	
   absoluto	
   da	
  estimativa	
  de	
  𝑥!	
  e	
  dado	
  por	
  	
  !!!!! 	
  .[3]	
  	
  Calculando	
  a	
  raiz	
  da	
  função	
  𝑓 𝑥 = 1+ 𝑥 + 𝑒!	
  pelo	
  método	
  da	
  bisseção,	
  com	
  erro	
  de	
  10!!.	
  	
  
Fortran	
  1	
  (implementação)	
  	
  
	
  
program bissecao 
implicit none 
 
real xm,xe,xd,f,e 
integer result,i 
result=21 
open(unit=result,file='result.txt') 
xe=-2. 
xd=-1. 
e=10**(-5.) 
xm=(xe+xd)/2. 
 
do while (abs(xe-xd)>e) 
if (f(xe)*f(xm)>0.) then 
xe=xm 
else 
xd=xm 
end if 
xm=(xe+xd)/2. 
write(*,*)'raiz',xm 
end do 
 
end 
 
function f(x) 
real f,x 
f=1+x+exp(x) 
return 
end 
	
  	
  
Resultados	
  obtidos	
  	
  	
  	
   n   𝑎!   f(𝑎!)   𝑏!   f(𝑏!)   𝑥!!!	
   f(𝑥!!!)  0-­‐2.000	
   -­‐0.865	
   -­‐1.000	
   +0.368	
   -­‐1.500	
   -­‐0.277	
  1	
   -­‐1.500	
   -­‐0.277	
   -­‐1.000	
   +0.368	
   -­‐1.250	
   +0.037	
  2	
   -­‐1.500	
   -­‐0.277	
   -­‐1.250	
   +0.037	
   -­‐1.375	
   -­‐0.122	
  3	
   -­‐1.375	
   -­‐0.122	
   -­‐1.250	
   +0.037	
   -­‐1.313	
   -­‐0.043	
  4	
   -­‐1.313	
   -­‐0.043	
   -­‐1.250	
   +0.037	
   -­‐1.281	
   -­‐0.004	
  5	
   -­‐1.281	
   -­‐0.004	
   -­‐1.250	
   +0.037	
   -­‐1.266	
   +0.016	
  6	
   -­‐1.281	
   -­‐0.004	
   -­‐1.266	
   +0.016	
   -­‐1.276	
   +0.006	
  7	
   -­‐1.281	
   -­‐0.004	
   -­‐1.273	
   +0.006	
   -­‐1.277	
   +0.001	
  Tabela	
  1	
  	
  A	
  solução	
  da	
  equação	
  será	
  s	
  =	
  −1.277  ±  4  ×  10!!,	
  ou	
  seja,	
  s	
  ∈	
  [−1.281,	
  −1.273].	
  	
  
	
  
Método	
   da	
   Newton,	
   e	
   um	
   dos	
   métodos	
   mais	
   poderosos	
   para	
   resolver	
  equações	
   do	
   tipo	
  𝑓(𝑥)  =  0.	
   Este	
   método	
   parte	
   de	
   uma	
   estimativa	
   inicial	
   x0	
   e	
  gera	
  uma	
  sucessão	
  {𝑥!}	
  de	
  uma	
  forma	
  recorrente.	
  Cada	
  novo	
  valor	
  da	
  sucessão,	
  𝑥!!!,	
  e	
  determinado	
  como	
  sendo	
  a	
  abcissa	
  do	
   ponto	
   de	
   interseção	
   com	
  o	
   eixo	
   dos	
   xx	
   da	
   reta	
   tangente	
   a	
   função	
   no	
   ponto	
  (𝑥!, (𝑓(𝑥!)),	
  ou	
  seja,	
  no	
  ponto	
  correspondente	
  ao	
  valor	
  anterior	
  da	
  sucessão.	
  A	
  expressão	
  de	
   interação	
  que	
  permite	
  determinar	
  𝑥!!!	
  em	
   função	
  de	
  𝑥!	
  e	
  dado	
  por	
  :	
  [3]	
  	
   y   =  f(𝑥!)  +  f′(𝑥!)   ·  (𝑥  −  𝑥!)	
  	
   𝑥! + 1 = 𝑥! −   𝑓(𝑥!)𝑓′(𝑥!)	
  	
  	
  Calculando	
  a	
  raiz	
  da	
  função	
  𝑓 𝑥 = 1+ 𝑥 + 𝑒!	
  pelo	
  método	
  de	
  Newton,	
  erro	
  de	
  10!!.	
  	
  
Fortran	
  2	
  (implementação)	
  	
  
program newton 
implicit none 
real xo,xn,f,df,e,h 
integer i 
xo=0. 
 
e=10**(-6.) 
xn=xo-(f(xo)/df(xo)) 
do while (abs(f(xn))>e) 
xo=xn 
xn=xo-(f(xo)/df(xo)) 
print*,xn 
end do 
 
end 
 
function f(x) 
real f,x 
f=1+x+exp(x) 
return 
end 
 
function df(x) 
real df,x,f,h 
h=0.01 
df=(f(x+h)-f(x))/h 
return 
end 	
  
Resultados	
  obtidos	
  	
  
	
   n   𝑥!   f(𝑥!)   f’(𝑥!)   𝑥!!!   erro  0   -­‐1.0000   +3.68  10!!   +1.368   -­‐1.26894   1.2  10!!  1   -­‐1.26894   +1.22  10!!   +1.281   -­‐1.27845   1.5  10!!  2   -­‐1.27845   +1.27  10!!   +1.278   -­‐1.27846   1.6  10!!!  Tabela	
  2	
  	
  A	
  solução	
  aproximada	
  será	
  s	
  ≃	
  −1.27846	
  	
  	
  
Método	
  da	
  Secante,	
  e	
  semelhante	
  ao	
  método	
  de	
  Newton,	
  com	
  a	
  diferença	
  de	
  que	
  a	
  reta	
  tangente	
  a	
  função	
  é	
  substituída	
  pela	
  reta	
  secante	
  nos	
  dois	
  últimos	
  pontos.	
   Este	
   método	
   obriga	
   a	
   que	
   em	
   cada	
   iteração	
   sejam	
   guardadas	
   as	
   duas	
  últimas	
  estimativas	
  da	
  solução	
  a	
  determinar.	
  Essa	
  reta	
  e	
  descrita	
  pela	
  equação:	
  [3]	
  
𝑦 = 𝑓 𝑥!!! + 𝑓 𝑥𝑛 − 𝑓 𝑥!!!𝑥𝑛 − 𝑥!!! (𝑥 − 𝑥!!!)	
  	
  
𝑥!!! = 𝑥𝑛 + 1  𝑓 𝑥𝑛 − 𝑥𝑛  𝑓(𝑥!!!)𝑓 𝑥𝑛 − 𝑓(𝑥!!!) 	
  	
  Calculando	
  a	
  raiz	
  da	
  função	
  𝑓 𝑥 = 1+ 𝑥 + 𝑒!	
  pelo	
  método	
  da	
  Secante,	
  com	
  erro	
  de	
  10!!.	
  	
  
	
  
Fortran	
  3	
  (implementação)	
  	
  
program newton 
implicit none 
real a,b,xn,f,e,h 
integer i 
a=-1. 
b=0. 
e=10**(-5.) 
xn=a-(f(a)/(f(a)-f(b)))*(a-b) 
do while (abs(f(xn))>e) 
a=xn 
xn=a-(f(a)/(f(a)-f(b)))*(a-b) 
print*,xn 
end do 
 
end 
 
function f(x) 
real f,x 
f=1+x+exp(x) 
return 
end 
	
  	
  
Resultados	
  obtidos	
  	
  	
  	
   n   𝑥!!!   𝑥!   𝑥!!!   f(𝑥!!!)   erro  0   -­‐1.00000   -­‐1.10000   -­‐1.27249   7.65  10!!   7.6  10!!  1   -­‐1.10000   -­‐1.27249   -­‐1.27834   1.55  10!!   1.7  10!!  2   -­‐1.27249   -­‐1.27834   -­‐1.27846   1.01  10!!   1.2  10!!  Tabela	
  3	
  
 A	
  estimativa	
  obtida	
  	
  é	
  s	
  ≃	
  −1.27846.	
  	
  	
  	
  
3. Sistemas	
  lineares	
  	
  
	
   A	
   resolução	
   de	
   sistemas	
   de	
   equações	
   lineares	
   	
   é	
   um	
   dos	
   problemas	
  numéricos	
   mais	
   comuns	
   em	
   aplicações	
   científicas.	
   Tais	
   sistemas	
   surgem,	
   por	
  exemplo,	
   em	
   conexão	
   com	
   a	
   solução	
   de	
   equações	
   diferenciais	
   parciais,	
  determinação	
  de	
  caminhos	
  ótimos	
  em	
  redes	
  e	
   interpolação	
  o	
  de	
  pontos,	
  dentre	
  outros.	
   Vamos	
   abordar	
   nesse	
   capitulo	
   dois	
   métodos	
   para	
   solução	
   de	
   sistemas	
  lineares	
  o	
  método	
  de	
  Eliminação	
  Gaussiana	
  e	
  Gauss	
  Seidel.[4]	
  
	
  	
  
Eliminação	
  Gaussiana,	
  e	
  um	
  método	
  exato	
  também	
  chamado	
  de	
  método	
  de	
   Gauss	
   Simples,	
   consiste	
   em	
   transformar	
   o	
   sistema	
   dado	
   num	
   sistema	
  triangular	
   equivalente	
   através	
   de	
   uma	
   sequência	
   de	
   operações	
   elementares	
  sobre	
  as	
  linhas	
  do	
  sistema	
  original,	
  isto	
  é,	
  o	
  sistema	
  equivalente	
  é	
  obtido	
  através	
  
da	
  aplicação	
  repetida	
  da	
  operação,	
  substituir	
  uma	
  equação	
  pela	
  diferença	
  entre	
  essa	
   mesma	
   equação	
   e	
   uma	
   outra	
   equação	
   multiplicada	
   por	
   uma	
   constante	
  diferente	
  de	
  zero.	
  É	
  claro	
  que	
  tal	
  operação	
  não	
  altera	
  a	
  solução	
  do	
  sistema,	
  isto	
  	
  é,	
  	
  obtem-­‐se	
  com	
  ela	
  outro	
  sistema	
  equivalente	
  ao	
  original.	
  O	
  objetivo	
  é	
  organizar	
  essa	
   sequência	
   de	
   operações	
   de	
   tal	
   forma	
   que	
   o	
   sistema	
   linear	
   resultante	
   seja	
  triangular	
  superior.	
  Utilizando	
   o	
  método	
   de	
   Eliminação	
   Gaussiana	
   para	
   encontrar	
   a	
   solução	
  para	
  	
  𝑥!,  𝑥!  𝑒  𝑥!.	
   3 1 11 4 20 2 5   𝑥!𝑥!𝑥! = 745    ⇒  𝑝𝑎𝑟𝑎  𝑥! = 000 	
  
resultados	
  obtidos:	
  Solução	
  exata	
   2.0000	
   0.0000	
   1.0000	
  Tabela	
  4	
  	
  	
   Os	
  resultados	
  mostrados	
  na	
  tabela	
  4	
  corresponde	
  a	
  solução	
  exata	
  para	
  𝑥!,  𝑥!  𝑒  𝑥!	
  nessa	
  ordem.	
  
	
  
Fortran	
  4	
  (implementação)	
  	
  
program elininacaogauss 
implicit none 
 
real A(100,100), B(100), X(100), max, aux 
integer i, j, k, n, entrada,saida 
 
entrada = 12 
saida=11 
n = 3 
 
open (unit = entrada, file = 'entrada.txt') 
open (unit = saida, file = 'saida.txt') 
do i=1,n,1 
read (entrada,*) (A(i,j), j=1,n,1) 
end do 
 
do i=1,n,1 
read (entrada,*) B(i) 
end do 
 
do i=1,n-1,1 
 
k = i 
max = abs(A(i,i)) 
 
do j=i+1,n,1 
if(abs(A(j,i)) > max) then 
max = abs(A(j,i)) 
k = j 
end if 
end do 
 
if (i .ne. k) then 
 
do j=1,n,1 
 
aux = A(i,j) 
A(i,j) = A(k,j) 
A(k,j) = aux 
 
end do 
 
aux = B(i) 
B(i) = B(k) 
B(k) = aux 
 
end if 
 
do j=i+1,n,1 
 
aux = A(j,i)/A(i,i) 
A(j,i) = 0 
 
do k=i+1,n,1 
A(j,k) = A(j,k) - aux*A(i,k) 
end do 
 
B(j) = B(j) - aux*B(i) 
 
end do 
end do 
 
do i=n, 1, -1 
 
X(i) = B(i) 
 
do j=i+1,n,1 
X(i) = X(i) - A(i,j)*X(j) 
end do 
 
X(i) = X(i)/A(i,i) 
 
end do 
 
do i=1,n,1 
write(saida,*) X(i) 
end do 
 
close (entrada) 
close (saida) 
end 
 
 Método	
  de	
  Gauss	
  Seidel,	
  sendo	
  um	
  métodointerativo,	
  tem	
  melhor	
  comportamento	
  do	
  que	
  os	
  métodos	
  exatos	
  quando	
  se	
  trabalha	
  com	
  matrizes	
  esparsas.	
  É	
  um	
  dos	
  métodos	
  iterativos	
  mais	
  comuns	
  e	
  simples	
  para	
  ser	
  programado	
  em	
  computador.	
  A	
  idéia	
  principal	
  é,	
  cada	
  coordenada	
  do	
  vetor	
  correspondente	
  à	
  nova	
  aproximação	
  é	
  calculada	
  a	
  partir	
  da	
  respectiva	
  equação	
  do	
  sistema,	
  utilizando-­‐se	
  as	
  coordenadas	
  do	
  vetor	
  aproximação	
  da	
  iteração	
  anterior,	
  quando	
  essas	
  ainda	
  não	
  foram	
  calculadas	
  na	
  iteração	
  corrente,	
  e	
  as	
  coordenadas	
  do	
  vetor	
  aproximação	
  da	
  iteração	
  corrente,	
  no	
  caso	
  contrário.	
  [5] A	
  função	
  interação	
  do	
  método	
  de	
  Gauss	
  Seidel	
  pode	
  ser	
  expressada	
  por:	
  
𝑥!! = 𝑏! − 𝑎!"𝑥!!!!!!!! − 𝑎!"𝑥!!!!!!!!!!𝑎!!  𝑝𝑎𝑟𝑎  𝑖 = 1…𝑛	
  
	
  
	
  
Fortran	
  5	
  (implementação)	
  	
  
program gausseidel 
implicit none 
 
real A(100,100), B(100), X(100) 
integer n, entrada, i, j, k,saida 
character * 15 texto 
 
entrada = 12 
 
open (unit = entrada, file = 'dados.txt') 
open (unit = saida, file = 'saida.txt') 
read (entrada,*) texto 
 
read (entrada,*) n 
 
read (entrada,*) texto 
 
do i=1,n,1 
read (entrada,*) (A(i,j), j=1,n,1) 
end do 
 
read (entrada,*) texto 
 
do i=1,n,1 
read (entrada,*) B(i) 
end do 
 
do i=1,n,1 
X(i) = 0 
end do 
 
do k=1,100,1 
 
do i=1,n,1 
 
X(i) = B(i) 
 
do j=1,i-1,1 
X(i) = X(i) - A(i,j)*X(j) 
end do 
 
do j=i+1,n,1 
X(i) = X(i) - A(i,j)*X(j) 
end do 
 
X(i) = X(i)/A(i,i) 
 
end do 
end do 
 
do i=1,n,1 
write(saida,*) X(i) 
end do 
end 	
  Aplicando-­‐se	
  Gaus	
  Seidel,	
  para	
  calcular	
  𝑥!,  𝑥!  𝑒  𝑥!	
  .	
  	
   3 1 11 4 20 2 5   𝑥!𝑥!𝑥! = 745    ⇒  𝑝𝑎𝑟𝑎  𝑥! = 000 	
  	
  
Resultados	
  obtidos	
  	
  
	
   Interações	
  	
   𝑥!	
   𝑥!	
   𝑥!	
  1	
   2.3333	
   0.4167	
   0.8333	
  2	
   1.9167	
   0.1042	
   0.9583	
  3	
   1.9792	
   0.0260	
   0.9896	
  4	
   1.9942	
   0.0065	
   0.9974	
  5	
   1.9987	
   0.0016	
   0.9993	
  6	
   1.9997	
   0.0004	
   0.9998	
  7	
   1.9999	
   0.0001	
   1.0000	
  …	
   …	
   …	
   …	
  Solução	
  exata	
   2.0000	
   0.0000	
   1.0000	
  Tabela	
  5	
  	
   Observa-­‐se,	
   que	
   com	
   poucas	
   interações	
   se	
   obteve	
   o	
   solução	
   exata	
  𝑥! = 2.000,  𝑥! = 0.000, 𝑥! = 1.000	
  	
  
4. Ajuste	
  de	
  curvas	
  	
  	
  	
  	
  	
   Seja	
   um	
   conjunto	
   de	
   dados	
   contendo	
   n	
  pares	
   de	
   valores	
   (x,	
   y)	
   obtidos	
  numérica	
  ou	
  experimentalmente.	
  De	
  modo	
  a	
  calcular	
  qualquer	
  valor	
  de	
  y	
  distinto	
  dos	
  valores	
  tabelados,	
  ajustamos	
  uma	
  função	
  y	
  =	
  f(x)	
  através	
  do	
  chamado	
  Método	
  dos	
  Mínimos	
  Quadrados.	
  
Considere	
   uma	
   equação	
   relacionando	
   a	
   variável	
   y	
   com	
   a	
   variável	
  independente	
  x,	
  como	
  y	
  = f	
  (x)	
  ,	
  onde	
  y	
  indica	
  que	
  este	
  é	
  o	
  valor	
  aproximado	
  de	
  y.	
  Queremos	
  encontrar	
  a	
  função	
  y	
  = f	
  (x)	
  ,	
  cujo	
  desvio	
  em	
  relação	
  aos	
  valores	
  y	
  seja	
  expresso	
  como	
  𝛿! = 𝑦! − 𝑦! .	
  Por	
  uma	
  questão	
  de	
  conveniência	
  trabalharemos	
  com	
  o	
  desvio	
  quadrático	
  𝛿!! = (𝑦! − 𝑦!)!	
  A	
   função	
   y	
   = f	
   (	
   x	
   )	
   que	
   melhor	
   ajusta	
   os	
   pontos	
   (x,	
   y)	
   dados	
   é	
   aquela	
   que	
  minimiza	
  o	
  somatório	
  dos	
  desvios	
  quadráticos	
  S:	
  
	
   𝑆 = 𝑦!!!!!! = (𝑦! − 𝑦!)!!!!! 	
  	
   A	
  condição	
  de	
  minimização	
  da	
  função	
  S	
  é	
  satisfeita	
  fazendo-­‐se	
  dS	
  =	
  0,	
  ou	
  seja,	
  necessitamos	
  calcular	
  a	
  derivada	
  da	
  função	
  S	
  em	
  relação	
  aos	
  parâmetros	
  de	
  ajuste	
   da	
   função	
   y	
  =	
   f(x)	
   para	
   que	
   possamos	
   encontrar	
   o	
   sistema	
   de	
   equações	
  denominado	
   equações	
   normais	
   que	
   conduz	
   ao	
  melhor	
   ajuste	
   dos	
   pontos	
   (x,y)	
  pela	
   função	
   y	
   =	
   f(x)	
   escolhida.	
   Para	
   cada	
   tipo	
   de	
   função	
   de	
   ajuste	
   existe	
   um	
  sistema	
  de	
  equações	
  normais	
  que	
  minimiza	
  a	
  soma	
  dos	
  desvios	
  quadráticos	
  S.	
  	
   Temos	
   varios	
   ajustes	
   que	
   se	
   fundamentam	
   nos	
   métodos	
   dos	
   Mínimos	
  Quadrados,	
  nesse	
   trabalho	
   será	
  apresentado	
  ajuste	
   linear,	
   ajuste	
  exponencial	
   e	
  ajuste	
  potencial.	
  	
  	
  Dados	
  os	
  pontos	
  abaixo,	
  faremos	
  3	
  ajustes:	
  linear,	
  exponencial	
  e	
  potencial.	
  	
  x	
   1.0	
   1.2	
   1.4	
   1.6	
   1.8	
   2.0	
   2.2	
   2.4	
   2.6	
   2.8	
   3.0	
  y	
   0.525	
   0.8448	
   1.2807	
   1.8634	
   2.6326	
   3.6386	
   4.944	
   6.6258	
   8.7768	
   11.5076	
   14.9484	
  Tabela	
  6	
  
	
  
Ajuste	
   linear,	
   função	
  na	
   forma	
  𝑦 = 𝑎! + 𝑎!𝑥	
  .	
   A	
   determinação	
  dos	
   coeficientes	
  𝑎!  𝑒  𝑎!	
  pelo	
  método	
  dos	
  mínimos	
  quadrados	
  e	
  dado	
  pelas	
  expressões:	
  	
   𝑎! = 𝑥! 𝑦!!!! − 𝑥!!!! 𝑥𝑦!!!!!!!!𝑛 𝑥! − ( 𝑥!!!! )!!!!! 	
  	
   𝑎! = 𝑛 𝑥𝑦!!!! − 𝑥!!!! 𝑦!!!!𝑛 𝑥! − ( 𝑥!!!!!!!! )! 	
  	
  
Fortran	
  6	
  (implementação)	
  
	
  program	
  ajuste	
  implicit	
  none	
  	
  real	
  X(100),	
  Y(100),	
  A(100,100),	
  B(100),	
  max,	
  aux	
  integer	
  i,	
  j,	
  k,	
  entrada	
  ,	
  saida,	
  n,	
  pontos	
  	
  entrada	
  =	
  12	
  
saida	
  =	
  14	
  	
  open	
  (unit	
  =	
  entrada,	
  file	
  =	
  'entrada.txt',status='old')	
  open	
  (unit	
  =	
  saida,	
  file	
  =	
  'saida.txt')	
  	
  read(entrada,*)	
  n	
  	
  	
  !	
  n	
  determina	
  o	
  tipo	
  de	
  ajuste	
  polinomial	
  	
  read(entrada,*)	
  pontos	
  	
  	
  	
  !quantidade	
  de	
  pontos	
  	
  do	
  i	
  =	
  1,	
  pontos,	
  1	
  read(entrada,*)	
  X(i),	
  Y(i)	
  end	
  do	
  	
  close(entrada)	
  	
  do	
  i=1,n,1	
  do	
  j=1,n,1	
  A(i,j)	
  =	
  0	
  end	
  do	
  end	
  do	
  	
  A(1,1)	
  =	
  pontos	
  	
  do	
  i=1,n,1	
  do	
  j=	
  1,pontos,1	
  A(i,n)	
  =	
  A(i,n)	
  +	
  X(j)**(n	
  +	
  i	
  -­‐	
  2)	
  end	
  do	
  end	
  do	
  	
  do	
  j=2,n-­‐1,1	
  do	
  i=1,pontos,1	
  A(1,j)	
  =	
  A(1,j)	
  +	
  X(i)**(j	
  -­‐	
  1)	
  end	
  do	
  end	
  do	
  	
  do	
  i=2,n,1	
  do	
  j=1,n-­‐1,1	
  A(i,j)	
  =	
  A(i	
  -­‐	
  1,	
  j	
  +	
  1)	
  end	
  do	
  end	
  do	
  	
  do	
  i=1,n,1	
  B(i)	
  =	
  0	
  end	
  do	
  	
  do	
  i=1,n,1	
  do	
  j=1,pontos,1	
  B(i)	
  =	
  B(i)	
  +	
  (X(j)**(i	
  -­‐	
  1))*Y(j)	
  end	
  do	
  
end	
  do	
  	
  !	
  inicio	
  da	
  resolução	
  do	
  sistema	
  	
  do	
  i=1,	
  n-­‐1,	
  1	
  	
  k=i	
  	
  max=abs(A(i,i))	
  	
  do	
  j=i+1,n,1	
  if	
  (abs(A(j,i))	
  >	
  max)	
  then	
  max	
  =	
  abs(A(j,i))	
  k	
  =	
  j	
  end	
  if	
  end	
  do	
  	
  if	
  (i	
  .ne.	
  k)	
  then	
  	
  do	
  j=1,	
  n,	
  1	
  aux	
  =	
  A(i,j)	
  A(i,j)	
  =	
  A(k,j)	
  A(k,j)	
  =	
  aux	
  end	
  do	
  	
  aux	
  =	
  B(i)	
  B(i)	
  =	
  B(k)B(k)	
  =	
  aux	
  end	
  if	
  	
  do	
  j=i+1,n,1	
  aux=A(j,i)/A(i,i)	
  A(j,i)=0	
  	
  do	
  k=i+1,n,1	
  A(j,k)=A(j,k)	
  -­‐	
  A(i,k)*aux	
  end	
  do	
  	
  B(j)=B(j)	
  -­‐	
  B(i)*aux	
  end	
  do	
  end	
  do	
  	
  do	
  i=n,1,-­‐1	
  	
  X(i)	
  =	
  B(i)	
  	
  do	
  j=i+1,n,1	
  X(i)=X(i)	
  -­‐	
  A(i,j)*X(j)	
  end	
  do	
  
	
  X(i)=X(i)/A(i,i)	
  	
  end	
  do	
  	
  write	
  (saida,*)	
  'Coeficientes	
  do	
  polinomio'	
  	
  do	
  i=1,n,1	
  write(saida,*)	
  X(i)	
  end	
  do	
  	
  close(saida)	
  	
  end	
  	
  
soluções	
  	
  	
  logo	
  o	
  ajuste	
  Linear	
  é:	
  𝑦 = −8.3187+ 6.770𝑥	
  	
  	
  O	
  gráfico	
  1	
  apresenta	
  o	
  ajuste	
  Linear	
  com	
  os	
  pontos	
  da	
  tabela	
  6.	
  
	
  
	
  
	
  
	
  
	
  
Ajuste	
  Exponencial,	
  função	
  na	
  forma	
  𝑦 = 𝑎!𝑎!!	
  ,	
  precisa	
  ser	
  linearizada.	
  Linearização	
  y	
  =	
  ln(y)	
  ;	
  	
   ln 𝑦 = 𝑙𝑛(𝑎!)+ 𝑥𝑙𝑛(𝑎!)	
  	
  Logo	
  𝑦!  =  𝑎!! + 𝑎!!𝑥	
  	
  
Solução	
  do	
  ajuste	
  exponencial	
  é:	
  𝑦 = 0.12349  𝑒!.!"#"!	
  	
  O	
  gráfico	
  2	
  apresenta	
  o	
  ajuste	
  exponencial	
  com	
  os	
  pontos	
  da	
  tabela	
  6.	
  	
  
	
  	
   Ajuste	
  potencial,	
  função	
  na	
  forma	
  𝑦 = 𝑎!𝑥!! ,	
  precisa	
  ser	
  linearizada.	
  Linearização	
  y	
  =	
  ln(y)	
  ;	
  x	
  =	
  ln(x).	
  	
   ln 𝑦 = ln 𝑎! + 𝑎!ln  (𝑥)	
  logo	
  𝑦!  =  𝑎!! + 𝑥!𝑎!	
  	
  solução	
  do	
  ajuste	
  potencial	
  é:	
  𝑦 = 0.47227  𝑥!.!"#$	
  	
  O	
  gráfico	
  3	
  apresenta	
  o	
  ajuste	
  potencial	
  com	
  os	
  pontos	
  da	
  tabela	
  6.	
  
	
  
O	
   gráfico	
   4	
   apresenta	
   todos	
   os	
   ajustes	
   com	
   os	
   pontos	
   da	
   tabela	
   6.	
  Utilizando	
  –	
  se	
  conceitos	
  de	
  estatística,	
  regra	
  de	
  Pearson	
  obtemos	
  que	
  o	
  melhor	
  ajuste	
  e	
  o	
  exponencial.	
  Visualmente	
  nota	
  –	
  se	
  também	
  que	
  o	
  ajuste	
  exponencial	
  aproxima	
  –	
  se	
  melhor	
  dos	
  pontos	
  do	
  que	
  os	
  outros	
  ajustes.	
  	
  
	
  	
  	
  	
  
5. Interpolação	
  	
  	
   O	
   problema	
   de	
   interpolação	
   consiste	
   em,	
   dado	
   um	
   conjunto	
   de	
   pares	
  ordenados	
   (x0,	
   y0),	
   (x1,	
   y1),	
   .	
   .	
   .	
   ,	
   (xn,	
   yn),	
   determinar	
   uma	
   função	
   g,	
   designada	
  função	
  interpoladora,	
  tal	
  que	
  :	
  g xi =  yi  , i = 0,1, . . . ,n.	
  	
   Os	
   valores	
   x0,x1,...,xn	
   designam-­‐se	
   por	
   nós	
   de	
   interpolação	
   e	
   devem	
  satisfazer	
   a	
   condição	
   i≠ j	
   ⇒	
   xi	
  ≠   xj,	
   ou	
   seja,	
   serem	
   todos	
   diferentes.	
   Os	
  correspondentes	
  valores	
  y0,	
  y1,	
  .	
  .	
  .	
  ,	
  yn	
  designam-­‐se	
  por	
  valores	
  nodais.	
  Perante	
   um	
   dado	
   problema	
   de	
   interpolação	
   será	
   necessário	
   ter	
   em	
  consideração	
   diversas	
   questões,	
   das	
   quais	
   se	
   destacam	
   a	
   escolha	
   da	
   classe	
   de	
  funções	
   interpoladoras	
   a	
   utilizar	
   e	
   a	
   forma	
   de	
   determinar	
   concretamente	
   a	
  função	
  interpoladora.	
  	
  O	
  problema	
  de	
  interpolação	
  tem	
  aplicações	
  em	
  diversas	
  situações	
  como:	
  -­‐ O	
   cálculo	
   de	
   funções	
   fornecidas	
   por	
   tabelas	
   quando	
   se	
   pretende	
   avaliar	
  função	
  em	
  pontos	
  não	
  tabelados.	
  -­‐ Quando	
  apenas	
  se	
  conhecem	
  os	
  valores	
  de	
  uma	
  função	
  em	
  certos	
  pontos,	
  por	
   exemplo	
   resultantes	
   de	
   medidas	
   experimentais,	
   e	
   se	
   pretende	
   avaliar	
   a	
  função	
  em	
  novos	
  pontos.	
  -­‐ Aproximação	
   de	
   funções	
   cujo	
   cálculo	
   seja	
   complexo	
   ou	
   exija	
   grande	
  esforço.	
  
-­‐ A	
  base	
  de	
  muitos	
  métodos	
  numéricos.	
  	
   Dentre	
   os	
   tipos	
   de	
   interpolação	
   se	
   destacam	
   interpolação	
   linear,	
  interpolação	
   polinomial	
   e	
   interpolação	
   trigonométrica.	
   Neste	
   trabalho	
   iremos	
  apresentar	
  a	
   interpolação	
  polinomial	
  pela	
  forma	
  de	
  Lagrange	
  que	
  será	
  definido	
  mas	
  adiante.	
  Mas	
  muitas	
  vezes	
  porem	
  ocorre	
  o	
   inconveniente	
  de	
  uma	
   função	
  g	
  qualquer	
  apresentar	
  um	
  valor	
  muito	
  discrepante	
  em	
  relação	
  a	
  um	
  dado	
  valor	
  de	
  f,	
   valor	
   real,	
   é	
   ai	
   que	
   surge	
   a	
   necessidade	
   de	
   se	
   utilizar	
   um	
   outro	
   tipo	
   de	
  interpolação	
   o	
   Spline,	
   que	
   interpola	
   f	
   em	
   grupos	
   de	
   poucos	
   pontos.	
   Nesse	
  trabalho	
  usaremos	
  o	
  Spline	
  Cúbico	
  que	
  também	
  será	
  definido	
  mais	
  adiante.	
  	
  
	
  
	
  
Forma	
  Lagrange	
  	
  
	
   Num	
   conjunto	
   de	
   pontos	
   distintos	
  (𝑥!)!!!! .	
   Os	
   polinómios	
   (de	
   grau	
   n)	
  definidos	
  pela	
  expressão:	
  	
   𝐿!  (𝑥) =   𝑥 − 𝑥!𝑥! − 𝑥!      𝑘 = 0,1…!!!!,!!! 	
  	
  	
  designam-­‐se	
  por	
  polinómios	
  de	
  Lagrange,	
  relativos	
  aos	
  pontos	
  x0,	
  x1,	
  .	
  .	
  .	
  ,	
  xn.	
  O	
   polinómio	
   interpolador	
   na	
   forma	
   de	
   Lagrange	
   é	
   obtido	
   como	
   uma	
  combinação	
  linear	
  dos	
  polinómios	
  de	
  Lagrange	
  relativos	
  aos	
  pontos	
  em	
  questão.	
  Os	
  coeficientes	
  desta	
  combinação	
  linear	
  serão	
  os	
  valores	
  de	
  y	
  a	
  interpolar.	
  O	
  polinómio	
  p,	
  de	
  grau	
  menor	
  ou	
   igual	
   a	
  n,	
  que	
   interpola	
  o	
   conjunto	
  de	
  valores	
  y0,	
  y1,	
  ...	
  ,	
  yn	
  nós	
  pontos	
  distintos	
  x0,	
  x1,	
  ...	
  ,	
  xn	
  é	
  dado	
  por:	
  [3]	
  	
  	
   𝑝! 𝑥 = 𝑦!𝐿!(𝑥)!!!! =  𝑦! 	
  	
  	
  Seja	
  a	
  função	
  𝑓 𝑥 =   𝑥 ∗ sen 𝑥	
  conhecida	
  nos	
  pontos	
  da	
  tabela	
  7.	
  	
  	
  	
  
x	
   y	
  0	
   0,031570	
  2	
   1.278745	
  4	
   -­‐1.521074	
  6	
   -­‐0.591799	
  8	
   2.793026	
  Tabela	
  7	
  	
   Temos	
   no	
   gráfico	
   5	
   a	
   curva	
   gerada	
   pela	
   interpolação	
   de	
   Lagrange,	
  comparado	
  com	
  a	
  curva	
  exata.	
  
	
  
	
  
	
  
	
  
Fortran	
  7	
  (implementação)	
  	
  
program Lagrange 
implicit none 
 
real a, h, x(100), f(100), Paux(100), P 
integer i, j, entrada, saida, n 
 
entrada = 40 
saida = 20 
h = 0.1 !intervalo com o qual os pontos ser∆o imprimidos na 
sa°da 
 
open (unit=entrada,file='lagrangeentrada.txt') 
open (unit=saida,file='lagrangesaida.txt') 
 
read (entrada,*) n !n£mero de pontos 
 
do i=1,n,1 
read(entrada,*) x(i), f(i) 
end do 
 
a = x(1) 
 
do while (a < x(n)) 
 
do i=1,n,1 
Paux(i) = 1 
end do 
 
do j=1,n,1 
 
do i=1,j-1,1 
Paux(j) = Paux(j)*(a - x(i))/(x(j) - x(i)) 
end do 
 
do i=j+1,n,1 
Paux(j) = Paux(j)*(a - x(i))/(x(j) - x(i)) 
end do 
 
Paux(j) = Paux(j)*f(j) 
 
end do 
 
P=0 
 
do i=1,n,1 
P = P + Paux(i) 
end do 
 
write(saida,*) a,P 
 
a = a + h 
 
end do 
 
close (entrada) 
close (saida) 
 
end 
 	
  	
  
Forma	
  Spline	
  Cúbica	
  
 Suponha	
   que	
   f(x)	
   esteja	
   tabelada	
   nos	
   pontos	
  𝑥! ,	
  𝑖 = 0,1,2,… ,𝑛	
  afunção	
  𝑆!(𝑥)	
  é	
   chamada	
   spline	
   cúbica	
   interpolante	
   de	
   f(x)	
   nos	
   nós	
  𝑥! ,	
  𝑖 = 0,1,2,… ,𝑛	
  se	
  existem	
  n	
  polinômios	
  de	
  grau	
  3,	
  𝑆!(𝑥),	
  𝑘 = 1,… ,𝑛  tal	
  que:	
  	
  𝑆! 𝑥 = 𝑎!(𝑥 − 𝑥!)! + 𝑏!(𝑥 − 𝑥!)! + 𝑐!(𝑥 − 𝑥!)! + 𝑑!,𝑘 = 1,2,… ,𝑛.  	
  
	
  𝑆!(𝑥)	
  Tem	
  derivadas	
   de	
   primeira	
   e	
   segunda	
   ordem	
   contínuas,	
   o	
   que	
   faz	
  com	
  que	
  a	
  curva	
  𝑆!  (𝑥)	
  não	
  tenha	
  picos	
  e	
  nem	
  troque	
  abruptamente	
  de	
  curvatura	
  nos	
  nós.	
  [6]	
  	
  Seja	
   a	
   mesma	
   função	
  𝑓 𝑥 =   𝑥 ∗ sen 𝑥 	
  do	
   exemplo	
   anterior,	
   conhecida	
   nos	
  pontos	
  da	
  tabela	
  7.	
  Temos	
  o	
  gráfico	
  da	
  curva	
  gerada	
  pela	
  interpolação	
  de	
  Spline	
  Cúbica.	
  	
   	
  Temos	
  no	
  gráfico	
  6	
  a	
  curva	
  gerada	
  por	
  Spline	
  Cúbica,	
   comparado	
  com	
  a	
  curva	
  da	
  solução	
  exata.	
  	
  
	
  
	
  
	
  
Fortran	
  8	
  (implementação)	
  	
  	
  
 
program splinecubico 
implicit none 
 
real X(0:100), Y(0:100), A(100,100), B(100), G(0:100), h, t, z 
real ak, bk, ck, dk, s 
integer n, i, j, k, entrada, saida 
 
entrada = 100 
saida = 200 
 
open (unit=entrada,file='splineentrada.txt') 
open (unit=saida,file='splinesaida.txt') 
 
read(entrada,*) n !numero de pontos 
read(entrada,*) h !intervalo entre os pontos 
 
!pontos 
 
do i=0,n-1,1 
read(entrada,*) X(i), Y(i) 
end do 
 
close (entrada) 
 
do i=1, n-2, 1 
do j=1, n-2,1 
A(i,j) = 0 
end do 
end do 
 
do i=1, n-2,1 
A(i,i) = 4*h 
end do 
 
do i=1,n-3,1 
A(i,i+1)=h 
A(i+1,i)=h 
end do 
 
!imprimindo matriz 
!do i=1, n-2, 1 
! write(saida,*) (A(i,j), j=1, n-2, 1) 
!end do 
 
do i=1,n-2,1 
B(i) = (6/h)*(Y(i+1) -2*Y(i) + Y(i-1)) 
end do 
 
!encontrando os gi com gausseidel 
 
do i=0,n-1,1 
G(i) = 0 
end do 
 
do k=1,100,1 
 
do i=1,n-2,1 
 
G(i) = B(i) 
 
do j=1,i-1,1 
G(i) = G(i) - A(i,j)*G(j) 
end do 
 
do j=i+1,n,1 
G(i) = G(i) - A(i,j)*G(j) 
end do 
 
G(i) = G(i)/A(i,i) 
 
end do 
end do 
 
!encontrando coeficientes para cada Si e imprimindo os pontos 
 
z = x(0) 
t = 0.1 !intervalo com o qual os pontos serao mostrados na 
saida 
 
do k=1, n-1,1 
 
ak = (G(k) - G(k-1))/(6*h) 
bk = G(k)/2 
ck = (Y(k) - Y(k-1))/h + (2*h*G(k) + G(k-1)*h)/6 
dk = Y(k) 
 
do while (z <= x(k)) 
 
s = ak*(z - x(k))**3 + bk*(z - x(k))**2 + ck*(z - x(k)) + dk 
 
write (saida,*) z,s 
 
z = z + t 
 
end do 
 
end do 
 
close (saida) 
 
end 
 No	
  gráfico	
  7	
  foi	
  exposto	
  as	
  curvas	
  de	
  Lagrange,	
  Spline	
  cúbica	
  e	
  a	
  curva	
  da	
  solução	
  exata.	
  	
  
	
  	
   Pode-­‐se	
  observar	
  visualmente	
  que	
  o	
  método	
  Spline	
  cubica	
  se	
  aproximou	
  melhor	
  da	
  curva	
  exata.	
  Sendo	
  assim	
  e	
  o	
  melhor	
  método	
  para	
  interpolar	
  os	
  pontos	
  da	
  tabela	
  7.	
  	
  	
  	
  	
  
6. Integração	
  numérica	
  	
  	
   A	
   integração	
   numérica	
   é	
   uma	
   técnica	
   comumente	
   empregada	
   na	
  determinação	
  de	
  uma	
   integral	
  definida,	
  cuja	
   função	
  ou	
  não	
  é	
  disponível	
  ou	
  não	
  
possui	
   uma	
   solução	
   analítica.	
   Ela	
   consiste	
   na	
   aproximação	
   de	
   uma	
   integral	
  definida	
  do	
  tipo:	
  	
   𝐼 = 𝑓 𝑥 𝑑𝑥!! 	
  por	
  uma	
  soma	
  do	
  tipo:	
   𝐼 = 𝑓(𝑥)𝑑𝑥!! ≅ 𝑤!𝑓(𝑥!)∆𝑥!!!! 	
  	
  na	
   qual	
  𝑓 𝑥! 	
  são	
   os	
   valores	
   da	
   função	
  𝑓(𝑥), 	
  ∆𝑥 = 𝑥!!! − 𝑥!  e	
  𝑤!  é	
   um	
   valor	
  numérico	
  de	
  ponderação	
  que	
  também	
  é	
  conhecido	
  por	
  função	
  peso.	
  Nesse	
  trabalho,	
  nos	
  restringiremos	
  aos	
  métodos	
  de	
   integração	
  numérica	
  para	
   intervalo	
   ∆𝑥 	
  constante.	
   A	
   determinação	
   desses	
   métodos	
   consiste	
  basicamente	
  em	
  avaliar	
  o	
  valor	
  da	
  função	
  peso	
  𝑤! .	
  São	
  os	
  métodos	
  	
  do	
  Trapézio	
  e	
  Simpson.	
  	
  
Regra	
  do	
  Trapézio,	
  consiste	
  em	
  se	
  aproximar	
  o	
  valor	
  da	
  função	
  contínua	
  de	
   𝑓(𝑥) 	
  no	
   intervalo	
   [a,b]	
   por	
   uma	
   função	
   de	
   primeira	
   ordem;	
   isto,	
  geometricamente,	
  é	
  equivalente	
  a	
  aproximar	
  uma	
  curva	
  qualquer	
  por	
  uma	
  reta.	
  Desta	
  forma,	
  a	
  área	
  sob	
  a	
  função	
  𝑓(𝑥),	
  que	
  é	
  equivalente	
  à	
  integral	
  dessa	
  função,	
  é	
  aproximada	
  pela	
  área	
  do	
  trapézio	
  cuja	
  largura	
  é	
  igual	
  a	
  (b	
  –	
  a)	
  e	
  a	
  altura	
  média	
  igual	
  a	
  [𝑓(𝑎)  +  𝑓(𝑏)]/𝑛.	
  Fazendo-­‐se	
  ∆𝑥 =  𝑏  –  𝑎,	
  a	
  fórmula	
  para	
  a	
  integral	
  pode	
  ser	
  escrita	
  como:	
  [5]	
   𝑓 𝑥 𝑑𝑥!! ≅ ℎ2 [𝑓 𝑎 + 𝑓 𝑏 ]	
  	
  Calcular	
  	
   𝑒!𝑑𝑥  !! empregando	
  a	
  regra	
  do	
  trapézios.	
  Solução	
  Exata	
   Solução	
  pelo	
  método	
  do	
  trapézio	
   Erro	
  gerado	
  1.71828	
   172722	
   0.0089	
  Tabela	
  8	
  Como	
   ilustrado	
   na	
   tabela	
   8	
   a	
   solução	
   exata	
   da	
   equação	
   𝑒!𝑑𝑥  !! é  1.71828 .	
  Utilizando	
  n=4	
  obtemos	
  com	
  o	
  método	
  do	
  trapézio	
  uma	
  solução	
  para	
  a	
  mesma	
  de	
  1.72722.	
   Calculamos	
   o	
   	
   erro	
   pelo	
   modulo	
   da	
   diferença	
   entre	
   as	
   soluções	
  𝑠!"#$# − 𝑠!"#$%&'( ,	
  tivemos	
  um	
  erro	
  de	
  0.0089.	
  
Fortran	
  9	
  (implementação)	
  
program trapézio 
implicit none 
real h,s,a,b,f ! a e b sao limite de integrcao 
integer n,solucao 
solucao=21 
open(unit=solucao,file='solucao.txt') 
a=0. 
b=1. 
n=4 
h=(b-a)/n 
s=(h/2)*(f(0*h)+(2*f(1*h))+(2*f(2*h))+(2*f(3*h))+f(4*h)) 
write(solucao,*)'regra trapezio' ,s 
end 
 
function f(x) 
real f,x 
f = exp(x) 
return 
end 
	
  
Regra	
  de	
  Simpson	
  consiste	
  na	
  aproximação	
  da	
  função	
  contínua	
  f(x)	
  no	
  intervalo	
  [a,b]	
  por	
  uma	
  função	
  de	
  segunda	
  ordem,	
  ou	
  seja,	
  na	
  aproximação	
  de	
  uma	
  curva	
  por	
  uma	
  parábola.	
  A	
  fórmula	
  para	
  a	
  integral	
  tem	
  a	
  forma: 	
   𝑓 𝑥 𝑑𝑥!! ≅ ℎ3 [𝑓 𝑥! + 4𝑓 𝑥! + 𝑓(𝑥!)	
  	
  Esta	
  fórmula	
  também	
  é	
  conhecida	
  como	
  regra	
  de	
  Simpson	
  1/3	
  por	
  causa	
  do	
  fator	
  que	
  multiplica	
  h.	
  Observar	
  que	
  são	
  necessários,	
  no	
  mínimo,	
  três	
  valores	
  de	
  f(𝑥!)	
  para	
  se	
  calcular	
  a	
  integral	
  pela	
  regra	
  de	
  Simpson.	
  Na	
  notação	
  usada	
  aqui,	
  𝑥!	
  =	
  a,	
  𝑥!	
  =	
   b	
   e	
  𝑥!	
  é	
   um	
   ponto	
   equidistante	
   de	
  𝑥!	
  e	
  𝑥!.	
   Para	
   n	
   intervalos	
  ∆𝑥, a	
   fórmula	
  pode	
  ser	
  escrita	
  como:	
  	
   𝑓 𝑥 𝑑𝑥!! ≅ ℎ3 [𝑓 𝑥! + 4𝑓 𝑥! + 2𝑓 𝑥! +⋯+ 2𝑓 𝑥!!! + 4𝑓 𝑥!!! + 𝑓(𝑥!)	
  	
  na	
  qual	
  n	
  é	
  par	
  (correspondendo	
  a	
  um	
  número	
  par	
  de	
  intervalos	
  de	
  integração)	
  ou,	
   equivalentemente,	
   a	
   regra	
   de	
   Simpson	
   1/3	
   só	
   pode	
   ser	
   aplicada	
   para	
   um	
  número	
  ímpar	
  de	
  pontos	
  𝑥! ,	
  f(𝑥!).	
  [6]	
  	
  Calcular	
  	
   𝑒!𝑑𝑥  !! empregando	
  a	
  regra	
  de	
  Simpson	
  1/3.	
  Solução	
  Exata	
   Solução	
  pelométodo	
  do	
  Simpson	
   Erro	
  gerado	
  1.71828	
   1.71832	
   0.00004	
  Tabela	
  9	
  	
   Como	
   ilustrado	
   na	
   tabela	
   9,	
   temos	
   uma	
   solução	
   exata	
   para	
   a	
   equação	
  𝑒!𝑑𝑥  !! de	
   1.71828.	
   Utilizando	
   n=4	
   pela	
   regra	
   do	
   Simpson	
   obtivemos	
   uma	
  solução	
   de	
   1.7832.	
   Calculamos	
   o	
   	
   erro	
   pelo	
   modulo	
   da	
   diferença	
   entre	
   as	
  soluções	
   𝑠!"#$# − 𝑠!"#$!%& ,	
  tivemos	
  um	
  erro	
  de	
  0.00004.	
  	
  
Fortran	
  10	
  (implementação)	
  	
  
program simpson 
implicit none 
real h,s,a,b,f ! a e b sao limite de integrcao 
integer n,solucao 
solucao=21 
open(unit=solucao,file='solucao.txt') 
a=0. 
b=1. 
n=4 
h=(b-a)/n 
s=(h/2)*(f(0*h)+(4*f(1*h))+(2*f(2*h))+(4*f(3*h))+f(4*h)) 
write(solucao,*)'regra simpson' ,s 
end 
 
function f(x) 
real f,x 
 
f = exp(x) 
return 
end 	
  	
  	
  
	
  
7. Resolução	
  de	
  EDO	
  
	
   	
  Muitos	
   problemas	
   encontrados	
   em	
   engenharia	
   e	
   outras	
   ciências	
   podem	
  ser	
   formulados	
   em	
   termos	
   de	
   equações	
   diferenciais.	
   Por	
   exemplo,	
   trajetórias	
  balísticas,	
  teoria	
  dos	
  satélites	
  artificiais,	
  estudo	
  de	
  redes	
  elétricas,	
  curvaturas	
  de	
  vigas,	
   estabilidade	
   de	
   aviões,	
   teoria	
   das	
   vibrações,	
   reações	
   químicas	
   e	
   entre	
  	
  outras.	
   Esse	
   capitulo	
   7	
   tem	
   como	
   objetivo	
   apresentar	
  métodos	
   numericos	
   que	
  resolvam	
   equações	
   diferenciais	
   ordinárias,	
   vamos	
   abordar	
   nesse	
   trabalho	
   o	
  método	
  de	
  Euler	
  e	
  métodos	
  de	
  Runge	
  Kutta.	
  	
  
O	
  método	
  de	
  Euler,	
  consiste	
  em	
  tomar	
  a	
  aproximação	
  de	
  primeira	
  ordem	
  de  𝑥(𝑡 + ℎ):	
  	
   𝑥 𝑡 + ℎ = 𝑥 𝑡 + 𝑥! 𝑡 ℎ + 𝑜(ℎ)	
  	
   	
  O	
  resto	
  o(h)	
  indica	
  que	
  o	
  erro	
  em	
  tomar	
  essa	
  aproximação	
  será,	
  em	
  geral	
  da	
   ordem	
   de	
  ℎ! 	
  ou	
   mais.	
   Como	
  𝑥! = 𝑓 ,	
   o	
   método	
   sugere	
   que,	
   na	
   pratica,	
  obtenhamos	
  𝑥!!! = 𝑥 𝑡!!! = 𝑥(𝑡! + ℎ)	
  como:	
  	
  	
   𝑥!!! = 𝑥! + 𝑓 𝑡! , 𝑥! ℎ	
  	
   	
  A	
   interação	
   a	
   partir	
   do	
  𝑥!acumulará	
   um	
   erro	
   da	
   ordem	
   de	
  ℎ!	
  em	
   cada	
  etapa	
   podendo	
   acumular	
   ao	
   final	
   um	
   erro	
   de	
  𝑛ℎ!.	
   Como	
  𝑛 = !!!! 	
  ,	
   então	
   o	
   erro	
  acumulado	
  será	
  da	
  ordem	
  de	
   𝑏 − 𝑎 ℎ	
  .	
  [3]	
  
Considerando	
   ,	
  𝑥!  𝑒  𝑣!igual	
   a	
   zero.	
  Calcule	
   a	
  distancia	
   “x”	
  percorrida	
  em	
  10s,	
  estabelecendo	
  uma	
  aceleração	
  “a”	
  constante	
  de	
  valor	
  5𝑚𝑠!!. Sendo a função 
𝑥(𝑡)	
  =2,5𝑡. Através	
   do	
   método	
   de	
   Euler,	
   encontramos	
   a	
   solução	
   aproximada	
   da	
  equação	
  Diferencial	
  Ordinária	
  do	
  problema	
  acima. 
 𝑥!  =  𝑥!!!  +  ℎ𝑣(𝑡)  
 
Fortran	
  11	
  (implementação)	
  	
  
Program mruv " 
implicit none " 
real xo,vo,h,t,to,x,tf,v,ex 
integer i,n,dado " 
dado=20 
open(unit=dado,file='exct.txt') 
tf= 10 " 
xo=0 " 
vo=0 " 
to=0 
h=0.1 " 
i=0 
n=(tf‐to)/h 
x=xo 
t=to 
write(dado,*)i,t,x,ex(t) 
doi=1,n,1 " 
x=x+h*v(t) " 
t=t+h 
write(dado,*)i,t,x,ex(t) 
end do " 
call system('pause') 
end " 
!.............. " 
function v(t) " 
real v,t,vo " 
v=vo+5*t " 
return " 
end " 
!...................... " 
function ex(t) " 
real ex,t " 
ex=2.5*t**2 " 
return " 
end 	
  	
  Utilizado	
  varios	
  valores	
  para	
  “h”	
  ,	
  observamos	
  no	
  gráfico	
  abaixo	
  visualmente	
  que	
  o	
  h=1	
  e	
  o	
  que	
  se	
  aproxima	
  mais	
  da	
  solução	
  exata.	
  
 
	
  	
  	
   Métodos	
   de	
   Runge-­‐Kutta,	
   são	
   métodos	
   de	
   passo	
   simples	
   requerem	
  apenas	
  derivadas	
  de	
  primeira	
  ordem	
  e	
  pode	
  fornecer	
  aproximações	
  precisas	
  com	
  erros	
  de	
  truncamento	
  da	
  ordem	
  de	
  ℎ!, ℎ!, ℎ!,	
  etc.	
  Todas	
  os	
  métodos	
  de	
  Runge-­‐Kutta	
  têm	
  a	
  seguinte	
  forma	
  geral:	
  	
  
	
   𝑦!!! = 𝑦! + ℎ𝜙(𝑥! ,𝑦! , ℎ)	
  	
  onde	
  𝜙, chamado	
   de	
   função	
   incremento,	
   é	
   uma	
   aproximação	
   conveniente	
   para	
  
f(x,y)	
  no	
  intervalo	
  𝑥! ≤ 𝑥 ≤ 𝑥!!!.[5]	
  	
   O	
   método	
   de	
   Runge-­‐Kutta	
   de	
   4ª	
   ordem	
   é	
   o	
   mais	
   usado na	
   solução	
  numérica	
   de	
   problemas	
   com	
   equações	
   diferenciais	
   ordinárias.	
   Nesse	
   trabalho	
  será	
  apresentado	
  um	
  algoritmo	
  para	
  Runge	
  Kutta	
  de	
  4ª	
  ordem.	
  	
  
Algoritmo	
  	
  	
  Início	
  Se	
  n	
  =	
  0	
  Então	
  Escreva(‘Divisão	
  imprópria’)	
  Senão	
  Se	
  n	
  <	
  0	
  Então	
  Escreva(‘Intervalo	
  inválido’)	
  Senão	
  Início	
  h	
  ← (xn	
  –	
  x0)/n	
  	
  y	
  ← y0	
  x	
  ← x0	
  	
  Para	
  i	
  =	
  1	
  até	
  n	
  faça	
  Início	
  K1	
  ← f(x,y)	
  	
  K2	
  ← f(x	
  +	
  h	
  /	
  2,	
  y	
  +	
  h	
  /	
  2	
  *	
  K1)	
  	
  
K3	
  ← f(x	
  +	
  h	
  /	
  2,	
  y	
  +	
  h	
  /	
  2	
  *	
  K2)	
  	
  K4	
  ← f(x	
  +	
  h,	
  y	
  +	
  h	
  *	
  K3)	
  	
  y←y+h	
  /	
  6*(K1+2*K2+2*K3+K4)	
  x←x+h	
  Fim-­‐Para	
  Escreva(‘Valor	
  da	
  função	
  f	
  no	
  ponto	
  k	
  é:	
  ’,	
  y)	
  	
  Fim	
  Fim	
  	
  	
  Variáveis	
  utilizadas	
  no	
  algoritmo:	
  	
  Reais:	
  h,	
  y,	
  x,	
  y0,	
  x0,	
  K1,	
  K2,	
  K3,	
  K4	
  Inteiras:	
  i,	
  n	
  	
  	
  
8. Conclusão Foi	
   demostrado	
   com	
   esse	
   trabalho	
   que	
   calculo	
   numérico,	
   é	
   usado	
   para	
  resolver	
  qualquer	
  tipo	
  de	
  problema	
  matemático	
  complexo.	
  	
  No	
   capítulo	
   2	
   o	
   trabalho	
   apresenta	
   resolução	
   de	
   raizes	
   através	
   de	
  métodos,	
  entre	
  os	
  três	
  métodos	
  apresentado	
  Bisseção,	
  Newton	
  e	
  Secante,	
  nota	
  –	
  se	
  que	
  a	
  melhor	
  aproximação	
  feita	
  pelos	
  métodos	
  foi	
  a	
  Secante	
  e	
  Newton,	
  sendo	
  que	
  o	
  método	
  da	
  secante	
  e	
  menos	
  complexo	
  para	
  se	
   feito	
  do	
  que	
  Newton,	
  pois	
  não	
  precisamos	
  da	
  derivada	
  da	
  função.	
  	
  No	
  capítulo	
  3	
  o	
  trabalho	
  apresento	
  resolução	
  para	
  sistemas	
  lineares	
  onde	
  trabalhamos	
   com	
   os	
   métodos	
   de	
   Eliminação	
   Gaussiana	
   e	
   o	
   de	
   Gauss	
   Seidel,	
  podemos	
  observar	
  com	
  as	
  tabelas	
  4	
  e	
  5	
  que	
  os	
  dois	
  método	
  são	
  eficientes.	
  	
  No	
  capítulo	
  4	
  foi	
  apresentado	
  ajuste	
  de	
  curvas	
  pelo	
  método	
  dos	
  mínimos	
  quadrados,	
   em	
   geral	
   todo	
   ajuste	
   fundamenta-­‐se	
   nesse	
   método,	
   o	
   Fortran	
   6	
  apresentado	
  faz	
  qualquer	
  ajuste;	
   linear,	
  parabólico	
  entre	
  outros,	
  só	
  depende	
  de	
  seus	
  dados	
  de	
  entrado	
  para	
  a	
  leitura	
  do	
  programa.	
  	
  No	
  capítulo	
  5	
  foi	
  apresentado	
  dois	
  métodos	
  para	
  interpolação,	
  Lagrange	
  e	
  Spline	
   cubica	
   bastantes	
   eficientes,	
   no	
   exemplo	
   apresentado	
   o	
   método	
   Splinecubica	
  foi	
  mas	
  eficiente,	
  mostrado	
  no	
  gráfico	
  7.	
  	
  No	
   capítulo	
   6	
   foi	
   apresentado	
   dois	
   métodos	
   para	
   se	
   fazer	
   integrações,	
  Trapézio	
  e	
  Simpson.	
  Olhando	
  –	
  se	
  as	
  tabelas	
  8	
  e	
  9	
  tem	
  –	
  se	
  que	
  para	
  o	
  exemplo	
  apresentado	
   o	
  método	
  de	
   Simpson	
   teve	
  melhor	
   solução	
   por	
   apresentar	
  menor	
  erro.	
   No	
  capítulo	
  7	
  apresentamos	
  métodos	
  para	
  resolução	
  de	
  EDO,	
  observa	
  –	
  se	
  com	
   o	
   gráfico	
   8	
   que	
   quanto	
  menor	
   o	
   valor	
   “h”	
   escolhido	
  melhor	
   aproximação	
  pelo	
  método	
  de	
  Euler.	
  Conceituo	
  –	
  se	
  o	
  método	
  de	
  Runge	
  Kutta	
  e	
  foi	
  apresentado	
  um	
  algoritmo	
  para	
  resoluções	
  de	
  4ª	
  ordem.	
  Enfim	
   calculo	
   numérico	
   facilita	
   a	
   resolução	
   de	
   problemas	
   físicos	
  matemáticos,	
  com	
  soluções	
  próximas	
  da	
  realidade	
  que	
  em	
  geral	
  seria	
  infinito	
  os	
  cálculos	
  na	
  mão	
  .	
  	
  
 	
  
9. Referências	
  	
  	
  [1]	
  Brito,	
  N.	
  S.	
  D.	
  Calculo	
  Numérico	
  [2]	
  Pilling,	
  S.	
  Calculo	
  Numérico	
  [3]	
  Matos,	
  A.	
  C.	
  C.	
  de.	
  Apontamentos	
  de	
  Análise	
  Numérica	
  [4]	
  A.L.	
  de	
  Bortoli,	
  C.	
  Cardoso,	
  M.P.G.	
  Fachin	
  &	
  R.D.	
  da	
  Cunha.	
  Calculo	
  numérico	
  com	
  aplicações.	
  [5]	
  Lira,	
  W.	
  W.	
  M.	
  L.	
  Apostila	
  de	
  Calculo	
  Numérico	
  [6]	
  Ruggiero,	
  M.	
  A.	
  G.	
  &	
  Lopes,	
  V.	
  L.	
  da	
  R.	
  Calculo	
  numérico	
  aspectos	
  teóricos	
  e	
  computacionais

Outros materiais