Вы находитесь на странице: 1из 105

ENG

G 17114 – M
Métodoos Nu
umériccos paara
EEngennhariaa Mecânica

http://carvalho.u
usuarios.rrdc.puc-rio.br/ENG
G1714/
Departamento de Engenharia Mecânica

ENG 1714- Métodos Numéricos para Eng. Mecânica

Prof. Marcio S. Carvalho

email: msc@puc-rio.br
Sala: 153-L
Tel: 3527-1174

INTRODUÇÃO
APLICAÇÕES DE MÉTODOS NUMÉRICOS
 Tratamento de Dados Estatísticos

Análise de sinais
Cálcular de média, desvio padrão, variância, etc…
Determinar equação da curva que melhor descreve os
resultados de um experimento

y  f (x) ?

 Simulação de sistemas

Previsão de comportamento de um sistema


Projeto mais barato e de melhor desempenho
Verificação
MODELAGEM E SIMULAÇÃO
PROBLEMA REAL

MODELO FÍSICO

MODELO MATEMÁTICO MODELO EXPERIMENTAL

MÉTODOS NUMÉRICOS TÉCNICAS EXPERIMENTAIS

PREVISÕES PREVISÕES

PROBLEMAS DE ENGENHARIA: DOIS TIPOS

TIPO A TIPO B

Fenômenos físicos bem conhecidos Fenômenos físicos não muito bem


conhecidos
Condução de calor
Elasticidade Comportamento de materiais
Escoamento Laminar complexos (fluido e sólido)
Escoamento multifásico
Descrição matemática adequada Problema de molhamento

Equações diferenciais Modelos matemáticos “postulados”.

Complexidade do modelo aumenta com Fundamental a comparação com


o uso de menos hipóteses simplificadoras. experimentos para validar os modelos.

Dificuldade de solução das equações


que descrevem os fenômenos físicos.
MODELO MATEMÁTICO
 Conjunto de equações que descrevem um determinado fenômeno físico

 Modelo é desenvolvido a partir de hipóteses simplificadoras

Hipóteses simplificadoras são importantes para facitilar a solução


Hipóteses devem ser coerentes com o fenômeno a ser descrito
Engenharia: Uso correto de hipóteses simplificadoras
Hipóteses erradas levarão a predições incorretas

 Qualidade das predições está diretamente ligada ao modelo usado

 Compromisso entre custo para solução das equações e qualidade dos resultados

 Modelo pode ser DIFERENCIAL ou INTEGRAL

 Modelos diferenciais geralmente levam a equações sem solução analítica

 Necessidade de desenvolvimento de ferramentas para resolver as equações

IMPORTÂNCIA DE PREDIÇÃO
 Projeto de engenharia mais econômico

 Otimização de projetos

 Análise de situações sem dados experimentais

 Determinação de desempenho em casos limites


MÉTODOS DE PREDIÇÃO
 Modelo Experimental

Em escala ou escala reduzida


Custo financeiro e de tempo elevado
Difícil de analisar efeitos de condições isoladas
Fundamental para validar modelos teóricos

 Modelo Matemático

Baixo custo
Possibilidade de analisar diversos casos e otimizar projeto
Velocidade de obter resposta
Habilidade de simular condições reais e ideais
Necessidade de validar modelos matemáticos

 Comentários

Ideal: Combinação de experimentos e modelos matemáticos

MÉTODOS NUMÉRICOS

PROBLEMA REAL: TRANSFERÊNCIA DE CALOR

MODELO: CONSERVAÇÃO DE ENERGIA + LEI DE FOURIER

d  dT 
EQUAÇÃO DIFERENCIAL  k (T )  G ( x) T ( x)  ?
dx  dx 

DETERMINAR TEMPERATURA APENAS EM ALGUNS PONTOS DO DOMÍNIO

DISCRETIZAR O PROBLEMA

EQUAÇÃO DIFERENCIAL  EQUAÇÃO ALGÉBRICA


DIFERENTES MÉTODOS NUMÉRICOS

 DIFERENÇAS FINITAS

 ELEMENTOS FINITOS

 VOLUMES FINITOS

 ELEMENTOS DE CONTORNO

 ELEMENTOS ESPECTRAIS

 OUTROS ...

ESCOLHA DE SOFTWARE

 Softwares comerciais para diferentes aplicações

Análise estrutural: ANSYS, ADINA, ...


Escoamento de Fluidos: FLUENT, FIDAP, FLOW3D, ...
Fenômenos de Transferência: FLUENT, ...

 Softwares comerciais ou desenvolvidos

Versatilidade X desempenho
Desenvolvidos: Novos modelos
Comerciais: Mais “userfriendly”, interface gráfica

 Treinamento

Fundamentos físicos
Uso do software
EMENTA

 Cálculo de raiz de equação


 Interpolação e ajuste de curva
 Integração numérica
 Solução de sistema de equações algébricas
 Solução de sistema não-linear
 Descrição matemática de fenômenos físicos
 Equação diferencial ordinária - Problema de Valor de Contorno
Problema de Valor Inicial
 Equação diferencial parcial
 Método de diferenças finitas, elementos finitos e volumes finitos
 Otimização
INTRODUÇÃO ao MATLAB
Ó Software e linguagem e ambiente de programação para cálculos matemáticos

Ó MATLAB = Matrix Laboratory

Ó Possui diversas rotinas de cálculo matemático já programadas e testadas

Ó Possibilidade de criar programas e novas rotinas de acordo com


a necessidade do usuário

JANELA DE COMANDO - COMMAND WINDOW

Ó Janela principal.
principal Modo como o usuário se comunica com o progama MATLAB

Ó Os comandos e chamadas de programa são dados no prompt da janela

JANELA DE COMANDO - COMMAND WINDOW


Diretorio de trabalho

Janela de comando

Janela de variaveis
VARIÁVEL TIPO VETOR - ARRAY

Definição de uma variável tipo vetor

Valor do último elemento do vetor


Valor do passo
Valor do primeiro elemento do vetor

Cria um vetor z(i) tal que z(i)=5*sin(u(i))

CRIAÇÃO DE GRÁFICOS
JANELA DE PROGRAMAÇÃO / EDIÇÃO

Ó Criar uma nova jjanela de programação


p g ç

Ó Edição do programa. O arquivo deve ser salvo como *.m


Ó Para executar o programa, deve-se primeiro trocar o diretório de trabalho

Ó Para executar o programa, deve-se digitar o nome do arquivo *.m no prompt


JANELA DE VARIAVEIS

Principais comandos para gerenciamento da sessão


Comando Descrição
casesen Controla a sensitividade de caracteres maiúsculos e minúsculos
clc Limpa a janela de comando
clear Remove as variáveis da memória
who Lista as variáveis correntes na memória
quit Para a execução do MATLAB

Principais comandos do sistema e de controle de arquivos


Comando Descrição
cd diretorio Muda o diretório corrente para diretorio
pwd Imprime o diretório corrente
date Imprime a data
delete filename Remove o arquivo filename
dir Lista os arquivos presente no diretório corrente
load Carrega
g todas as variáveis do arquivo
q matlab.mat
load filename Carrega todas as variáveis do arquivo filename.mat
save Grava as variáveis da sessão no arquivo matlab.mat
save filename Grava as variáveis da sessão no arquivo filename.mat
if x >= 5 If x >= 5
y = log(x) y = log(x)
else elseif x >
>= 0
if x >= 0 y = sqrt(x)
y = sqrt(x) else
end
end

switch a + b
case 1
x = -5;
case 2
x = -5 – (a+b)/10;
otherwise
x = 5;
end

for i = 1:10:2
x = x + i;
i
end
x = 5;
while x M 25
disp(x)
x = 2*x – 1;
end

SCRIPT X FUNCTION

Script: Não trabalha com argumentos.


argumentos Variáveis globais.
globais
Programa principal
Function: Trabalha com argumentos. Variáveis locais.
Programa principal
Eng1714 – Métodos Numéricos para Engenharia Mecânica

Laboratório: MatLab

1) Escreva um programa em MatLab para efetuar a multiplicação entre duas matrizes. O programa
deve primeiro ler o número de linhas e colunas de cada matriz e o valor de cada entrada das matrizes.
Antes de efetuar a operação, o programa deve verificar se a mesma é possível, i.e. se o número de
colunas de uma matriz é igual ao número de linhas da outra.

2) Escreva um programa que calcule as raízes reais de um polinômio do 2o grau ax 2 + bx + c = 0 . O


programa deve seguir os seguintes passos: (i) ler os coeficientes do polinômio; (ii) Calcular as raízes,
tomando o cuidado para evitar divisão por zero e raízes complexas; (iii) Mostrar as soluções obtidas;
(iv) Perguntar ao usuário se ele quer voltar ao passo (i).
2/17/11 11:59 AM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab1-m...\prodmat.m 1 of 2

%---------------------------------------------------------
%
% LABORATORIO DE METODOS NUMERICOS
%
% Programa para multiplicar duas matrizes.
%
% Autora: Juliana Vianna
%
% Data: Agosto 2005
%
%---------------------------------------------------------

%limpa a memoria.
clear all;

%Le o numero de linhas e colunas das matrizes A e B a serem multiplicadas.

linA = input('entre com o numero de linhas de A :')

colA = input('entre com o numero de colunas de A :')

linB = input('entre com o numero de linhas de B :');

colB = input('entre com o numero de colunas de B :');

% Apos mandar executar esses comandos, repare que o numero de


% linhas e colunas de A apareceram na tela enquanto de B, nao.
% Isso se da devido ao ponto e virgula colocado apos
% o comando de leitura das linhas e colunas de B.

% Sempre que voce nao quiser que o resultado do comando nao seja
% impresso na tela basta colocar ponto e virgula no fim.
%
% Le cada entrada de A e B:

for ia = 1:linA
for ja = 1:colA
i = ia
j = ja
A(ia,ja) = input('A(i,j) = ');
end
end
A % mostra A

for ib = 1:linB
for jb = 1:colB
i = ib
j = jb
B(ib,jb) = input('B(i,j) = ');
end
end
B % mostra B
2/17/11 11:59 AM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab1-m...\prodmat.m 2 of 2

% Verifica se a multiplicacao de A com B e possivel.


% Se possivel executa, se nao mostra uma
% mensagem de erro.

if colA == linB
for im = 1 :linA
for jm = 1 :colB
soma=0;
for ks = 1:colA
soma = soma + A(im,ks)*B(ks,jm);
end
C(im,jm)= soma;
end
end
C
else
disp('ERRO! Nao e possivel multiplicar essas matrizes.')
end
2/17/11 12:00 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab1...\raiz2grau.m 1 of 2

% Programa para calculo das raizes de uma equacao do 2 grau


%
%
clear
clc

repetir = true;

while (repetir)
disp(' Entre com os coeficientes :');

A = input (' A = ');


B = input(' B = ');
C = input(' C = ');

disc = B^2 - 4*A*C;

if (A == 0)
if (B == 0)
disp('Nao e equacao')
else
x1 = -C/B;
disp('equacao possui uma raiz.');
disp('Raiz =');
x1
end
else
if (disc < 0.)
disp('equacao nao possui raiz real ');
disp(' ');

elseif (disc == 0)
x1 = -B/(2*A);
disp('equacao possui somente uma raiz.');
disp('Raiz =');
x1
else
x1 = (-B + disc^0.5)/(2*A);
x2 = (-B - disc^0.5)/(2*A);
disp('equacao possui duas raizes.');
disp('Raizes =');
x1
x2
end
end

resposta = input('Calcular outra raiz (0 = N / 1 = S) ?');

switch resposta
case 0
repetir=false;
case 1
repetir=true;
end
2/17/11 12:00 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab1...\raiz2grau.m 2 of 2

end
AJUSTE DE CURVAS E INTERPOLAÇÃO
INTERPOLAÇÃO
OBJETIVO
ÓConhecendo-se os valores de uma função em pontos discretos de um intervalo,
deseja-se
j determinar uma curva q
que “represente”
p esta função neste intervalo.

f1*(x) f2*(x)

x x
APLICAÇÕES
ÓAjuste de dados experimentais - Estes carregam incertezas.
ÓAjuste dos dados de acordo com um modelo – Esta abordagem permite a
obtenção de parâmetros que possuam interpretação física. Ex. f1(x): σ=Εε.
ÓNecessidade de integração da função em questão.
ÓD j dde se conhecer
ÓDesejo h o valor
l dad função
f ã em pontos específicos
ífi não
ã dados.
d d
ÓAproximar uma função por outra menos complexa, de fácil aplicação.

TIPOS DE PROCESSOS

AJUSTE DE CURVAS
Tem-se um conjunto de pontos e deseja-se uma f*AC(x)
curva que passe “próxima” destes pontos. A
equação da curva ajustada deve possuir um
número de parâmetros menor que o número de
pontos dados.
x
Dados n pontos xi, f(xi) no intervalo (a,b) obtém-se f*(x) tal que | f*(xi)-f(xi) |<ε

INTERPOLAÇÃO PADRÃO
Tem-se um conjunto de pontos e deseja-se f*IP(x)
obter uma curva que passe suavemente
através de todos os ppontos. A equação
q ç da
curva interpoladora deve possuir o
mesmo número de parâmetros que o número
de pontos dados. x

Dados n pontos xi, f(xi) no intervalo (a,b) obtém-se f*(x) tal que f*(xi)=f(xi)
MÉTODO DOS MÍNIMOS QUADRADOS

ÓÉ
É o método mais utilizado para ajuste de curvas.
ÓA condição que determina a curva a ser obtida é a minimização da soma dos
qquadrados das diferenças
ç entre os valores da função
ç a ser determinada e da
função original calculados nos pontos dados.

f*(x)
( )
n pontos

QUANTIDADE MINIMIZADA
n
E=Σi=1
i 1
[[f*((xi))-f(x
( i)]2 f*(xi)-f(xi)

EXEMPLO SIMPLES

Dada a tabela de pontos ao lado, x 1 3 4 6 7


determinar a reta que se ajusta a
estes pontos utilizando o método f(x) -2,1 -0,9 -0,6 0,6 0,9
d mínimos
de í i quadrados
d d

SOLUÇÃO
15
1.5

Plotando-se os pontos dados, obtem-se o 1

gráfico discreto ao lado. 0.5

0
0 2 4 6 8
A função escolhida para representar -0.5

estes pontos é do primeiro grau, portanto -1

-1.5

f * ( x ) = mx + k 2
-2

-2.5

A aplicação do método
método, neste caso
caso, resultará na determinação dos valores dos
coeficientes angular e linear da reta que se ajusta a estes pontos, segundo o
critério da minimização da soma dos quadrados dos desvios.
CÁLCULO DA SOMA DO QUADRADO DOS DESVIOS

∑ [ f (x ) − f ( x )]
n 5

∑ [mx + k − f ( xi )]
2
E = =
* 2
i i i
i =1 i =1

5
E = ∑m x + k 2 + [ f ( xi )] + 2mkxi − 2mxi f ( xi ) − 2kf ( xi )
2 2 2
i
i =1

Pode-se perceber que a grandeza a ser minimizada, com o


procedimento adotado, é escrita como uma função dos coeficientes.

E = E (m, k )

A escolha dos coeficientes que minimizam E deve, portanto, ser tal que:

∂E ⎡ 5 ⎤
= 0 ⇒ 2 ⎢∑ mxi2 + kx
k i − xi f ( xi )⎥ = 0
∂m ⎣ i =1 ⎦
∂E ⎡ 5 ⎤
= 0 ⇒ 2 ⎢∑ k + mxi − f ( xi )⎥ = 0
∂k ⎣ i =1 ⎦

5 5 5
⇒ m Σ xi2 + k Σ xi − Σ xi f ( xi ) = 0 i xi f(xi) xi2 xi*f(xi)
i =1 i =1 i =1 1 1 -2.1
21 1 -2.1
21
2 3 -0.9 9 -2.7
5 5
⇒ 5k + m Σ xi − Σ f ( xi ) = 0
3 4 -0.6 16 -2.4
i =1 i =1 4 6 0.6 36 3.6
5 7 0.9 49 6.3
sum 21 -2.1 111 2.7
⎡ 5 2 5
⎤ ⎡ 5 ⎤
⎢∑ xi ∑ xi⎥
⎡m⎤ ⎢ ∑ xi f ( xi )⎥
⎢ i =51 i =1
⎥ ⎢ ⎥ = ⎢ i =15 ⎥ 57.6 -290 0.505 -2.54
⎢ ∑ xi ⎣ ⎦
⎣⎢ i =1
5 ⎥
⎥⎦
k ⎢ ∑ f ( xi ) ⎥⎥⎦
⎢⎣ i =1
114

⎡111 21⎤ ⎡m ⎤ ⎡ 2.7 ⎤ ⎡m ⎤ 1 ⎡ 5 − 21⎤ ⎡ 2.7 ⎤


⇒ ⎢ ⎥ ⎢ ⎥ = ⎢− 2.1⎥ ⇒ ⎢k ⎥ =
⎣ 21 5 ⎦ ⎣ k ⎦ ⎣ ⎦ ⎣ ⎦ 111 × 5 − 212 ⎢⎣− 21 111 ⎥⎦ ⎢⎣− 2.1⎥⎦

⎡m⎤ ⎡ 0.505 ⎤
∴⎢ ⎥ = ⎢ ⎥
⎣k ⎦ ⎣− 2.542⎦
CÁLCULO DO ERRO
1.5

Erro absoluto 0.5

E A = f ( xi ) − f * ( xi ) -0.5
0 2 4 6 8

-1

-1.5

Erro relativo -2

-2.5

f ( xi ) − f * ( xi )
ER =
1.5

f ( xi ) 1

0.5

0
0 2 4 6 8
Erro qquadrático -0.5

-1

EQ = [ f ( xi ) − f * ( xi )]
2 -1.5

-2

-2.5

Erro Abs. Erro Rel. Erro Quad.

CASO MAIS GERAL


Para um caso mais geral, onde a função de ajuste é formada por uma combinação
linear de funções linearmente independentes, tem-se:
m
f * ( x) = ∑ c φ ( x)
j =1
j j = c1φ1 ( x) + c2φ2 ( x) + L + cmφm ( x)

∂E
∑ [ f ( x ) − f ( x )]
n
= 0
2
E = *

i =1
i i m incógnitas ∂c j

Exemplos: m equações

(1) f * ( x) = ax
14
2
+2
4 b4+4
bx 3c Nestes
N t problemas,
bl recai-se
i em
∂E
=0
∂E
=0
∂E
=0
um sistema de m equações
∂a ∂b ∂c (derivando-se E em relação a
cada coeficiente) e m
(2) f * ( x) = A sen x + B cos x
14442444 3 incógnitas (os coeficientes)
∂E ∂E
=0 =0
∂A ∂B

(3) g * ( z ) = Kz n ⇒ ln[ g * ( z )] = ln K + n ln z ⇒ f * ( x) = K + nx
1442443
∂E ∂E
=0 =0
∂K ∂n
∑ [ f ( x ) − f ( x )]
n
2
E = *
i i OBS 1: Índice mudo
i =1
m m m

m ∑ c jφ j ( x) = ∑ c pφ p ( x) = ∑ c φ ( x)
q q
f ( x) =
*
∑ c jφ j ( x)
j =1
j =1 p =1 q =1

Devido aos termos cruzados


cruzados, na multiplicação indicial,
indicial deve-se
deve se escrever cada
termo com um índice diferente, portanto:

⎧⎡ mn
⎤ ⎡m ⎤⎫
⇒ E = ∑ ⎨⎢∑ c pφ p ( xi ) − f ( xi )⎥ ∗ ⎢∑ cqφq ( xi ) − f ( xi )⎥ ⎬
i =1 ⎩⎣ p =1 ⎦ ⎣ q =1 ⎦⎭

n
⎧m m m
2⎫
⇒ E = ∑ ⎨∑ ∑ p q p i q i
c c φ ( x )φ ( x ) − 2 f ( xi ∑ ckφk ( xi ) + [ f ( xi )] ⎬
)
i =1 ⎩ p =1 q =1 k =1 ⎭

n
⎧m m m
2⎫
E = ∑ ⎨∑ ∑ p q p i q i
c c φ ( x )φ ( x ) − 2 f ( xi ∑ ckφ k ( xi ) + [ f ( xi )] ⎬
)
i =1 ⎩ p =1 q =1 k =1 ⎭
∂ ∂
∂c j ∂c j
A minimização desta grandeza obedece à condição:

∂E
∑ {A ( x ) + B ( x )} =
n
= 0 ⇒ 0
∂c j
j i j i
i =1
OBS 2:
m m ⎡ ∂c p ∂cq ⎤ ∂ck
Aj ( xi ) = ∑ ∑ ⎢
p =1 q =1 ⎣ ∂c j
c φ
q p ( xi )φ q ( xi ) + c p
∂c j
φ p ( xi )φ q ( xi ⎥
)
∂c j
= δ jk

OBS 3:

∑ ∑ [δ c φ p ( xi )φq ( xi ) + c pδ jqφ p ( xi )φq ( xi )]


m

∑δ
m m
⇒ A j ( xi ) = jp q jk φk ( xi ) = φ j ( xi )
p =1 q =1 k =1

⎡m ⎤
⇒ A j ( xi ) = φ j ( xi ) ⎢∑ [cqφq ( xi )] + [c pφ p ( xi )]⎥ = 2φ j ( xi )⎢∑ ckφk ( xi )⎤⎥
⎡m
m

∑ ⎣ k =1 ⎦
⎣ q =1 p =1 ⎦
⎧m m
n m
2⎫
E = ∑ ⎨∑ ∑ c p cqφ p ( xi )φq ( xi ) − 2 f ( xi )∑ ckφk ( xi ) + [ f ( xi )] ⎬
i =1 ⎩ p =1 q =1 k =1 ⎭

∂c j
∂E
∑ {A ( x ) + B ( x )}
n
=
∂c j
j i j i
i =1
OBS 2:

∂ck ∂ck
= δ jk
m
B j ( xi ) = −2 f ( xi )∑ φk ( xi ) ∂c j
k =1 ∂c j
OBS 3:
m
⇒ B j ( xi ) = −2 f ( xi )∑ δ jkφk ( xi ) = −2 f ( xi )φ j ( xi )
m

k =1 ∑δ
k =1
φ ( xi ) = φ j ( xi )
jk k

Juntando Aj e Bj tem-se:

∂E n
⎧ ⎡m ⎤ ⎫

∂c j
= ∑ ⎨2φ j ( xi ) ⎢∑ ckφk ( xi ) ⎥ − 2 f ( xi )φ j ( xi )⎬ = 0
i =1 ⎩ ⎣ k =1 ⎦ ⎭

∂E n
⎧ ⎡m ⎤ ⎫
∂c j
= ∑ ⎨ j i ⎢∑ ckφk ( xi )⎥ − 2 f ( xi )φ j ( xi ) ⎬ = 0
i =1 ⎩
2φ ( x )
⎣ k =1 ⎦ ⎭

Para cada coeficiente existe uma equação correspondente, por exemplo, j=1:

∂E ⎧ n n n n

= 2⎨c1 ∑ φ12 ( xi ) + c2 ∑ φ1 ( xi )φ2 ( xi ) + L + cm ∑ φ1 ( xi )φm ( xi ) − ∑ f ( xi )φ1 ( xi )⎬ = 0
∂c1 ⎩ i =1 i =1 i =1 i =1 ⎭

Colocando o sistema de equações na forma matricial tem-se:

⎡ n n n
⎤ ⎡ n ⎤
⎢ ∑ φ12 ( xi ) ∑ φ ( x )φ ( x )
1 i 2 i L ∑ φ ( x )φ
1 ( xi ) ⎥
i m
⎡ c1 ⎤ ⎢ ∑ f ( xi )φ1 ( xi ) ⎥
⎢ n i =1 i =1
n
i =1
n ⎥ ⎢c ⎥ ⎢ i n=1 ⎥
⎢ ∑ φ1 ( xi )φ2 ( xi ) ∑ φ2 ( xi )
2
L ∑ φ2 ( xi )φm ( xi ) ⎥ ⎢ 2 ⎥ = ∑ f ( xi )φ2 ( xi ) ⎥

⎢ i =1 i =1 i =1 ⎥ ⎢M⎥ ⎢ i =1 ⎥
⎢ M M O M ⎥ ⎢ ⎥ ⎢ M ⎥
⎢ n n n ⎥ ⎣cm ⎦ ⎢ n ⎥
⎢∑ φ1 ( xi )φm ( xi ) ∑ φ2 ( xi )φm ( xi ) L ∑ φm ( xi ) ⎥ ⎢∑ f ( xi )φm ( xi ) ⎥
2

⎣ i =1 i =1 i =1 ⎦ ⎣ i =1 ⎦
EXEMPLO SIMPLES NO MATLAB

Dada a tabela de pontos abaixo, determinar a reta que se ajusta a estes pontos
utilizando o método de mínimos quadrados
x 11 2
1.1 3 4 5 6
F(x) 1.1 1.9 2.9 4.2 4.9 6.2

ÓMontar a matriz P= | x | f(x) | x2 | xf(x) |

ÓInicializar SUM_( * )=0 ⎡ n 2 n ⎤ ⎡ 5 ⎤


⎢∑ xi ∑ xi ⎥ ⎡ ⎤
m ⎢ ∑ xi f ( xi )⎥
⎢ i =n1 ⎢k ⎥ = ⎢ 5
i =1
ÓCalcular SUM_(
_( * ))=0 ⎥ i =1

⎢ ∑ xi n ⎥ ⎣ ⎦ ⎢ ∑ f ( xi ) ⎥
ÓMontar a matriz A e a coluna b ⎣⎢1i =4
1
42443⎦
⎥ ⎣⎢1i42=1
43⎦

A b

ÓResolver o sistema

COMANDOS NO MATLAB
>> clear all b=
>> n=6;
>> A(2,1)=A(1,2)
>> P(1,1)=1.1; 1.2100
>> P(2,1)=2; 1.1000 A=
>> P(3,1)=3;
>> P(4,1)=4;
36 6
>> P(5,1)=5; b= 6 0
>> P(6,1)=6;
P(6 1)=6;
>> P(1,2)=1.1; 3.8000 >> A(2,2)=n;
>> P(2,2)=1.9; 1.9000 >> A
>> P(3,2)=3.2;
>> P(4,2)=3.9;
A=
>> P(5,2)=4.9; b=
>> P(6,2)=6,2;
36 6
9.6000
9 6000 6 6
P= 3.2000
>> C=inv(A)*b
1.1000 1.1000 b=
2.0000 1.9000
C=
3.0000 3.2000 15.6000
4.0000 3.9000 3.9000 1.0000
1 0000
5.0000 4.9000
0.0000
6.0000 6.0000
b=
>> SUM_X=0;
>> SUM_F=0; 24.5000
>> SUM_X2=0; 4.9000
>> SUM_XF=0;;
>> for i=1:n
P(i,3)=P(i,1)*P(i,1); b=
P(i,4)=P(i,1)*P(i,2);
A(1,2)=SUM_X+P(i,1); 36
A(1,1)=SUM_X2+P(i,3); 6
b(1,1)=SUM_XF+P(i,4);
b(2 1)=SUM
b(2,1) SUM_F+P(i,2)
F+P(i 2)
end
INTERPOLAÇÃO LAGRANGEANA

É um caso particular importante de interpolação,


interpolação ou seja,
seja de se obter uma curva
que passe pelos pontos dados.
Dados n pontos xi, f(xi) no intervalo (a,b) obtem-se f*(x) tal que f*(xi)=f(xi)

Algumas características da Interpolação Lagrangeana são listadas a seguir:


ÓA função interpoladora é polinomial e de grau mínimo possível (n-1)

ÓO polinômio interpolador de grau n-1 é formado por uma combinação


linear de n polinômios (polinômios-base) também de mesmo grau n-1.
o número de ppolinômios- Polinômios de g
graus n-1
base é igual ao de pontos
n
f ( x) =
*
∑ c P ( x)
j =1
j j

ÓOs coeficientes da combinação linear são os próprios valores da


função original nos pontos dados e portanto os polinômios-base possuem
valor
l unitário
itá i em um pontot e se anulam
l nos outros:
t
c j = f * ( x j ) = y j ⇔ Pj ( xi ) = δ ij

EXEMPLO SIMPLES

Dados os pontos (2,2) e (3,3), determinar a reta que se ajusta a estes pontos
utilizando o método da Interpolação Lagrangeana.

SOLUÇÃO

ÓO polinômio interpolador de grau n-1 é formado por uma combinação linear de n


polinômios
li ô i (polinômios-base)
( li ô i b ) também bé ded mesmo grau n-1.
1
Como são dados dois pontos, (2,2) e (3,3), os n=2 polinômios-base são de grau
n-1=1. Além disso, P1(x)=1, para o ponto (2,2) e P1(x)=0, para o ponto (3,3).
Analogamente, P2(x)=0 para o ponto (2,2) e P2(x)=1, para o ponto (3,3).

Pj ( xi ) = δ ij P1 ( x) = − x + 3 P2 ( x) = x − 2 Pj ( xi ) = δ ijj
n=2
f ( x) =
*
∑ y P ( x)
j =1
j j = 2 P1 ( x) + 3P2 ( x)

⇒ f * ( x) = 2( − x + 3) + 3( x − 2) = x c j = f *(x j ) = y j
ÓProva da ida (a volta é análoga) c j = f * ( x j ) = y j ⇒ Pj ( xi ) = δ ij

n
f * ( x) = ∑ c P ( x)
j =1
j j Deve-se impor a condição f*(xi)=f(xi)
OBS 3:
n m
c j = f ( x j ) ⇒ f ( xi ) =
*
∑j =1
*
f ( x j ) Pj ( xi ) ∑δ
k =1
φ ( xi ) = φ j ( xi )
jk k

i = 1 ⇒ f ( x1 ) = f * ( x1 ) P1 ( x1 ) + f * ( x2 ) P2 ( x1 ) + L + f * ( xn ) Pn ( x1 ) = f * ( x1 )
⇒ P1 ( x1 ) = 1 P2 ( x1 ) = 0 L Pn ( x1 ) = 0

i = 2 ⇒ f ( x2 ) = f * ( x1 ) P1 ( x2 ) + f * ( x2 ) P2 ( x2 ) + L + f * ( xn ) Pn ( x2 ) = f * ( x2 )
⇒ P1 ( x2 ) = 0 P2 ( x2 ) = 1 L Pn ( x2 ) = 0
Logo, percebe-se que a condição nos coeficientes é também uma condição no tipo
de polinômio que forma a base de funções ser satisfeita (de acordo com a OBS 3)

Pj ( xi ) = δ ij

Exemplos de funções base polinomias que obedecem a condição: Pj ( xi ) = δ ij


P1 P2

Linear 12
1.2

1
1.2

0.8 0.8

0.6 0.6

0.4 0.4

0.2 02
0.2

0 0

Parabólica
P1 P2 P3

1.2 1.2 1.2

1 1 1

0.8 0.8
0.8
0.6 0.6
0.6
0.4 0.4
0.4
0.2 0.2
0.2
0 0

-0.2 0 -0.2

Cúbica
P1 P2 P3 P4

1.2 1.2 1.2 1.2

1 1 1
1
0.8 0.8 0.8
0.8
0.6 0.6
0.6 0.6
0.4 0.4
04
0.4 04
0.4
0.2 0.2
0.2 0.2
0 0
0 0
-0.2 -0.2

-0.2 -0.4 -0.4 -0.2


CÁCULO DOS POLINÔMIOS-BASE
Sabe-se qque o ppolinômio base assume o valor unitário em um pponto e é
nulo nos demais. Logo, estes demais pontos são raízes do polinômio.
Portanto:

( x − x1 )( x − x2 ) L ( x − x j −1 )( x − x j +1 ) L ( x − xn )
Pj ( x) =
( x j − x1 )( x j − x2 ) L ( x j − x j −1 )( x j − x j +1 ) L ( x j − xn )
n

∏x− x
i =1
i

i≠ j
Pj ( x) = n

∏x k =1
j − xk
k≠ j

FUNÇÃO INTERPOLADORA
n
f * ( x) = ∑ y P ( x)
j =1
j j

EXEMPLO

ç f(
Considere a função ) x ppara 0<x<1. Utilize a interpolação
f(x)=e p ç Lagrangeana
g g com
três pontos x1=0, x2=0.5 e x3=1 para representar esta curva.
SOLUÇÃO

Serão 3 polinômios-base do 2o. grau


n
f * ( x) = ∑ y P ( x)
j =1
j j = y1P1 ( x) + y2 P2 ( x) + y3 P3 ( x)

( x − x2 )( x − x3 ) ( x − x1 )( x − x3 )
f * ( x) = f ( x1 ) + f ( x2 ) +
( x1 − x2 )( x1 − x3 ) ( x2 − x1 )( x2 − x3 )
( x − x1 )( x − x2 )
+ f ( x3 )
( x3 − x1 )( x3 − x2 )

f * ( x) = 1(2 x 2 − 3x + 1) + e0.5 (−4 x 2 + 4 x) + e(2 x 2 − x)


1442443 1442443 14243
y1 P1 ( x ) y 2 P2 ( x ) y3 P3 ( x )

f * ( x) = 0.84168 x 2 + 0.87660 x + 1
RESULTADOS 3

25
2.5
f ( x) = e x 2
y=exp(x)
1.5
f * ( x) = 0.84168 x 2 + 0.87660 x + 1 1
y=f*(x)

Erro absoluto 0.5

E A = f ( x) − f ( x)
* 0 0.2 0.4 0.6 0.8 1 1.2

Erro relativo 0.015

0.01

f ( x) − f ( x)
*
ER = 0.005

f (x
( x) 0 Erro Abs
Abs.
0 0.2 0.4 0.6 0.8 1 1.2 Erro Rel.
-0.005 Erro Quad.

-0.01
Erro quadrático
0 015
-0.015

EQ = [ f ( x) − f * ( x)]
2 -0.02
Laboratório de Ajuste de Curvas

1) O nível da água no Mar do Norte é determinado pelo movimento de maré conhecido como Maré
M2, com um período de 12 horas. A variação do nível com o tempo pode ser descrita pela seguinte
fórmula:

⎛ 2πt ⎞ ⎛ 2πt ⎞
H (t ) = h0 + A1 cos⎜ ⎟ + A2 sin ⎜ ⎟, t em horas
⎝ 12 ⎠ ⎝ 12 ⎠

Os seguintes dados foram determinados experimentalmente

t 0 2 4 6 8 10 Horas
H(t) 1.0 1.6 1.4 0.6 0.2 0.8 metros

Determine os parâmetros da curva de variação de H(t), isto é h0 , A1 e A2 utilizando os dados acima


e o método dos mínimos quadrados.
2/17/11 12:05 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab2-...\QuadMin2.m 1 of 3

clc % Apaga tudo o escrito na janela de conandos


clear all % Apaga as variáveis usadas anteriornente

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% PROGRAMA DE AJUSTE DE DADOS POR MINIMOS QUADRADOS

% FINALIDADE

% Ajuste linear pelo método de míninos quadrados.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%

% Não precisa declaração de variávies

% Dados de entrada
disp( 'PROGRAMA DE AJUSTE DE DADOS POR MÍNIMOS QUADRADOS ' );
disp( '-------- -- ------ -- ----- --- ------- --------- ');
disp( ' ');
disp( ' ');

disp ('ENTRADA DE DADOS ' );


disp( ' ');
disp( ' ');
disp( ' ');

n=input('Entre o núnero de pontos : ');


k=1;
clc
disp(' ENTRADA DOS PONTOS ');
disp(' ------- --- ------ ');

while k<=n

disp( ' ');


disp('Ponto');disp(k);
t =input(' t(i) : ');
H =input(' H(i) : ');
A(k,1)=t; % Armazena os valores de "t" na coluna 1 da matriz A
A(k,2)=H ; % Armazena os valores de "H(t)" na coluna 2 da matriz A
k=k+1;
end

% Inicialização de variáveis
2/17/11 12:05 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab2-...\QuadMin2.m 2 of 3

SomY=0;
SomCos=0;
SomSen=0;
SomCosSen=0;
SomCos2=0;
SomSen2=0;
SomYCos=0;
SomYSen=0;

for i=1:n

theta=(2*pi/12*A(i,1));
A(i,3)=cos(theta);
A(i,4)=sin(theta);
A(i,5)=cos(theta)*sin(theta);
A(i,6)=(cos(theta))^2;
A(i,7)=(sin(theta))^2;
A(i,8)=A(i,2)*cos(theta);
A(i,9)=A(i,2)*sin(theta);

SomY=SomY+A(i,2);
SomCos=SomCos+A(i,3);
SomSen=SomSen+A(i,4);
SomCosSen=SomCosSen+A(i,5);
SomCos2=SomCos2+A(i,6);
SomSen2=SomSen2+A(i,7);
SomYCos=SomYCos+A(i,8);
SomYSen=SomYSen+A(i,9);

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Definicao dos elementos da matriz para calculo dos coeficientes

B(1,1)=n;
B(1,2)=SomCos;
B(1,3)=SomSen;
B(2,1)=SomCos;
B(2,2)=SomCos2;
B(2,3)=SomCosSen;
B(3,1)=SomSen;
B(3,2)=SomCosSen;
B(3,3)=SomSen2;

%%%%%%%%%%%%%%%%%

D(1,1)=SomY;
D(2,1)=SomYCos;
D(3,1)=SomYSen;

% Solução do sistema de equações


2/17/11 12:05 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab2-...\QuadMin2.m 3 of 3

C=inv(B)*D;
disp( ' ');
disp( ' ');
clc
disp('IMPRESSÃO DOS RESULTADOS ');
disp('--------- --- ---------- ');

disp( ' ');


disp( ' ');

% Obtenção dos coeficientes

h0=C(1,1)
A1=C(2,1)
A2=C(3,1)

tmin = min(A(:,1));
tmax = max(A(:,1));
delta = (tmax-tmin)/19;
tfit = [tmin:delta:tmax];

for i=1:20
Hfit(i) = h0 + A1*cos(2*pi/12*tfit(i)) + A2*sin(2*pi/12*tfit(i));
end

% Impressão do gráfico dos pontos e da curva ajustada

plot(A(:,1),A(:,2),'bo',tfit,Hfit,'r')
xlabel('x')
ylabel('f(x)')
title('Ajuste pelo método dos mínimos quadrados ')
INTEGRAÇÃO NUMÉRICA
Ó Frequentemente cálculos integrais são necessários em engenharia
b
I= ∫ f ( x)dx
a
d

Ó Na
N maioria
i i dos
d casos, a integral
i t l não
ã pode
d ser calculada
l l d analiticamente
liti t

y I = Área sob o gráfico

Primeira idéia

I = f (a )Δx + f (a + Δx)Δx + f (a + 2Δx)Δx + f (a + 3Δx)Δx


Δx 4 4
I= ∑ f [a + (i − 1)Δx]Δx =∑ f ( x )Δx
i =1 i =1
i

a b x

Melhor aproximação y

Usar os pontos no meio do intervalo


4 intervalos
g do Retângulo
Regra g 5 pontos
Δx

a b x

⎛ (a ) + (a + Δx) ⎞ ⎛ (a + Δx) + (a + 2Δx) ⎞


I = f⎜ ⎟Δx + f ⎜ ⎟Δx +
⎝ 2 ⎠ ⎝ 2 ⎠
⎛ (a + 2Δx) + (a + 3Δx) ⎞ ⎛ (a + 3Δx) + (a + 4Δx) ⎞
f⎜ ⎟Δx + f ⎜ ⎟Δx
⎝ 2 ⎠ ⎝ 2 ⎠
⎡ (a + (i − 1)Δx) + (a + iΔx) ⎤
4 4
I= ∑
i =1
f⎢
⎣ 2 ⎦ i =1

⎥ Δx = f ( xi − 1 2 )Δx
Melhor aproximação y

Intepolação linear em cada intervalo


4 intervalos
g do Trapézio
Regra p 5 pontos
Δx

a b x

I=
[ f (a) + f (a + Δx)] Δx + [ f (a + Δx) + f (a + 2Δx)] Δx +
2 2
[ f (a + 2Δx) + f (a + 3Δx)] Δx + [ f (a + 3Δx) + f (a + 4Δx)] Δx
2 2
⎡1 1 ⎤
I = Δx ⎢ f (a ) + f (a + Δx) + f (a + 2Δx) + f (a + 3Δx) + f (a + 4Δx)⎥
⎣2 2 ⎦
4
[ f (a + (i − 1)Δx) + f (a + iΔx)] Δx
I= ∑
i =1 2

y De uma forma geral, a integral é calculada por


uma soma ponderada
d d dosd valores
l do
d integrando
i d
em pontos do intervalo de integração

Δx b n
I= ∫ f ( x) = ∑ w f (x )
i =1
i i
a
x2
x1=a xn+1=b x n : número de intervalos
n+1: número de pontos

wi são chamados de PESO e os pontos


xi onde a função deve ser avaliada são chamados de ABSCISSA

Ó As diferentes fórmulas de integração numérica são


escolhas particulares dos pesos e abscissas

Ó Todo fórmula de quadratura deve tender a integral exata quando o


número de pontos torna-se muito grande
Ó Geralmente
G l usa-se abscissas
b i igualmente
i l espaçadas
d e escolhe-se
lh
pesos para obter a melhor aproximação

Ó O resultado pode ser sistematicamente melhorado dividindo o intervalo ao meio

Ó A precisão do método pode ser avaliada calculando-se a integral com n pontos


e repetindo
repetindo-se
se o processo com 2n pontos
pontos. Se os resultados coincidirem
dentro de uma certa tolerância, aceita-se o resultado como preciso

Ó O erro na aproximação
p ç é sempre
p proporcional
p p ao tamanho do intervalo
elevado a alguma potência inteira

erro ≈ Δx m = h m m: ordem da aproximação

FÓRMULA DE NEWTON-COTES

Ó Divide-se
Di ide se o domínio em n intervalos
inter alos com n+1
+1 pontos
b−a
h= ; x j = a + ( j − 1)h, para j = 1,2,K, n + 1
n

Ó Define-se polinômio de interpolação de grau n pelos pontos (xj, f(xj))

n +1
P ( x) = ∑ f ( x ) L ( x)
k =1
k k

P li ô i interpolador
Polinômio i t l d ded Lagrange
L

Ó A integral da função é aproximada pela integral do polinômio interpolador


b b
⎧ n +1
b

I= ∫
a
∫ ∫∑
f ( x) dx ≅ P ( x) dx = ⎨ f ( xk ) Lk ( x)⎬ dx =
a a ⎩ k =1 ⎭
n +1 b n +1
= ∑ f ( x )∫ L ( x) dx = ∑ f ( x )w
k =1
k k
k =1
k k
a
EXEMPLOS DA FÓRMULA DE NEWTON-COTES
Ó n = 1 e n+1 = 2 y
2
P ( x) = ∑ f ( x ) L ( x)
k =1
k k
P(x)
( x − x2 ) ( x − x1 )
onde L1 ( x) = e L2 ( x) =
( x1 − x2 ) ( x2 − x1 )

1 L1 ( x) L2 ( x) a b x

a b a b

b b
( x − x2 ) x −x b−a

w1 = L1 ( x) dx = ∫ (x 1 − x2 )
dx = 2 1 =
2 2
b
[ f (a) + f (b)] (b − a)
a
b
a
b
( x − x1 ) x −x b−a
I= ∫ f ( x) dx =
2

w2 = L2 ( x) dx =
a

a
( x2 − x1 )
dx = 2 1 =
2 2
a

Regra do Trapézio para 1 intervalo

Ó De uma forma geral o método de Newton-Cotes pode ser escrito como:


b b n+
+11 b
I= ∫ f ( x) dx ≅ ∫ P( x) dx = ∑ f ( x )∫ L ( x) dx =
a a k =1
k
a
k

n +1
(b − a ) ∑C
k =1
n
k f ( xk )
b
1
coeficientes de Newton - Cotes Ckn = ∫
(b − a ) a
Lk ( x) dx

Tabela de coeficientes de Newton-Cotes


n C1n C2n C3n C4n C5n
1 1/2 1/2
2 1/6 4/6 1/6
3 1/8 3/8 3/8 1/8
4 7/90 32/90 12/90 32/90 7/90
Ó n = 2 e n+1 = 3 y
b
⎡1 4 a+b 1 ⎤ P(x)
I= ∫
a
f ( x) dx = ⎢ f (a ) + f (
⎣6 6 2
) + f (b)⎥ (b − a )
6 ⎦

Regra de Simpson para 1 intervalo a x


b

COMENTÁRIOS

Ó A fórmula de Newton-Cotes é raramente aplicada em todo intervalo.

Ó O iintervalo
t l é subdividido
bdi idid em subintervalos
bi t l iguais
i i ou nãoã e a fórmula
fó l é
aplicada em cada subintervalo

Ó Divide-se o intervalo (a,b) em n subintervalos y


de largura Δx e a fórmula é aplicada em
cada intervalo

Exemplo: n = 1 Δx

⎧ ⎤⎫
b
⎡1 1
∫ f ( x) dx = ⎨⎩Δx ⎣⎢ 2 f (a) + 2 f (a + Δx)⎥⎦ ⎬⎭ +
I= x2 x
a x1=a
a xn+11=b
b
⎧ ⎡1 1 ⎤⎫
+ ⎨Δx ⎢ f (a + Δx) + f (a + 2Δx)⎥ ⎬ + K
⎩ ⎣2 2 ⎦⎭

n
[ f (a + (i − 1)Δx) + f (a + iΔx)] Δx
I= ∑
i =1 2
Regra do Trapézio
Exemplo: n = 2

O número de intervalos deve ser par.


par
A fórmula é aplicada a pares de intervalos

⎧ ⎤⎫
b
⎡1 4 1
I=
a
∫f ( x) dx = ⎨2Δx ⎢ f (a ) + f (a + Δx) + f (a + 2Δx)⎥ ⎬ +
⎩ ⎣6 6 6 ⎦⎭
⎧ ⎡1 4 1 ⎤⎫
+ ⎨2Δx ⎢ f (a + 2Δx) + f (a + 3Δx) + f (a + 4Δx)⎥ ⎬ + K
⎩ ⎣6 6 6 ⎦⎭

⎧1 ⎫
n/2

∑ ⎨⎩ 6 f (a + 2(i − 1)Δx ) + 6 f (a + (2i − 1)Δx ) + 6 f (a + 2iΔx )⎬⎭2Δx


4 1
I=
i =1

Regra
g de Simpson
p

Integracao1.m F1.m

n Delta X Exata Trapezio Erro%


4 2.5 1.5 3.8 1.53
8 1.25 1.5 2.21 0.47
20 0.5 1.5 1.62 0.08
80 0.125 1.5 1.51 0.008

10
y = 0.28889 * x^(1.923) R= 0.99844

1
Erro %

0.1

Erro ≈ (Δx )
2

0.01

0.001
0 001
0.1 1 10
Tam anho do Intevalo ( Δ x)
INTEGRAÇÃO DE ROMBERG

Ó A divisão do intervalo de integração em subintervalos até atingir a precisão


desejada
j pode
p tornar-se muito cara computacionalmente
p

Ó Método de Romberg: Determinação automática do tamanho do intervalo

Combinação de um quadratura simples com técnicas de extrapolação

Inicia-se com a regra do trapézio para um único intervalo

Melhora-se o resultado com a extrapolação de Richardson

EXTRAPOLAÇÃO DE RICHARDSON

Ó g é uma grandeza que deseja-se avaliar. A aproximação é uma função de um


parâmetro h pequeno. A aproximação será denominada de g(h)

g (h) = g + c1h + c2 h 2 + L

Ó Para aumentar a precisão da aproximação, pode-se utilizar h/2 em vez de h

⎛h⎞ 1 1
g ⎜ ⎟ = g + c1h + c2 h 2 + L
⎝2⎠ 2 4

Ó Combinar g(
g(h)) e g(
g(h/2)) ppara obter uma melhor aproximação
p ç para
p g

⎛h⎞ 3
g1 ( h ) = 2 g ⎜ ⎟ − g ( h ) = g − c 2 h 2 + L
⎝2⎠ 2
Ó Repete-se o procedimento indefinidamente, formando g2, que é mais preciso ainda

1⎡ ⎛h⎞ ⎤
g 2 ( h) = ⎢4 g1 ⎜ ⎟ − g1 ( h)⎥ = g + c3* h 3 + L
3⎣ ⎝2⎠ ⎦
Ó Continuando até o estágio n
⎛h⎞
2 n g n −1 ⎜ ⎟ − g n −1 (h)
g n ( h) = ⎝2⎠
2 −1
n
( )
= g + O h n +1 + L

Exemplo:

O valor de 2π pode ser aproximado como o perímetro de um polígono com n lados


i
inscrito
i em uma circunferência
i f ê i ded raio
i unitário,
i á i para n sendo
d grande.
d

⎛π ⎞ π 3
Pn = 2n sen⎜ ⎟ ≈ 2π − 2 + O (n 4 )
⎝n⎠ 3n

Calcular a aproximação usando a fórmula original e extrapolação de Richardson

A extrapolação de Richardson é calculada tomando h/2 como 1/(2n)

⎛π ⎞ ⎛π ⎞
P20 = 4 sen⎜ ⎟ = 4 P40 = 8sen⎜ ⎟ = 5.65685 L
⎝2⎠ ⎝4⎠

4 P20n − Pn0 16 P22n − Pn2


Pn2 = Pn4 = L
3 15

Tabela de valores calculados


n Pn0 Pn2 Pn4 Pn6 Pn8
1 0
2 4 5.3333
4 5.65685 6.209139 6.267526
8 6.122935 6.278295 6.2829056 6.2831496
16 6 242890
6.242890 6 282875
6.282875 6 2831808
6.2831808 6.2831852
6 2831852 6 2831853
6.2831853
32 6.27309
64 6.28066
128 6.28255
256 6.283028
512 6.283148

Ó A expressão original precisou de n = 512 para calcular 2π com uma


precisão
i de
d 5 casas decimais,
d i i enquanto a extrapolaçãol de
d Richardson
i h d
forneceu um resultado correto até a oitava casa com n = 16.
INTEGRAÇÃO DE ROMBERG - CONT.
1
Ó Calcula-se a regra do trapézio para um intervalo I 0

Ó Repete-se os cálculos para 2, 4, 8, … intervalos: I 02 ; I 04 ; L

Ó Valores mais precisos para as integrais são calculados utilizando-se a


extrapolação de Richardson

4 I 0n − I 0n / 2
I1n =
3

Ó Resultado apresenta mesmo erro que a Regra de Simpson com n intervalos


(erro de 4a ordem)

Ó Pode-se reaplicar a extrapolação de Richardson,


obtendo uma expressão de 6a ordem

16 I1n − I1n / 2
I 2n =
15

Exemplo: 1

∫ e dx = 1.718281
x
Calcular a integral
0

n I0 n I1 n I2 n I3 n
1 1 85140914
1.85140914
2 1.753931093 1.718861153
4 1.727221905 1.718318824 1.718828269
8 1.720518591 1.718284153 1.718281842 1.718281829

QUADRATURA GAUSSIANA

Ó Máxima precisão para um dado número de funções

Ó Intervalo não uniforme

b n

∫ f ( x) dx ≅ ∑ w f ( x )
a i =1
i i

Pontos de Gauss
Pesos de Gauss
Ó Os valores das coordenadas dos pontos de Gauss e os correpondentes
ppesos são apresentados
p em tabelas ppadronizadas ggeralmente
para limites de integração de -1 a 1.

Ó Para utilizar estas tabelas, é necessário fazer uma mudança de variável

b 1 n

∫ ∫
f ( x) dx = g (ξ ) dξ ≅ ∑ w g (ξ )
i =1
i i
a −1

n=2 n=4
ξι wi ξι wi
1 -0.57735 1.00 1 -0.86113 0.34785
2 +0.57735 1.00 2 -0.33998 0.65214
3 +0.33998 0.65214
4 +0.86113
+0 86113 0.34785
0 34785
n=3
ξι wi
1 -0.77459 0.55555
2 0 00
0.00 0 88888
0.88888
3 +0.77459 0.55555

Ó Para integrais em duas, três ou mais variáveis:

b d +1 +1

∫ ∫ f ( x, y) dxdy = ∫ ∫ g (ξ ,η ) dξ dη
a c −1 −1
n n
≅ ∑∑ wi w j g (ξ i ,η j )
i =1 j =1
Laboratório Integração Numérica.

Calcule a integral abaixo pelo Método do Trapézio e pelo Método de Simpson.


1
∫ exp(2
−1 / 2
× sen( x))dx
2π 0

Determine no número de intervalos (ou pontos) necessários para obter uma resposta com precisão de
três casas decimais para cada método.
2/17/11 12:09 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab...\integracao.m 1 of 2

%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
%
% Departamento de Engenharia Mecanica
% PUC-Rio
%
% Prof. Marcio Carvalho
%===========================================================================

% PROGRAMA PARA O CALCULO DE INTEGRAL

% Agosto 2002

%===========================================================================

% Comandos de inicializacao: Limpeza da memoria do ambiente MatLab

clc
clear all

% Mostrar na tela titulo do programa

disp(' PROGRAMA PARA A INTEGRAÇÃO DE FUNÇÕES ' )


disp(' ');
disp(' ');
disp(' ');
disp(' funcao deve ser definida no arquivo f1(x): ' )
disp(' ');

% ENTRADA DE DADOS

disp(' ENTRADA DE DADOS ' )


disp(' ');

a=input('Entre com o limite inferior : ');


disp( ' ');

b=input('Entre com o limite superior : ');


disp( ' ');

n=input('Entre com o número de intervalos (deve ser par para o Met. Simpson): ');

% ESCOLHA DO METODO DE INTEGRACAO

disp (' METODO DE SOLUÇÃO ');


disp (' ------ -- ------- ');
disp( ' ');
disp( ' 1. Método do Trapezio');
disp( ' ');
disp( ' ');
disp( ' 2. Método de Simpson');
disp( ' ');
2/17/11 12:09 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab...\integracao.m 2 of 2

disp( ' ');


disp( ' 0. Para terminar o programa');
disp( ' ');
disp( ' ');
Op=input('Escolher ( 0 ---> 2 ) : ');

% LOOP PARA CHAMAR AS SUB ROTINAS

switch Op

case 1
trapezio;
case 2
simpson;
otherwise
disp(' ');
disp('TERMINO DO PROGRAMA');
end
2/17/11 12:10 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab3-...\trapezio.m 1 of 1

%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
%
% Departamento de Engenharia Mecanica
% PUC-Rio
%
% Prof. Marcio Carvalho
%===========================================================================

% PROGRAMA PARA O CALCULO DA INTEGRAL PELO METODO DO TRAPÉZIO

% Agosto 2002

%===========================================================================

% SOLUÇÃO APROXIMADA - Metodo do Trapezio

DX=(b-a)/n; % Tamanho do subintervalo

I=0; % Inicializacao da variavel que armazena o valor da integral

% Loop nos subintervalos - calculo do somatorio

for i=1:n

xl = a + (i-1)*DX;
xr = a + i*DX;

I=I+(f1(xl)+f1(xr))/2*DX;

end

% resultado da integral aproximada calculada pelo metodo do trapezio

disp (' ');


disp (' RESULTADO PELO METODO DO TRAPEZIO ' );
disp (' ');
disp(I);
2/17/11 12:10 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab3-i...\simpson.m 1 of 1

%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
%
% Departamento de Engenharia Mecanica
% PUC-Rio
%
% Prof. Marcio Carvalho
%===========================================================================

% PROGRAMA PARA O CALCULO DA INTEGRAL PELO METODO DO TRAPÉZIO

% Agosto 2002

%===========================================================================

% SOLUÇÃO APROXIMADA - Metodo de Simpson

DX=(b-a)/n; % Tamanho do subintervalo. Considerando cada intervalo


com 3 pontos.

I=0; % Inicializacao da variavel que ira armazenar o valor da


integral

% Loop nos subintervalos - calculo do somatorio

for i=1:2:n-1

xl = a + (i-1)*DX;
xm = a + i*DX;
xr = a + (i+1)*DX;

I=I+(1/6*f1(xl)+4/6*f1(xm)+1/6*f1(xr))*2*DX;

end

% Imprime na tela o resultado da integral aproximada calculada pelo metodo do


trapezio

disp (' ');


disp (' RESULTADO PELO METODO DE SIMPSON ' );
disp (' ');
disp(I);
2/17/11 12:10 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab3-integr...\f1.m 1 of 1

function y=f1(x)
y=1/(2*pi)*exp(2^(-0.5)*sin(x));
CÁLCULO DE RAIZ DE EQUAÇÃO
Ó Necessidade de determinar a raiz de uma equação
em diversos problemas de engenharia, isto é, determinar x, tal que:

f ( x) = 0

Ó Algumas equações mais simples possuem solução analítica, como

2 x = −20 ⇒ x = −10
x 2 − 5x + 6 = 0 ⇒ x=2 e x=3

Ó Na maioria dos casos (equação não-linear), as raizes da equação


não p
podem ser determinadas analiticamente

Ó Deve-se utilizar procedimentos iterativos para determinar a(s) raiz(es)

MÉTODO DE PICARD

x** é raiz
i da
d equação
ã f(x)
f( ) = 0

f ( x* ) = 0 ⇒ x* − g ( x* ) = 0 ⇒ x* = g ( x* )
14243
f ( x* )

PROCEDIMENTO ITERATIVO

x
Chute inicial : x( 0)
i =1 g (x)
x(i ) = g ( x(i −1) ) g ( x(1) )
Enquanto x(i ) − x(i −1) > ε , repetir g ( x( 0) )
i = i +1
x(i ) = g ( x(i −1) ) RAIZ
x*
Raiz : x(i ) x( 0 ) x(1) x( 2) x
=
g ( x( 0) )
−x
EXEMPLO 1: RESOLVER x − e = 0
n xn g(xn)
0 1 0.36788
1 0.36788 0.69220
x = e−x ⇒ g ( x) = e − x 2
3
0.69220
0.50047
0.50047
0.60624
4 0.60624 0.54540

x( 0 ) = 1
5 0.54540 0.57961
6 0.57961 0.56012
7 0.56012 0.57114

x(1) = g ( x( 0) ) = e −1 = 0.36788
8 0.57114 0.56488
9 0.56488 0.56843
10 0.56843 0.56641

x( 2) = g ( x(1) ) = e −0.36788 = 0.69220


11 0.56641 0.56756
. . .
20 0.56714 0.56714
M

EXEMPLO 2: RESOLVER x −1 = 0
n x n g (x n)
x = 2x −1 ⇒ g ( x) = 2 x − 1 0
1
0
0
.9
.8
0 .8
0 .6
2 0 .6 0 .2
3 0 .2 -0 .6

x( 0) = 0.9
Processo iterativo diverge
x(1) = g ( x( 0) ) = 2 × 0.9 − 1 = 0.8
x( 2) = g ( x(1) ) = 2 × 0.8 − 1 = 0.6 PORQUE ???
M

g (x) x x

g ( x( 0) )
g (x)
g ( x( 0) ) g ( x(1) )
g ( x(1) )
RAIZ RAIZ
x* x*
x( 2) x(1) x( 0) x x( 0 ) x( 2 ) x(1) x
= =
g ( x( 0) ) g ( x( 0) )
DIVERGE CO
CONVERVE OSCILANDO
OSC A O

g ′( x) > 1 ⇒ DIVERGE
0 < g ′( x) < 1 ⇒ CONVERGE MONOTONICAMENTE
− 1 < g ′( x) < 0 ⇒ CONVERGE OSCILANDO
MÉTODO DE BISSEÇÃO

Ó SE f(x) É UMA FUNÇÃO CONTÍNUA E f(a).f(b) < 0


A RAIZ DE f(x) PERTENCE AO INTERVALO (a,b)

Ó MÉTODO DE BISSEÇÃO CRIA UMA SEQUENCIA DE INTERVALOS


CADE VEZ MENOR QUE CONTENHA A RAIZ

Escolher a0 e b0 tal que f (a0 ) ⋅ f (b0 ) < 0


i =1
mi = 1 2 (a0 + b0 )
f (x)
While f (mi ) > ε , do
if f (mi ) ⋅ f (bi −1 ) < 0 then
th
ai = mi
m1 x* m2 bi = bi −1
a0 b0 x end
if f (ai −1 ) ⋅ f (mi ) < 0 then
(a1 , b1 ) ai = ai −1
bi = mi
end
(a0 , b0 ) i = i +1
mi = 1 2 (ai −1 + bi −1 )
Raiz : mi

2
⎛ x⎞
EXEMPLO 3: RESOLVER ⎜ ⎟ − sin x = 0
⎝2⎠

i ai-1 f(ai-1) bi-1 f(bi-1) mi f(mi)


1 1.5 <0 2 >0 1.75 <0
2 1.75 2 1.875 <00
3 1.875 2 1.9375 >0
4 1.875 1.9375 1.90625 <0
5 1.90625 1.9375 1.9219

Ó CONVERGÊNCIA EXTREMAMENTE LENTA

Ó CONVERGÊNCIA MELHORA USANDO VALORES DE f(x)


NO CÁLCULO DE mi

bi −1 f (ai −1 ) + ai −1 f (bi −1 )
mi =
f (ai −1 ) + f (bi −1 )
MÉTODO DE NEWTON-RAPHSON (DE NEWTON)
f (x) f ( xi )
t θ=
tan = f ′( xi ) ⇒
xi − xi +1
f ( xi )
xi +1 = xi −
f ′( xi )

x* x
x( 2) x(1) x( 0)

Chute inicial : x( 0)
PROCEDIMENTO ITERATIVO i=0
While f ( x(i ) ) > ε , do
f ( x( i ) )
Δx = −
f ′( x(i ) )
x(i +1) = x(i ) + Δx
i = i +1
Raiz : x(i +1)

2
⎛ x⎞
EXEMPLO 4: RESOLVER ⎜ ⎟ − sin x = 0
⎝2⎠

i xi f(xi) f’(bi) Δx
0 1.5 0.434995 -0.67926
0.67926 0.64039
1 2.14039 -0.30319 -1.60948 -0.18838
2 1.95201 -0.02437 -1.34805 -0.01808
3 1.93393 -0.00023 -1.32217 -0.00018
4 1 93375
1.93375 0 000005
0.000005 -1.32191
1 32191

Ó CONVERGÊNCIA RÁPIDA

Ó O TAMANHO DO PASSO DIMINUI A CADA ITERAÇÃO


DE UM FATOR
A O DE 10
−x
EXEMPLO 5: RESOLVER x − e = 0

i xi f(xi) f’(bi) Δx
0 0.0
1
2
3
4

PROPRIEDADE DE CONVERGÊNCIA

Vamos supor que α é uma raiz simples de f(x): f (α ) = 0 e f ′(α ) ≠ 0

Obter uma estimativa de erro para a aproximação xn do Método de Newton


ε n = xn − α
Expandindo f(x) em série de Taylor em x=xn com um passo α- xn

f (xn + (α − xn ) ) = f (α ) = 0 ⇒
1
0 = f ( xn ) + (α − xn ) f ′( xn ) + (α − xn ) 2 f ′′(ξ ); ξ ∈ ( xn ,α )
2
1
(α − xn ) 2 f ′′(ξ )
f ( xn )
⇒ + (α − xn ) = − 2
f ′( xn ) f ′( xn )
1
⎡ (α − xn ) 2 f ′′(ξ )
f ( xn ) ⎤ 2
⇒ α − ⎢ xn − ⎥ = −ε n +1 = −
⎣14 f ′( xn ) ⎦ f ′( xn )
4244 3
xn+1

1 f ′′(ξ ) ε n +1 11 f2 ′′(fα′′()α )
ε n +1 = ε n2 ⇒ lim = εn
2 f ′( xn ) xn →α ε 2
n 22 f ′(fα′()α )
Ó Quando perto da solução, o erro cai quadraticamente:

ε 3 ≈ 10 −2 ⇒ ε 4 ≈ 10 −4 ⇒ ε 5 ≈ 10 −8 K

PROBLEMAS COM O MÉTODO DE NEWTON

Ó O chute inicial deve estar Ó O processo iterativo passa por um


suficientemente ppróximo da solução
ç ponto de máximo ou mínimo local

f ((x)
f (x)

x* x x* x
x(0) x(1) x(1) x(0)

Ó O processo iterativo pode entrar em um ciclo que não converge

f (x)

x(1) x* x
x(0)

Ó Os problemas com o Método de Newton podem ser resolvidos com


um chute inicial perto da solução

Ó Combinar um método com convergência global boa (mas lenta) com


o método de Newton (convergência global ruim
ruim, mas extremamente
rápido quando perto da solução)
MÉTODO DA SECANTE

Ó O cálculo da derivada ff’(x)


(x) pode ser
muito complicado ou caro computacionalmente

Ó Aproximar a derivada por:


f ( xi ) − f ( xi −1 )
f ′( x) ≈
xi − xi −1

PROCEDIMENTO ITERATIVO Chute inicial : x( 0) e x(1)


i =1
While f ( x(i ) ) > ε , do
x(i ) − x(i −1)
Δx = − f ( x(i ) )
f ( x(i ) ) − f ( x(i −1) )
x(i +1) = x(i ) + Δx
i = i +1
R i : x(i +1)
Raiz

INTERPRETAÇÃO GEOMÉTRICA

Ó Necessita de 2 chutes iniciais

Ó Convergência não é quadrática


*
x x
x( 2 ) x(1) x( 0 )
f (x )
2
⎛ x⎞
EXEMPLO 6: RESOLVER ⎜ ⎟ − sin x = 0
⎝2⎠

i xi f(xi) Δx
0 1.0 -0.59147
1 2.0 0.09070
2
3
4
5
Laboratório: Cálculo de raiz de equação não linear

Escreva uma rotina MatLab para cálculo de raiz.

O programa deve ser dividido em um programa principal e subrotinas. O programa principal deve fazer
as seguintes tarefas:

• Leitura do chute inicial


• Escolha do método de solução
• Chamar a subrotina correspondente ao método escolhido
• Imprimir os resultados

Neste laboratório, só será desenvolvida a rotina para os métodos de bisseção e Newton. Outros métodos
podem ser implementados posteriormente através de novas subrotinas.

Utilize o programa desenvolvido para determinar a raiz das equações abaixo.

a) f ( x) = x 2 − 1

b) f ( x) = 1 − x − e −2 x
2/17/11 12:15 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-raizeq\Raiz.m 1 of 2

clc % Apaga tudo o escrito na janela de conandos


clear all % Apaga as variáveis usadas anteriornente

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PROGRAMA PARA O CÁLCULO DA RAIZ DE UMA EQUAÇÃO NÃO LINEAR

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Dados de entrada
disp( ' PROGRAMA PARA O CÁLCULO DA RAIZ DE UMA EQUAÇÃO NÃO LINEAR ' );
disp( ' -------- ---- - ------- -- ---- -- --- ------- --- ------ ');
disp( ' ');
disp( ' Definir a funcao na rotina f1.m');

disp( ' ENTRADA DE DADOS' );


disp( ' ------- -- -----');
disp( ' ');
disp( ' ');

% JANELA QUE MOSTRA O MENU PARA O TIPO DE SOLUÇÃO

disp(' METODO DE SOLUÇÃO ');


disp(' ------ -- ------- ');

disp( ' ');


disp( ' 1. Método da Bisseção');
disp( ' ');
disp( ' ');
disp( ' 2. Método de Newton');
disp( ' ');
disp( ' ');
disp( ' 0. Para terminar o programa');
disp( ' ');
disp( ' ');
Op=input('Escolher ( 0 ---> 2 ) : '); % entrada de uma opção

% CHAMAR A SUBROTINA CORRESPONDENTE AO METODO ESCOLHIDO

switch Op

case 1
Bissecao;
case 2
Newton;
otherwise
disp( ' ');
disp( ' ');
disp(' TERMINO DO PROGRAMA ');
2/17/11 12:15 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-raizeq\Raiz.m 2 of 2

end
2/17/11 12:15 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-...\Bissecao.m 1 of 2

% SOLUÇÃO PELO MÉTODO DA BISSEÇÃO

disp( ' BISSECAO ');


disp( ' ');

prod = 1
maxiter = 20;

while prod > 0

Xl=input('Entre valor do limite esquerdo Xl : ');


disp( ' ');
fxl = f1(Xl)

Xr=input('Entre valor do limite direito Xr : ');


disp( ' ');
fxr = f1(Xr)
prod = fxl * fxr;

if (prod > 0)
disp(' Entre com novos valores iniciais tal que f(xl)*f(xr) < 0 ')
end

end

Xm = (Xl+Xr)/2;

fxm = f1(Xm);
erro = abs(fxm);

k=1; % Contador de interações

while (erro > 1e-4) & (k < maxiter)

if (fxm * fxr < 0)


Xl=Xm;
end

if (fxm * fxl < 0)


Xr=Xm;
end

Xm = (Xl+Xr)/2;
fxm = f1(Xm);

erro = abs(fxm);

disp('iteracao');
disp(k);
disp('erro');
disp(erro);
2/17/11 12:15 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-...\Bissecao.m 2 of 2

k=k+1;

end

if (k == maxiter)

disp(' Nao convergiu ');

else

disp( ' ');


disp( ' SOLUÇÃO PELO METODO DA BISSEÇÃO');
disp( ' ------- ---- ------ -- -------- ');
disp( ' ');
disp( ' A raiz "X" é :');
disp( ' ');
disp(Xm);
disp( ' ');
disp( ' ');
disp( ' Número de interações :');
disp( ' ');
disp(k);

end
2/17/11 12:15 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-ra...\Newton.m 1 of 2

% SOLUÇÃO PELO MÉTODO DE NEWTON

disp( ' NEWTON ');


disp( ' ');

X0 = input('Entre o chute inicial X0: ');

erro=1;
maxiter = 20;

k=1; % Contador de interações

while (erro > 1e-4) & (k < maxiter)

num = f1(X0);
den = derivf1(X0);
Delta = - num/den;

X = X0 + Delta; % Calcula o novo ponto

erro =abs(X-X0); % Calcula o erro

disp('iteracao');
disp(k);
disp('erro');
disp(erro);

X0=X;

k=k+1;
end

if (k == maxiter)

disp(' Nao convergiu ');

else

disp( ' ');


disp( ' SOLUÇÃO PELO METODO DE NEWTON');
disp( ' ------- ---- ------ -- ------ ');
disp( ' ');
disp( ' A raiz "X" é :');
disp( ' ');
disp(X0);
disp( ' ');
disp( ' ');
disp( ' Número de interações :');
disp( ' ');
disp(k);

end
2/17/11 12:15 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-ra...\Newton.m 2 of 2
2/17/11 12:16 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-raizeq\f1.m 1 of 1

function y=f1(x)
y=x^2-1;
%y=1-x-exp(-2*x);
2/17/11 12:16 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-r...\derivf1.m 1 of 1

function y=derivf1(x)
%y = 2*x;
y = -1+2*exp(-2*x);
SOLUÇÃO DE SISTEMA DE EQUAÇÕES

Ó A solução de um sistema de equações é necessária na grande maioria


dos problemas de engenharia

Problemas de interpolação e ajuste de curvas

Solução de equações diferenciais - simulação de problemas de engenharia

Ó Maior parte do tempo de uma simulação por elementos finitos,


diferenças finitas ou outro método numérico é gasto na
resolução do sistema de equações obtido com a discretização

Ó Necessidade de métodos robustos e rápidos

SISTEMA DE n EQUAÇÕES E n INCÓNITAS

⎧ a11 x1 + a12 x2 + K + a1n xn = b1


⎪a21 x1 + a22 x2 + K + a2 n xn = b2
⎨ M
⎪a x + a x + K + a x = b
⎩ n1 1 n2 2 nn n n

Ó Se os coeficientes aij são constantes, o sistema é dito linear

Ó O sistema acima pode ser representado na forma de matriz:

⎡ a11 a12 L a1n −1 a1n ⎤ ⎡ x1 ⎤ ⎡ b1 ⎤


⎢a21 a22 L a2 n −1 a2 n ⎥ ⎢ x2 ⎥ ⎢b2 ⎥
⎢a a3n ⎥ ⎢ x3 ⎥ = ⎢b3 ⎥
⎢ 31
a32 L a3n −1
⎥⎢ ⎥ ⎢ ⎥ Ax = b
⎢ M M M M ⎥⎢ M ⎥ ⎢ M ⎥
⎢⎣ an1 an 2 L ann − a ann ⎥⎦ ⎣ xn ⎦ ⎣bn ⎦
MÉTODOS DE SOLUÇÃO

Ó MÉTODOS DIRETOS

A solução exata ((a menos de erros de truncamento do computador)


p )
é determinada após um número finito de operações

Requer mais memória de armazenamento


Mais robusto
Mais rápido

Ó MÉTODOS ITERATIVOS

Fornece uma sequência de soluções aproximadas que convergem


quando o número de passos tende a infinito

Menor necessidade de memória de armazenamento


Problemas de convergência
g

MÉTODOS DIRETOS
SISTEMAS TRIANGULARES

⎡u11 u12 L u1n −1 u1n ⎤ ⎡ x1 ⎤ ⎡ b1 ⎤


⎢0 u 22 L u 2 n −1 u 2 n ⎥ ⎢ x2 ⎥ ⎢b2 ⎥
⎢0 0 L u3n −1 u3n ⎥ ⎢ x3 ⎥ = ⎢b3 ⎥
⎢ ⎥⎢ ⎥ ⎢ ⎥
⎢ M M M M ⎥⎢ M ⎥ ⎢ M ⎥
⎣⎢ 0 0 L 0 u nn ⎥⎦ ⎣ xn ⎦ ⎣bn ⎦

Se uii ≠ 0, i = 1,2,K, n as incógnitas podem ser facilmente calculadas


bn
linha n : xn = ;
u nn
bn −1 − u n −1,n xn
linha n - 1 : u n −1,n −1 xn −1 + u n −1,n xn = bn −1 → xn −1 = ;
u n −1,n −1
M
n
bi − ∑u
k =i +1
i , k xk RETROSUBSTITUIÇÃO
linha i : xi =
uii
Se a matriz for triangular inferior:

⎡l11 0 L 0 0 ⎤ ⎡ x1 ⎤ ⎡ b1 ⎤
⎢l21 l22 L 0 0 ⎥ ⎢ x2 ⎥ ⎢b2 ⎥
⎢l l32 L 0 0 ⎥ ⎢ x3 ⎥ = ⎢b3 ⎥
⎢ 31 ⎥⎢ ⎥ ⎢ ⎥
⎢M M M M ⎥⎢ M ⎥ ⎢ M ⎥
⎢⎣ln1 ln 2 L lnn − a lnn ⎦⎥ ⎣ xn ⎦ ⎣bn ⎦

A solução
ç é calculada da seguinte
g forma:
b1
linha 1 : x1 = ;
l11
b2 − l2,1 x1
linha 2 : l2,1 x1 + l2, 2 x2 = b2 → x2 = ;
l22
M
i −1
bi − ∑ li ,k xk SUBSTITUIÇÃO A FRENTE
linha i : xi = k =i
lii n


1 1
NÚMERO DE OPERAÇÕES: n + (i − 1) = n + n( n − 1) ≈ n 2
i =1 2 2

ELIMINAÇÃO GAUSSIANA

Ó Eliminar as variáveis de uma maneira sistemática até obter um


sistema triangular, de fácil solução
⎧ a11 x1 + a12 x2 + K + a1n xn = b1
⎪a21 x1 + a22 x2 + K + a2 n xn = b2
⎨ M
Eliminar x1 das (n-1) úlimas equações
⎪a x + a x + K + a x = b
⎩ n1 1 n2 2 nn n n S
Se a11 ≠ 0

⎧a11 x1 + a12 x2 + K + a1n xn = b1


⎪⎛ a ⎞ ⎛ a ⎞ ⎛ a ⎞ ⎛ a ⎞
⎪⎜ a21 − 21 a11 ⎟ x1 + ⎜ a22 − 21 a12 ⎟ x2 + K + ⎜ a2 n − 21 a1n ⎟ xn = ⎜ b2 − 21 b1 ⎟
⎪⎜⎝ a11 ⎟


⎝ a11 ⎟


⎝ a11 ⎟


⎝ a11 ⎟⎠
⎪144244 3
⎨ 0
⎪M

⎪0 x1 + ⎛⎜ an 2 − an1 a12 ⎞⎟ x2 + K + ⎛⎜ ann − an1 a1n ⎞⎟ xn = ⎛⎜ bn − an1 b1 ⎞⎟
⎪⎩ ⎜ ⎟ ⎜ ⎟ ⎜ a11 ⎟⎠
⎝ a11 ⎠ ⎝ a11 ⎠ ⎝
Após o primeiro passo, o sistema fica sendo:

⎧a11 x1 + a12 x2 + K + a1n xn = b1 Onde mi1 =


aii11
; i = 2,3,K, n
⎪⎪ ( 2)
a22 x2 + K + a2( 2n) xn = b2( 2 )
a11
⎨M aij( 2 ) = aij − mi1a1 j ; i = 2,3,K, n
⎪ bi( 2 ) = bi − mi1b1 ; i = 2,3,K, n
⎪⎩ an( 22) x2 + K + ann
( 2)
xn = bn( 2 )

Eliminar x2 ddass ((n-2)) úúltimass equ


equações
ções

Se a22 ≠ 0
( 2)

⎧a11 x1 + a12 x2 + a13 x3 + K + a1n xn = b1 ai(22)


⎪ ( 2)
a22 x2 + a23
( 2)
x3 + K + a2( 2n) xn = b2( 2) mi 2 = ( 2)
; i = 3,4,K, n
⎪⎪
a22

( 3)
a33 x3 + K + a3(3n) xn = b3(3) aij(j3) = aij(j2) − mi 2 a2( 2j) ; i = 3,4,K, n
⎪M bi(3) = bi( 2) − mi 2b2( 2) ; i = 3,4,K, n

⎪⎩ an(33) x3 + K + ann
( 3)
xn = bn(3)

E assim por diante, até obter um sistema da forma

⎧a11(1)
x1 + a12
(1)
x2 + a13
(1)
x3 + K + a1(1n) xn = b1(1)

⎪⎪
( 2)
a22 x2 + a23( 2)
x3 + K + a2( 2n) xn = b2( 2 )
⎨ a33( 3)
x3 + K + a3(3n) xn = b3(3)
⎪M

⎪⎩ ann(n)
xn = bn( n )

O SISTEMA TRIANGULAR PODE SER FACILMENTE RESOLVIDO


ATRAVÉS DE UMA RETROSUBSTITUIÇÃO

Ó Os
O elementos
l (1)
t a11 ( 2)
, a22 ,K, an( n−−1,1n)−1 são
ã denominados
d i d de d Pivots
Pi t

Ó O lado direito do sistema de equações é modificado da mesma forma


que os coeficientes das equações

Ó Melhor tratar o sistema na forma matricial, com o lado direito do sistema


sendo a coluna nn+11 da matriz, conforme mostrado a seguir
⎡ a11 a12 L a1n −1 a1n b1 ⎤
ai(,kn)+1 = bi( k ) , i = 1,2,K, n ⎢a21 a22 L a2 n −1 a2 n b2 ⎥
⎢a a32 L a3n −1 a3n b3 ⎥
⎢ 31 ⎥
⎢ M M M M M⎥
⎢⎣ an1 an 2 L ann − a ann bn ⎥⎦

ALGORÍTMO

ELIMINAÇÃO
Ç RETROSUBSTITUIÇÃO
Ç
For k = 1, n − 1 For i = n,1,−1
For i = k + 1, n sum = 0
a (k ) For k = i + 1, n
mik = ik( k )
akk sum = sum + aik(i ) * xk
For j = k + 1, n + 1 end
aij( k +1) = aij( k ) − mik akj( k ) ai(,in)+1 − sum
xi =
end aii(i )
end end
end

NÚMERO DE OPERAÇÕES:

ELIMINAÇÃO
à RETROSUBSTITUIÇÃO
n −1 n


k =1
( n − k )(n − k + 1) ≈ 13 n 3 ∑ (i − 1) =
i =1
1
2
n( n − 1) ≈ 12 n 2

Ó O maior custo computacional ocorre no processo de eliminação

Ó Supor que o tempo de cada operação seja de 1 microsegundo t = 10 −6 s

O tempo em segundos de cada parte do algoritmo é mostrado abaixo

n Eliminação Retrosubstituição
10 0.0050 s 0.0008 s
100 5s 0.075 s
1000 5000 s 7.5 s
PIVOTAMENTO

RESOLVER O SISTEMA POR ELMINAÇÃO GAUSSIANA


⎧ x1 + x2 + x3 = 1 ⎡1 1 1 1 ⎤

⎨ x1 + x2 + 2 x3 = 2 ⇒ ⎢1 1 2 2⎥
⎪⎩ x1 + 2 x2 + 2 x3 = 1 ⎢⎣1 2 2 1 ⎥⎦

Sistema não singular,


singular e a solução é: x1 = − x2 = x3 = 1
Após o primeiro passo na eliminação, a matriz fica sendo:

⎡1 1 1 1⎤
⎢0 0 1 1⎥ → a22 = 0
( 2)

⎢⎣0 1 1 0⎥⎦

A eliminação não pode continuar pelo procedimento normal.

Uma solução seria trocar a posição das linhas 2 e 3, o que já fornece a matriz triangular

OUTRO EXEMPLO: RESOLVER O SISTEMA POR ELMINAÇÃO GAUSSIANA

⎧ x1 + x2 + x3 = 1 ⎡1 1 1 1⎤

⎨ 1x + 1. 0001x 2 + 2 x3 = 2 ⇒ ⎢1 1.0001 2 2⎥
⎩⎪ x1 + 2 x2 + 2 x3 = 1 ⎢⎣1 2 2 1 ⎦⎥

Sistema não singular, e a solução é: x1 = 1 e − x2 = x3 = 1.0001


O sistema
i triangular
i l obtido
b id após
ó a eliminação
li i ã sem troca de
d linhas
li h é:
é

⎡1 1 1 1 ⎤
⎢0 0.0001 1 1 ⎥
⎣⎢0 0 9999 10000⎥⎦
O processo de retrosubstituição usando uma precisão de 3 casas decimais fornece:

x1 = 0, x2 = 0, x3 = 1.000 Resultado incorreto

Se as linhas 2 e 3 fossem trocadas durante o processo de eliminação, a solução


também usando uma precisão de 3 casas decimais seria
x1 = 1.000, x2 = −1.000, x3 = 1.000 Resultado correto usando uma
precisão de 3 casas decimais
Ó Para evitar falha catastrófica (divisão por zero) ou resultados errados
é necessário fazer uma escolha criteriosa dos PIVOTS usados na eliminação

PIVOTAMENTO PARCIAL
PIVOTAMENTO COMPLETO
PIVOTAMENTO PARCIAL k
No passo k do processo de eliminação
• Escolher r como o menor inteiro tal q
que k
ark = max aik , k ≤ i ≤ n
(k ) (k )
r
• Trocar linhas k e r

PIVOTAMENTO COMPLETO k s
No passo k do processo de eliminação

• Escolher r e s como os menores inteiros tal que k


ars( k ) = max aij( k ) , k ≤ i, j ≤ n r
• Trocar linhas k e r , e colunas k e s

Ó A Eliminação Gaussiana deve ser feita sempre com PIVOTAMENTO


para garantir
p g estabilidade do método

Ó Na grande maioria dos casos, PIVOTAMENTO PARCIAL é suficiente


e deve ser usada no lugar de PIVOTAMENTO COMPLETO

Ó PIVOTAMENTO COMPLETO não é muito usado devido ao grande


tempo computacional gasto no processo de busca do pivot.

Ó PIVOTAMENTO não é necessário em dois casos particulares

MATRIZ DIAGONAL DOMINANTE


n
aii ≥ ∑a
j =1
ij , i = 1,2,K, n.
j ≠i

MATRIZ SIMÉTRICA E POSITIVA-DEFINIDA

A T = A ( aij = a ji ) e xT Ax > 0, ∀ x ≠ 0
%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA for k=i+1:n
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
% if (abs(A(k,i))>pivot)
% Departamento de Engenharia Mecânica pivot=abs(A(k,i));
% PUC-Rio irow=k;
% end
% P
Prof.
f : M
Marcio
i CCarvalho
lh
% Monitor: Oscar Coronado end
%===========================================================================
% Checar se a matriz e singular
% PROGRAMA PARA O RESOLUÇÃO DE UM SISTEMA DE EQUAÇÕES POR ELIMINAÇÃO GAUSSIANA
if (pivot < 1e-10)
% SETEMBRO 2001 success=0;
stop;
%=========================================================================== end

% Comandos de inicialização: Limpeza da memoria do ambiente MatLab % Trocar as linhas i e k

clc for j=i:n


clear all aaux=A(irow,j);
A(irow,j)=A(i,j);
% Mostrar na tela titulo do programa A(i,j)=aaux;
disp(' ' ); end
disp(' ' );
disp('
disp( ELIMINAÇÃO GAUSSIANA ' ); ( );
baux = b(irow);
disp(' ---------- --------- ' ); b(irow)=b(i);
b(i)=baux;
% Definição do tamanho do sistema
disp(' ' ); % Proceder com a eliminação dos elementos abaixo da linha i
disp(' ' );
n=input('Entre com o numero de equações : '); for k=i+1:n
disp(' ' ); m=A(k,i)/A(i,i);
disp(' ' ); for j=i:n
ç
% Definiçao da Matriz a ser resolvida A(k,j)=A(k,j)-A(i,j)*m;
end
A=input('Entre a matriz dos coeficientes A(n*n): '); b(k)=b(k)-b(i)*m;
disp(' ' ); end
disp(' ' );
end
% Definição do termo independente (lado direito do sistema)
% retrosubstituição
b=input('Entre o vetor dos valores do lado direito do sistema b(n,1) : ');
disp(' ' ); for i=n:-1:1
disp(' ' );
sum=0;
%-------------------------------------------------------------------------- for j=i+1:n
sum=sum+A(i,j)*x(j,1);
% ELIMINAÇÃO GAUSSIANA end

success=1; x(i,1)=(b(i)-sum)/A(i,i);

for i=1:n end

% Procura um Pivot (Pivotamento Parcial) disp(' A solução do sistema é : ' );

pivot=abs(A(i,i)); disp(' ' );


irow = i; disp(' ' );

DECOMPOSIÇÃO LU
Ó Muitas vezes o mesmo sistema é resolvido com
diferentes termos independente (lado direito do sistema)
Ax1 = b1 ; Ax 2 = b 2 ; L
Ó Pode-se
P d evitar
it o processo repetido
tid de
d eliminação
li i ã gaussiana
i através
t é
de uma decomposição da matriz A

Ó Todo matriz não singular pode ser decomposta como o produto de uma matriz
triangular inferior L e uma matriz triangular superior U
⎛1 0 0 L 0⎞ ⎛ u11 u12 u13 L u1n ⎞
⎜ l21 1 0 L 0⎟ ⎜ 0 u 22 u 23 L u 2 n ⎟⎟
⎜ ⎟ ⎜
A = LU; L = ⎜ l31 l32 1 L 0 ⎟ ; U = ⎜ 0 0 u33 L u3n ⎟
⎜ M ⎟ ⎜ M ⎟
⎜ ln 2 L ln ,n −1 1 ⎠⎟ ⎜ 0 L 0 u nn ⎟⎠
⎝ ln1 ⎝ 0
Ó Uma vez feita a decomposição, a solução do sistema fica reduzida a solução
de dois sistemas triangulares:
Sistema triangular inferior
{ =b ⇒
L Ux Sistema triangular superior
y
Resolver Ly = b e depois Ux = y
EQUIVALÊNCIA ENTRE DECOMPOSIÇÃO LU E ELIMINAÇÃO GAUSSIANA

Ó A eliminação
ç gaussiana
g pode
p ser vista como a determinação
ç
de uma sequência de matrizes A = A , A ( 2 ) , A (3) ,K, A ( n )
(1)

⎛ a11
(1) (1)
a12 L a1(1k) L a1(1n) ⎞
⎜ ( 2)

⎜ a22 L a2( 2k) L a2( 2n) ⎟
⎜ L ⎟
tal que A ( k ) =⎜ (k ) (k ) ⎟
⎜ 0 akk L akn ⎟
⎜ L ⎟
⎜ (k ) (k ) ⎟
L ann
⎝ ank ⎠

• Se i ≤ j (elemento acima da diagonal principal) : aij( n ) = L = aij(i +1) = aij(i ) , i ≤ j

• Se i > j (elemento abaixo da diagonal principal) : aij( n ) = L = aij( j +1) = 0, i > j

aij(jk +1) = aij(jk ) − mik akj(jk ) ; k = 1,2,3,K, r = min(i − 1, j )

aij( k +1) = aij( k ) − mik akj( k ) ; k = 1,2,3,K, r = min(i − 1, j )

Ó Calculando o somatório para k=1, …, r, obtém-se:


r r r


k =1
aij( k +1) = ∑
k =1
aij( k ) − ∑m
k =1
(k )
ik a kj ⇒
r r r


k =1
aij( k +1) − ∑
k =1
aij( k ) = aij( r +1) − aij(1) = aij( r +1) − aij = − ∑m
k =1
(k )
ik a kj ⇒
r
aij = aij( r +1) + ∑m
k =1
(k )
ik a kj ⇒

⎧ (i ) i −1
⎪aij + mik akj ; i ≤ j

(k )

⇒ aij = ⎨ k =1
j

⎪⎩ k =1
ik kj ∑
⎪ 0 + m a (k ) ; i > j

Ó Definindo mii = 1 ; i = 1,2,K, n


p
aij = ∑m
k =1
(k )
ik a kj , p = min(i, j )
Ó Observe que a expressão anterior representa o produto de duas matrizes

A = LU
Lik = mik (mii = 1), i ≥ k e U kj = akj( k ) , k ≤ j.

⎛ u11 u12 u13 L u1n ⎞


⎜ 0 u 22 u 23 L u 2 n ⎟⎟

⎜ 0 0 u33 L u3n ⎟
⎜ M ⎟
⎜ 0 L 0 u nn ⎟⎠
⎝ 0
⎛ 1 0 0 L 0⎞
⎜ m21 1 0 L 0⎟ p = min( i , j ) = 2
⎜m
⎜ 31 m32 1 L 0 ⎟⎟ a32 = m31u12 + m32u 22 = ∑m ik u kj
⎜ M ⎟ k =1
⎜ L mn ,n −1 1 ⎟⎠
⎝ mn1 mn 2

Ó A matriz L corresponde aos coeficientes mik da eliminação gaussiana e a matriz


U corresponde
p a matriz triangular
g superior
p obtida na eliminação
ç gaussiana
g

ESQUEMA COMPACTO PARA DECOMPOSIÇÃO LU E ELIMINAÇÃO GAUSSIANA

Ó No algorítmo para decomposição LU apresentado anteriormente


anteriormente, diversos
resultados parciais devem ser armazenados temporariamente antes
do cálculo final de cada elemento da matriz L e U.

Ó Para matrizes muito grandes, isto pode acarretar erros de truncamento


que comprometem o resultado final do cálculo.

Ó Método de Doolittle: O cálculo dos termos são reagrupados, de forma


que resultados parciais não precisem ser armazenados temporariamente.

Ó Em
E cada
d passo k da
d eliminação,
li i ã os elementos
l são
ã calculados
l l d por:
mkk = 1
k −1
u kj = akj − ∑m
p =1
kp u pj , j = k , k + 1,K, n
k −1
aik − ∑m
p =1
i u pkk
ip

mik = , i = k + 1,K, n
u kk
MÉTODO DE CHOLESKI

Ó Matriz simétrica
simétrica, positiva
positiva-definida
definida

Ó Escolher L e U de forma que U = LT

u kk = mkk e u pk = mkp
1/ 2
⎛ k −1 ⎞

mkk = akk − mkp
⎜ ∑
2 ⎟

⎝ p =1 ⎠
k −1
aik − ∑m
p =1
ip mkp

mik = , i = k + 1,K, n
mkk

MATRIZES DE BANDA

Ó Matrizes onde os elementos diferentes de zero estão localizados em


uma banda centrada na diagonal principal da matriz

Ó As matrizes obtidas em resolução de um problema de valor de contorno


são geralmente de banda, daí a importância do estudo deste tipo de matriz
p
q aij = 0 se j > i + p ou i > j + q
0
Banda da Matriz : w = p + q + 1

Ó A estrutura de banda não é perdida,


perdida se não forem realizadas nenhuma
troca de linhas ou coluna (pivotamento parcial ou completo)

Ó As matrizes L e U serão matrizes de banda. mij = 0 se j > i ou i > j + q


uij = 0 se j > i + p ou i > j
EXEMPLO
⎛a a ⎞ ⎛u u ⎞
⎜a aa ⎟ ⎜m a' a' ⎟
Ó Sem pivotamento ⎜ ⎟ ⎜ ⎟
A estrutura de banda não é perdida ⎜a aaa ⎟ ⇒ 1 passo ⇒ ⎜ m a' a' a' ⎟
⎜ aaaa ⎟ ⎜ a a a a ⎟
⎜ aaa a⎟ ⎜ a a a a⎟
⎜ ⎟ ⎜ a a a ⎟⎠
⎝ aa a⎠ ⎝

Ó Com pivotamento (troca linha 1 e 3) ⎛a aaa ⎞ ⎛u u u u ⎞


⎜a aa ⎟ ⎜m a' a' a' ⎟
A estrutura de banda é perdida ⎜ ⎟ ⎜ ⎟
⎜a a ⎟ ⇒ 1 passo ⇒ ⎜ m a' a' a' ⎟
⎜ aaaa ⎟ ⎜ a a a a ⎟
⎜ a a a a⎟ ⎜ a a a a⎟
⎜ ⎟ ⎜ a a a ⎟⎠
⎝ a a a⎠ ⎝

Ó Os algoritmos devem ser escritos levando em conta a estrutura da matriz

Ó Grande economia de tempo computacional

MATRIZ TRIDIAGONAL ⎛ a1 c1 0 L 0 ⎞
⎜b a c L 0 ⎟⎟
⎜ 2 2 2
Ó Matriz de banda com p = q = 1 ⎜M ⎟
⎜0 bn −1 an −1 cn −1 ⎟
⎜0 0 L an ⎟⎠
⎝ bn

Ó Decomposição LU da matriz triagonal:


⎛ a1 c1 0 L 0 ⎞ ⎛ 1 0 0 L 0 ⎞⎛α1 c1 0 L 0 ⎞
⎜b a c L 0 ⎟⎟ ⎜ β 2 1 0 L 0 ⎟⎜⎜ 0 α 2 c2 L 0 ⎟⎟
⎜ 2 2 2 ⎜ ⎟
⎜M ⎟=⎜ M ⎟⎜ M ⎟
⎜0 bn −1 an −1 cn −1 ⎟ ⎜ 0 β n −1 1 0 ⎟⎜ 0 0 α n −1 cn −1 ⎟
⎜0 0 L
⎝ bn an ⎟⎠ ⎜⎝ 0 0 L β n 1 ⎠⎟⎜⎝ 0 0 L 0 α n ⎟⎠
144 42444 3 144424443
L U
bk
α1 = a1 , β k = , α k = ak − β k ck −1 ; k = 2,3,K, n
α k −1
Ó A solução do sistema é feita através de uma resolução de sistemas triangulares

g1 = f1 , g i = f i − β i g i −1 ; i = 2,3,K, n
g g −c x
xn = n , xi = i i i +1 ; i = n − 1, n − 1,K,2,1
αn αi
ANÁLISE DE ERRO DA DECOMPOSIÇÃO LU

Ó Considere o sistema Ax = b

Ó Asolução do sistema sempre apresenta algum erro devido a


erros de truncamento que ocorrem durante o processo

Ó Denominar solução obtida como x

Ó Definir vetor resíduo como R = b − Ax

R=0 ⇒ x=x Solução calculada é a solução exata

Ó Espera-se que quando o vetor resíduo seja próximo a zero,


a solução calculada seja próxima da solução exata

Ó Isto nem sempre é verdade !

Considere o exemplo A = ⎛⎜10..2969 0.8648 ⎞ e b = ⎛ 0.8642 ⎞


0.1441 ⎟⎠ ⎜ 0.1440 ⎟
⎝ 2161 ⎝ ⎠

Solução exata: x = ⎛⎜ 2.0000 ⎞⎟


⎝ − 2.0000 ⎠
Solução obtida:

x = ⎛⎜ −00.9911 ⎞⎟ ⇒
⎝ .4870 ⎠
R = b − Ax = ⎛⎜ 0 .8642 ⎞ − ⎛1.2969 0.8648 ⎞⎛ 0.9911 ⎞ = ⎛ − 10 −8 ⎞
⎟ ⎜ ⎟⎜ ⎟ ⎜ −8 ⎟
⎝ 0.1440 ⎠ ⎝ 0.2161 0.1441 ⎠⎝ − 0.4870 ⎠ ⎝ 10 ⎠

Apesar do vetor resíduo ser muito pequeno, a solução obtida


não é muito distante da solução exata

Este problema pode ser explicado analisando-se o processo


de eliminação gaussiana
Processo de eliminação gaussiana

a21 0.2161
( 2)
a22 = a22 − a12 = 0.1441 − × 0.8648 = 0.1441 − 0.1440999923 ≈ 10 −8
a11 1.2969
a 0.2161
b2( 2) = b2 − 21 b1 = 0.1440 − × 0.8642 = 0.1440 − 0.1440000154 ≈ 10 −8
a11 1.2969
b2( 2)
⇒ x2 = ( 2) = −0.4870
a22

Ó Uma pequena variação no elemento 0.1441 causa uma


( 2)
grande
d variação
i no elemento
l a22 e consequentemente em x2

Ó Para uma análise da precisão da eliminação gaussianda,


é necessário usar o conceito de norma de vetores e matrizes

NORMA DE VETOR E MATRIZ

Ó Escalar não negativo


g qque em algum
g sentido mede a
magnitude de um vetor ou matriz
Ó Norma p de um vetor

x p
( p
= x1 + x2
p
+ L + xn )
p 1/ p
,1≤ p < ∞

Norma Euclideana: p=2 ( 2


x 2 = x1 + x2 + L + xn
2
)
2 1/ 2

Norma do máximo: p=infinito x ∞


= max xi
1≤i ≤ n

Ó Propriedades de uma Norma

x > 0, se x ≠ 0 e x = 0, se x = 0
αx = α x , α escalar
x+y ≤ x + y
Ax
Ó Norma de uma Matriz A = max
x≠ 0 x
n
Para Norma do máximo, pode-se mostrar que A ∞
= max
1≤ i ≤ n
∑a
j =1
ij

Relação entre a norma de um vetor e de uma matriz: Ax ≤ A x

ANÁLISE DE PERTURBAÇÃO
Ç

Ó Analisar o efeito de pequenas perturbações


na matriz A e vetor b na solução x

Ax = b ⇒ x = A −1b
A (x + δx) = (b + δb) ⇒ δx = A −1δb ⇒ δx ≤ A −1 δb
(A + δA )(x + δx) = b ⇒ Aδx + δA(x + δx) = 0 ⇒ δx = − A −1δA(x + δx)
δx δA
δx ≤ A −1 δA x + δx ⇒ ≤ A −1 A
x + δx 1424 3 A
K (A)

δx δb
Como b = Ax ⇒ b ≤ A x ⇒ ≤ K ( A)
x b

Condicionamento da matriz

Se o condicionamento da matriz for alto, pequenas perturbações


na matriz A e no vetor b provacam grandes perturbações na solução

A Matriz é dita mal-condicionada e a solução do problema torna-se imprecisa

Ó Para determinar o condionamento de uma matriz é necessário calcular


a norma da matriz inversa, que normalmente não é conhecida

Ó No exemplo anterior: A −1 = 108 × ⎛⎜ 0.1441 − 0.8648 ⎞⎟


⎝ − 0.2161 1.2969 ⎠
−1
⇒ A = (1.2969 + 0.2161) × 108 = 1.513 × 108
A = (1.2969 + 0.8648) = 2.1671
⇒ K ( A ) ≈ 3.3 × 108 → Matriz mal - condicionada
MÉTODOS ITERATIVOS

Fornece uma sequência de soluções aproximadas que convergem


quando o número de passos tende a infinito

x ( 0) ⇒ x (1) ⇒ x ( 2) ⇒ L ⇒ x ( k )

Chute inicial
lim x ( k ) = x
k →∞

Usado para matrizes esparsas e grandes


Menor necessidade de memória de armazenamento
Eliminação Gaussiana “enche” a matriz
Problemas de convergência

MÉTODO DE JACOBI

O sistema de equações pode ser escrito como


n

∑a
j =1
ijj x j = bi , para i = 1,2,K, n

n
− ∑aj =1
ij x j + bi
n
aii xi + ∑ j =1
aij x j = bi ⇒ xi =
j ≠i

aii
, para i = 1,2,K, n
j ≠i

No Método de Jacobi, a sequência de aproximações é obtida por:

n
− ∑a
j =1
(k )
ij x j + bi
j ≠i
xi( k +1) = , para i = 1,2,K, n
aii
MÉTODO DE GAUSS-SEIDEL

No método de Jacobi, os novos valores de x só são usados no próximo passo

No método de Gauss-Seidel, os novos valores de x são usados


a medida que eles são obtidos
n Para j<1, os novos valores de

j =1
aij x j = bi , para i = 1,2,K, n xj já foram calculados

i −1 n

i −1 n
− ∑ aij x j − ∑a ij x j + bi
∑a
j =1
ij x j + aii xi + ∑a x
j = i +1
ij j = bi ⇒ xi =
j =1

aii
j =i +1
, para i = 1,2,K, n

No Método de Gauss-Seidel, a sequência de aproximações é obtida por:

i −1 n
− ∑
j =1
aij x (jk +1) − ∑a x
j =i +1
ij
(k )
j + bi
xi( k +1) = , para i = 1,2,K, n
aii

⎛ 4 −1 −1 0 ⎞ ⎛1⎞
⎜ − 1 4 0 − 1⎟ ⎜ ⎟
EXEMPLO: Resolver Ax = b A = ⎜ − 1 0 4 − 1⎟ ; b = ⎜ 02 ⎟
⎜ 0 −1 −1 4 ⎟ ⎜1⎟
⎛ 0⎞ ⎝ ⎠ ⎝ ⎠
⎜ ⎟
Chute inicial : x (0)
= ⎜00⎟
⎜ 0⎟
⎝ ⎠
MÉTODO DE JACOBI

1 2 0 1
x1(1) = = 0.25 ; x2(1) = = 0.5 ; x3(1) = = 0.0 ; x4(1) = = 0.25
4 4 4 4
− (−1) × 0.5 − (−1) × 0.0 + (0.0) × 0.25 + 1
x1( 2) = = 0.375 ; x2( 2) = L
4

k X1(k) X2(k) X3(k) X4(k)


0 0.0 0.0 0.0 0.0
1 0.25 0.5 0.0 0.25
2 0.375 0.625 0.125 0.375
3 0.4375 0.6875 0.1875 0.4375

8 0.49805 0.74793 0.24793 0.49805


MÉTODO DE GAUSS-SEIDEL

1 − (−1) × 0.25 + 2
x1(1) = = 0.25 ; x2(1) = = 0.5625 ;
4 4
− (−1) × 0.25 + 0 − (−1) × 0.5625 − (−1) × 0.0625 + 1
x3(1) = = 0.0625 ; x4(1) = = 0.40625
4 4

k X1(k) X2(k) X3(k) X4(k)


0 00.0
0 00.00 00.0
0 00
0.0
1 0.25 0.5625 0.0625 0.40625
2 0.40625 0.70312 0.20312 0.47656
3 0.47656 0.73828 0.23828 0.49854

5 0.49854 0.74927 0.24927 0.49963

De um modo geral, os dois métodos podem ser escritos como x ( k +1) = B x ( k ) + c


Os diferentes métodos possuem diferentes formas para matriz B e o vetor c.

Uma matriz A pode ser decomposta na soma de três matrizes:

Di
Diagonal
l + Triangular
Ti l Superior
S i + Triangular
Ti l Inferior
I f i

A = D(L + I + U)
Ó O Método
d dde Jacobi
bi pode
d ser escrito
i como:
n
− ∑a
j =1
(k )
ij x j + bi

, para i = 1,2,K, n ⇒ x ( k +1) = −(L + U )x ( k ) + D −1b


j ≠i
xi( k +1) =
aii

B J = −(L + U )
Ó O Método de Gauss-Seidel pode ser escrito como:
i −1 n
− ∑
j =1
aij x (jk +1) − ∑a x
j =i +1
ij
(k )
j + bi
xi( k +1) = , para i = 1,2,K, n ⇒
aii
x ( k +1) = −Lx ( k +1) − Ux ( k ) + D −1b

B GS = −(I + L ) U
−1
ANÁLISE DE CONVERGÊNCIA

x ( k +1) = B x ( k ) + c
Se x é solução do sistema Ax = b : x = B x + c

O erro de cada aproximação x(k) é obtido pela subtração das equações

x ( k +1) − x = B (x ( k ) − x) = B 2 (x ( k −1) − x) = L = B k +1(x ( 0) − x)

Vamos supor que B tenha n autovetores linearmente independentes.


independentes Esses
n vetores formam uma base do espaço vetorial. Qualquer vetor pode
ser escrito como uma combinação linear dos autovetores.

Autovalores : λ1 , λ2 ,L, λn
Autovetores : u1 , u 2 ,L, u n

x ( 0) − x = α 1u1 + α 2u 2 + L + α n u n
x (1) − x = B(x ( 0) − x) = α 1Bu1 + α 2 Bu 2 + L + α n Bu n ⇒
⇒ x (1) − x = α 1λ1u1 + α 2 λ2u 2 + L + α n λn u n
M
x ( k ) − x = α 1λ1k u1 + α 2 λk2u 2 + L + α n λkn u n

Ó Raio Espectral de B: ρ (B) = max λi (B) < 1


1≤i ≤ n

O processo iterativo converge somente se somente se ρ (B) < 1

A taxa de convergência é dada por R = − log10 (ρ (B) )

Os autovalores de B não são conhecidos e esta condição não é facilmente


aplicada Uma condição suficiente que pode ser aplicada é que
aplicada.
para o processo iterativo convergir: B <1
MÉTODO DE JACOBI
n aij
∑a
aij
B J = −(L + U ) ⇒ bij = , i ≠ j bii = 0 B J = max
1≤i ≤ n
aii j =1 ii
j ≠i

Se B for diagonal
diagonal-dominante
dominante B J < 1 → Processo Converge

MÉTODO DE GAUSS-SEIDEL
n y
B GS = −(I + L ) U
−1
B GS = max
x =0
∑x
j =1

, y = B GS x

j ≠i

n i −1 n
y ∞
= yk ⇒ yk = ∑b
j =1
kj x j = ∑b
j =1
kj y j + ∑b
j =i +1
kj x j

n aij i −1 aij
y ∞
= yk ≤ sk y ∞
+ rk x ∞ , onde ri = ∑
j = i +1 aii
, si = ∑a
j =1 ii

ri
B GS ∞
≤ max → Processo converge se A for diagonal dominante
1≤i ≤ n 1 − s
i

MÉTODO SOR (SUCCESSIVE OVERRELAXATION)

Ó Modificação do Método de Gauss-Seidel para melhorar a taxa de convergência


i −1 n i −1 n
− ∑
j =1
aij x (jk +1) − ∑
j =i +1
aij x (jk ) + bi − ∑
j =1
aij x (jk +1) − ∑a x
j =i +1
ij
(k )
j − aii xi( k ) + bi
aii xi( k )
xi( k +1) = = +
aii aii aii
i −1 n
− ∑
j =1
aij x (jk +1) − ∑a x
j =i
ij
(k )
j + bi
xi( k +1) = xi( k ) + ri( k ) , onde ri( k ) =
aii

SOR ⇒ xi( k +1) = xi( k ) + ω ri( k ) ω: Parâmetro de Relaxação

Bω = (I + ωL) −1 [(1 − ω )I − ωU ]
0 <ω < 2
Solução de Sistema de Equações Não-Linear Ax = b
A = A(x)

Método de Picard:
1. Chute inicial; c
(0)
[
= u1( 0 ) , u2( 0 ) , u3( 0 ) , K , u N( 0 ) ]
2. Calcular coeficientes da matriz usando o valor atual das incógnitas;
g ;

A= Ac ( )
(k )

3. Resolver o sistema de equações e determinar o novo valor das


incógnitas;

c
( k +1)
( ( ))
= Ac
(k ) −1
f

• Comparar solução atual com anterior;

• Se não covergiu, voltar para 2. Convergência Ruim

Método de Newton:
G
Generalização
li ã do d Método
Mé d ded Newton
N para 1 equação
ã não-linear
ã li

f ( x + Δx ) = f ( x ) + Δx f ′( x ) + Δx 2 f ′′( x ) + K
f ( x + Δx ) = 0 ≈ f ( x ) + Δx f ′( x )

f (x )
Δx = −
f ′( x )

PROCEDIMENTO ITERATIVO
Chute inicial : x( 0)
i=0
While f ( x(i ) ) > ε , do
f ( x( i ) )
Δx = −
f ′( x(i ) )
x(i +1) = x(i ) + Δx
i = i +1
Raiz : x(i +1)
⎧ f ( x , x , x ,K, x ) = 0
Sistema a ser resolvido: ⎪ 1 1 2 3 N

f ( x , x , x ,K, xN ) = 0
⎪ 2 1 2 3 ⎪
⎨ f 3 ( x1 , x2 , x3 , K , x N ) = 0
⎪M

⎪⎩ f N ( x1 , x2 , x3 , K , x N ) = 0

Expansão por série de Taylor até termos de primeira ordem de cada equação:

f1 ( x1 + Δx1 , x2 + Δx2 , K , x N + Δx N ) = 0 ≈
∂f ∂f ∂f
f1 ( x1 , x2 , K , x N ) + 1 Δx1 + 1 Δx2 + K + 1 Δx N
∂x1 ∂x2 ∂x N
f 2 ( x1 + Δx1 , x2 + Δx2 , K , x N + Δx N ) = 0 ≈
∂f ∂f ∂f
f 2 ( x1 , x2 , K , x N ) + 2 Δx1 + 2 Δx2 + K + 2 Δx N
∂x1 ∂x2 ∂x N
M
f N ( x1 + Δx1 , x2 + Δx2 ,K , x N + Δx N ) = 0 ≈
∂f ∂f ∂f
f N ( x1 , x2 ,K , x N ) + N Δx1 + N Δx2 + K + N Δx N
∂x1 ∂x2 ∂x N

∂f1 ∂f ∂f
− f1 ( x1 , x2 , K , x N ) = Δx1 + 1 Δx2 + K + 1 Δx N
∂x1 ∂x2 ∂x N
∂f ∂f ∂f
− f 2 ( x1 , x2 , K, x N ) = 2 Δx1 + 2 Δx2 + K + 2 Δx N
∂x1 ∂x2 ∂x N
M
∂f ∂f ∂f
− f N ( x1 , x2 , K, x N ) = N Δx1 + N Δx2 + K + N Δx N
∂x1 ∂x2 ∂x N

⎡ ∂f1 ∂f1 ∂f1 ⎤


⎢ ∂x K
Sistema em ∂x2 ∂x N ⎥ ⎡ Δx1 ⎤ ⎡ f1 ⎤
Forma matricial ⎢ 1 ⎥
⎢ 2∂f ∂ f ∂ f 2 ⎥ ⎢ Δx ⎥ ⎢f ⎥
2
K ⎢ 2⎥
⎢ ∂x1 ∂x2 ∂x N ⎥ = −⎢ 2 ⎥
⎢ M ⎥⎢ M ⎥ ⎢ M ⎥
⎢ ⎢
⎥ Δx ⎥ ⎢ ⎥

⎢ N f ∂f ∂f ⎣
N ⎥ 123 N ⎦ ⎣{fN ⎦
N
K
⎣⎢ ∂4
x1 ∂x2 ∂x N ⎥⎦ Δx f
1 44424444 3
∂f i
J

Matrix Jacobiana J ij =
∂x j
Δx = J −1 f
PROCEDIMENTO ITERATIVO

(0)
Chute inicial : c
i=0
While f c ( ) > ε , do
(i )

Δx = − J −1 f Solução de um sistema linear


( i +1)
= c + Δx
(i )
c
i = i +1
( i +1)
Raiz : c

Convergência Quadrática

Exemplo: Resolver o sistema abaixo pelo


(a) método de Picard e
(b) método de Newton

⎧⎪2 xy + y 2 = 3

⎪⎩ x + 4 x 2 y = 5
Laboratório: Solução de um sistema linear

Escreva uma rotina MatLab para solução de um sistema linear sem pivotamento e uma outra com
pivotamento parcial.

Escreva um programa principal que realize as seguintes operações:

1. Defina a matrix A e o vetor b do sistema linear Ax = b , onde

⎡ 3.03 − 12.1 14 ⎤ ⎡− 119⎤


A = ⎢⎢− 3.03 12.1 − 7 ⎥⎥ ; b = ⎢⎢ 120 ⎥⎥
⎢⎣ 6.11 − 14.2 21 ⎥⎦ ⎢⎣− 139⎥⎦

2. Chame a rotina para solução do sistema sem pivotamento;

3. Chame a rotina para solução do sistema com pivotamento parcial.

Explique o que ocorreu.


2/17/11 2:05 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab5-...\matrizpiv.m 1 of 2

%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
%
% Departamento de Engenharia Mecânica
% PUC-Rio
%
% Prof. : Marcio Carvalho
% Monitor: Oscar Coronado
%===========================================================================

% PROGRAMA PARA TESTES DE RESOLUCAO DE UM SISTEMA DE EQUAÇÕES


% POR ELIMINAÇÃO GAUSSIANA

% SETEMBRO 2001

%===========================================================================

% Comandos de inicialização: Limpeza da memoria do ambiente MatLab

clc
clear all

% Entrada de dados: Tamanho da matriz

n = 3;

% Definicao dos elementos da matriz M

M = [3.03 -12.1 14;


-3.03 12.1 -7;
6.11 -14.2 21];

f = [-119; 120; -139];

% Chamada da rotina de solucao do sistema linear sem pivotamento

[xspiv]=sempiv(n,M,f);

erro = f-M*xspiv;
normaerro = norm(erro);

disp(' Norma do erro ' );


disp(normaerro);

% Copia a matriz M e o vetor f para a matriz A e o vetor b para chamada


% da subrotina sempiv

b = f;
A = M;

% Chamada da rotina de solucao do sistema linear sem pivotamento


2/17/11 2:05 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab5-...\matrizpiv.m 2 of 2

[xpiv] = pivparcial(n,M,f);

erro = f-M*xpiv;
normaerro = norm(erro);

disp(' Norma do erro ' );


disp(normaerro);
2/17/11 2:06 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab5-sis...\sempiv.m 1 of 2

function [x]=sempiv(n,A,b)

%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
%
% Departamento de Engenharia Mecânica
% PUC-Rio
%
% Prof. : Marcio Carvalho
% Monitor: Oscar Coronado
%===========================================================================

% PROGRAMA PARA O RESOLUÇÃO DE UM SISTEMA DE EQUAÇÕES POR ELIMINAÇÃO GAUSSIANA

% SETEMBRO 2001

%===========================================================================

% ELIMINAÇÃO GAUSSIANA

for i=1:n

% Checar se a pivot e igual a zero

if (abs(A(i,i)) < 1e-6)


disp('pivot proximo zero na linha ')
disp(i)
end

% Proceder com a eliminação dos elementos abaixo da linha i

for k=i+1:n
m=A(k,i)/A(i,i);
for j=i:n
A(k,j)=A(k,j)-A(i,j)*m;
end
b(k)=b(k)-b(i)*m;
end

end

% retrosubstituição

for i=n:-1:1

sum=0;
for j=i+1:n
sum=sum+A(i,j)*x(j,1);
end

x(i,1)=(b(i)-sum)/A(i,i);

end
2/17/11 2:06 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab5-sis...\sempiv.m 2 of 2

disp(' A solução do sistema é (sem pivotamento): ' );

disp(' ' );

x
2/17/11 2:06 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab5...\pivparcial.m 1 of 2

function [x]=pivparcial(n,A,b)

%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
%
% Departamento de Engenharia Mecânica
% PUC-Rio
%
% Prof. : Marcio Carvalho
% Monitor: Oscar Coronado
%===========================================================================

% PROGRAMA PARA O RESOLUÇÃO DE UM SISTEMA DE EQUAÇÕES POR ELIMINAÇÃO GAUSSIANA

% SETEMBRO 2001

%===========================================================================

% ELIMINAÇÃO GAUSSIANA

for i=1:n-1

% Procura um Pivot (Pivotamento Parcial)

pivot=abs(A(i,i));
irow = i;

for k=i+1:n

if (abs(A(k,i))>pivot)
pivot=abs(A(k,i));
irow=k;
end

end

% Checar se a matriz e singular

if (pivot < 1d-10)


disp('pivot perto de zero');
end

% Trocar as linhas i e k

for j=i:n
aaux=A(irow,j);
A(irow,j)=A(i,j);
A(i,j)=aaux;
end

baux = b(irow);
b(irow)=b(i);
b(i)=baux;
2/17/11 2:06 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab5...\pivparcial.m 2 of 2

% Proceder com a eliminação dos elementos abaixo da linha i

for k=i+1:n
m=A(k,i)/A(i,i);
for j=i:n
A(k,j)=A(k,j)-A(i,j)*m;
end
b(k)=b(k)-b(i)*m;
end

end

% retrosubstituição

for i=n:-1:1

sum=0;
for j=i+1:n
sum=sum+A(i,j)*x(j,1);
end

x(i,1)=(b(i)-sum)/A(i,i);

end

disp(' A solução do sistema é (com pivotamento parcial) : ' );

disp(' ' );
disp(' ' );

x
Laboratório: Solução de um sistema linear por método iterativo

Escreva uma rotina MatLab para solução de um sistema linear usando o método de Jacobi e outra
usando o método de Gauss Seidel.

Escreva um programa principal que chame as rotinas desenvolvidas para solução do sistema Ax = b ,
1
Onde aij = e b é obtido de forma que a solução exata do sistema seja xi = 1 .
i + j −1

No programa principal, a tamanho da matriz n deve ser um dado de entrada.

Execute o programa para n =2, n = 10 e n = 15 para os dois métodos implementados. Explique o que
ocorreu.
2/17/11 2:42 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab6-...\principal.m 1 of 2

%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
%
% Departamento de Engenharia Mecânica
% PUC-Rio
%
% Prof. : Marcio Carvalho
%===========================================================================

% PROGRAMA PARA TESTES DE RESOLUCAO DE UM SISTEMA DE EQUAÇÕES


% POR METODO ITERATIVO

% SETEMBRO 2005

%===========================================================================

% Comandos de inicialização: Limpeza da memoria do ambiente MatLab

clc
clear all

% Entrada de dados: Tamanho da matriz

n = input('tamanho da matriz ');

disp(' METODO DE SOLUÇÃO ');


disp(' ------ -- ------- ');

disp( ' ');


disp( ' 1. Método da Jacobi');
disp( ' ');
disp( ' ');
disp( ' 2. Método de Gauss-Seidel');
disp( ' ');
disp( ' ');
disp( ' 0. Para terminar o programa');
disp( ' ');
disp( ' ');
Op=input('Escolher ( 0 ---> 2 ) : '); % entrada de uma opção

% Definicao dos elementos da matriz M

for i=1:n
sum = 0;
for j=1:n
A(i,j)=1/(i+j-1);
sum = sum+A(i,j);
end
f(i) = sum;
end

% solucao exata = 1

for i=1:n
2/17/11 2:42 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab6-...\principal.m 2 of 2

xexato(i)=1;
end

% Chamar a rotina correspondente para resolver o sistema

switch Op

case 1
[x]=jacobi(n,A,f);
case 2
[x]=gaussseidel(n,A,f);
otherwise
disp( ' ');
disp( ' ');
disp(' TERMINO DO PROGRAMA ');
end
2/17/11 2:42 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab6-sis...\jacobi.m 1 of 2

function [x]=jacobi(n,A,f)

% Rotina para solucao de um sistema de equacoes lineares pelo Metodo de Jacobi

disp(' ')
disp('Resolver um sistema linear pelo metodo de Jacobi ')
disp(' ')

% definicao da tolerancia

tol= 0.001;

% definicao do numero maximo de iteracoes

NITER = input('numero maximo de iteracoes: ');

% chute inicial

x0 = zeros(n,1);

% O metodo

k=0;
x=x0;
normadif = 1;

while (k<NITER) & (normadif>tol)

for i = 1: n
s=0;
for j = 1: i-1
s = s + A(i,j)*x0(j);
end
for j = i+1 : n
s = s + A(i,j)*x0(j);
end

if A(i,i)<tol , display(' Diagonal igual a 0.'), break, end

x(i)=(- s + f(i))/A(i,i);

end

normadif = norm(x-x0);

disp('iteracao :')
k
disp('norma :')
normadif

k = k+1;
x0=x;

end
2/17/11 2:42 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab6-sis...\jacobi.m 2 of 2

if (k==NITER) & (normadif > tol)


disp(' NAO CONVERGIU ');
else
disp(' solucao :')
disp(x)
end
2/17/11 2:42 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab...\gaussseidel.m 1 of 2

function [x]=gaussseidel(n,A,f)

% Rotina para solucao de um sistema de equacoes lineares pelo Metodo de Gauss Seidel

disp(' ')
disp('Resolver um sistema linear pelo metodo de Gauss-Seidel ')
disp(' ')

% definicao da tolerancia

tol = 0.001
% definicao do numero maximo de iteracoes

NITER = input('numero maximo de iteracoes: ');

% chute inicial

x0 = zeros(n,1);

% O metodo

k=0;
x=x0;
normadif = 1;

while (k<NITER) & (normadif>tol)

for i = 1: n
s=0;
for j = 1: i-1
s = s + A(i,j)*x(j);
end
for j = i+1 : n
s = s + A(i,j)*x0(j);
end

if A(i,i)<tol , display(' Diagonal igual a 0.'), break, end

x(i)=(- s + f(i))/A(i,i);

end

normadif = norm(x-x0);

disp('iteracao :')
k
disp('norma:')
normadif

k = k+1;
x0=x;

end
2/17/11 2:42 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab...\gaussseidel.m 2 of 2

if (k==NITER) & (normadif > tol)


disp(' NAO CONVERGIU ');
else
disp(' solucao :')
disp(x)
end

Вам также может понравиться