Академический Документы
Профессиональный Документы
Культура Документы
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
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
MODELO FÍSICO
PREVISÕES PREVISÕES
TIPO A TIPO B
Compromisso entre custo para solução das equações e qualidade dos resultados
IMPORTÂNCIA DE PREDIÇÃO
Projeto de engenharia mais econômico
Otimização de projetos
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
MÉTODOS NUMÉRICOS
d dT
EQUAÇÃO DIFERENCIAL k (T ) G ( x) T ( x) ?
dx dx
DISCRETIZAR O PROBLEMA
DIFERENÇAS FINITAS
ELEMENTOS FINITOS
VOLUMES FINITOS
ELEMENTOS DE CONTORNO
ELEMENTOS ESPECTRAIS
OUTROS ...
ESCOLHA DE SOFTWARE
Versatilidade X desempenho
Desenvolvidos: Novos modelos
Comerciais: Mais “userfriendly”, interface gráfica
Treinamento
Fundamentos físicos
Uso do software
EMENTA
Ó Janela principal.
principal Modo como o usuário se comunica com o progama MATLAB
Janela de comando
Janela de variaveis
VARIÁVEL TIPO VETOR - ARRAY
CRIAÇÃO DE GRÁFICOS
JANELA DE PROGRAMAÇÃO / EDIÇÃO
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
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.
%---------------------------------------------------------
%
% LABORATORIO DE METODOS NUMERICOS
%
% Programa para multiplicar duas matrizes.
%
% Autora: Juliana Vianna
%
% Data: Agosto 2005
%
%---------------------------------------------------------
%limpa a memoria.
clear all;
% 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
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
repetir = true;
while (repetir)
disp(' Entre com os coeficientes :');
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
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
SOLUÇÃO
15
1.5
0
0 2 4 6 8
A função escolhida para representar -0.5
-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
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
⎡m⎤ ⎡ 0.505 ⎤
∴⎢ ⎥ = ⎢ ⎥
⎣k ⎦ ⎣− 2.542⎦
CÁLCULO DO ERRO
1.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
∂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
⎧⎡ 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:
∑δ
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 ⎭
⎡ 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
Ó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
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
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
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 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 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
( 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
( 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) = 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)
E A = f ( x) − f ( x)
* 0 0.2 0.4 0.6 0.8 1 1.2
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 ⎠
t 0 2 4 6 8 10 Horas
H(t) 1.0 1.6 1.4 0.6 0.2 0.8 metros
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% PROGRAMA DE AJUSTE DE DADOS POR MINIMOS QUADRADOS
% FINALIDADE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Dados de entrada
disp( 'PROGRAMA DE AJUSTE DE DADOS POR MÍNIMOS QUADRADOS ' );
disp( '-------- -- ------ -- ----- --- ------- --------- ');
disp( ' ');
disp( ' ');
while k<=n
% 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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;
C=inv(B)*D;
disp( ' ');
disp( ' ');
clc
disp('IMPRESSÃO DOS RESULTADOS ');
disp('--------- --- ---------- ');
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
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
Primeira idéia
a b x
Melhor aproximação y
a b 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
Δ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
Ó O erro na aproximação
p ç é sempre
p proporcional
p p ao tamanho do intervalo
elevado a alguma potência inteira
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
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
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
n +1
(b − a ) ∑C
k =1
n
k f ( xk )
b
1
coeficientes de Newton - Cotes Ckn = ∫
(b − a ) a
Lk ( x) dx
COMENTÁRIOS
Ó 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
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
⎧ ⎤⎫
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
Regra
g de Simpson
p
Integracao1.m F1.m
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
EXTRAPOLAÇÃO DE RICHARDSON
g (h) = g + c1h + c2 h 2 + L
⎛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:
⎛π ⎞ π 3
Pn = 2n sen⎜ ⎟ ≈ 2π − 2 + O (n 4 )
⎝n⎠ 3n
⎛π ⎞ ⎛π ⎞
P20 = 4 sen⎜ ⎟ = 4 P40 = 8sen⎜ ⎟ = 5.65685 L
⎝2⎠ ⎝4⎠
4 I 0n − I 0n / 2
I1n =
3
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
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.
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
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.
2π
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
%===========================================================================
% Agosto 2002
%===========================================================================
clc
clear all
% ENTRADA DE DADOS
n=input('Entre com o número de intervalos (deve ser par para o Met. Simpson): ');
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
%===========================================================================
% Agosto 2002
%===========================================================================
for i=1:n
xl = a + (i-1)*DX;
xr = a + i*DX;
I=I+(f1(xl)+f1(xr))/2*DX;
end
%===========================================================================
% MEC 1701 - METODOS NUMERICOS PARA ENGENHARIA MECANICA
% MEC 2951 - METODOS NUMERICOS E COMPUTACIONAIS
%
% Departamento de Engenharia Mecanica
% PUC-Rio
%
% Prof. Marcio Carvalho
%===========================================================================
% Agosto 2002
%===========================================================================
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
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
2 x = −20 ⇒ x = −10
x 2 − 5x + 6 = 0 ⇒ x=2 e x=3
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
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
2
⎛ x⎞
EXEMPLO 3: RESOLVER ⎜ ⎟ − sin x = 0
⎝2⎠
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
i xi f(xi) f’(bi) Δx
0 0.0
1
2
3
4
PROPRIEDADE DE CONVERGÊNCIA
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
f ((x)
f (x)
x* x x* x
x(0) x(1) x(1) x(0)
f (x)
x(1) x* x
x(0)
INTERPRETAÇÃO GEOMÉTRICA
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
O programa deve ser dividido em um programa principal e subrotinas. O programa principal deve fazer
as seguintes tarefas:
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.
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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');
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
prod = 1
maxiter = 20;
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);
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)
else
end
2/17/11 12:15 PM C:\Marcio\Cursos-PUC\ENG1714\LABORATORIOS\lab4-ra...\Newton.m 1 of 2
erro=1;
maxiter = 20;
num = f1(X0);
den = derivf1(X0);
Delta = - num/den;
disp('iteracao');
disp(k);
disp('erro');
disp(erro);
X0=X;
k=k+1;
end
if (k == maxiter)
else
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
Ó MÉTODOS DIRETOS
Ó MÉTODOS ITERATIVOS
MÉTODOS DIRETOS
SISTEMAS TRIANGULARES
⎡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
Se a22 ≠ 0
( 2)
⎧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 )
Ó 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
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
n Eliminação Retrosubstituição
10 0.0050 s 0.0008 s
100 5s 0.075 s
1000 5000 s 7.5 s
PIVOTAMENTO
⎡1 1 1 1⎤
⎢0 0 1 1⎥ → a22 = 0
( 2)
⎢⎣0 1 1 0⎥⎦
Uma solução seria trocar a posição das linhas 2 e 3, o que já fornece a matriz triangular
⎧ 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 ⎦⎥
⎡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:
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
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
success=1; x(i,1)=(b(i)-sum)/A(i,i);
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 ⎠
∑
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
A = LU
Lik = mik (mii = 1), i ≥ k e U kj = akj( k ) , k ≤ j.
Ó 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
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
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
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
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 ⎠
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
x p
( p
= x1 + x2
p
+ L + xn )
p 1/ p
,1≤ p < ∞
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
ANÁLISE DE PERTURBAÇÃO
Ç
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
x ( 0) ⇒ x (1) ⇒ x ( 2) ⇒ L ⇒ x ( k )
Chute inicial
lim x ( k ) = x
k →∞
MÉTODO DE JACOBI
∑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
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
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
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
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
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
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
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
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
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 )
c
( k +1)
( ( ))
= Ac
(k ) −1
f
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
Matrix Jacobiana J ij =
∂x j
Δx = J −1 f
PROCEDIMENTO ITERATIVO
(0)
Chute inicial : c
i=0
While f c ( ) > ε , do
(i )
Convergência Quadrática
⎧⎪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.
%===========================================================================
% 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
%===========================================================================
% SETEMBRO 2001
%===========================================================================
clc
clear all
n = 3;
[xspiv]=sempiv(n,M,f);
erro = f-M*xspiv;
normaerro = norm(erro);
b = f;
A = M;
[xpiv] = pivparcial(n,M,f);
erro = f-M*xpiv;
normaerro = norm(erro);
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
%===========================================================================
% SETEMBRO 2001
%===========================================================================
% ELIMINAÇÃO GAUSSIANA
for i=1:n
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(' ' );
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
%===========================================================================
% SETEMBRO 2001
%===========================================================================
% ELIMINAÇÃO GAUSSIANA
for i=1:n-1
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
% 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
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(' ' );
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
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
%===========================================================================
% SETEMBRO 2005
%===========================================================================
clc
clear all
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
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)
disp(' ')
disp('Resolver um sistema linear pelo metodo de Jacobi ')
disp(' ')
% definicao da tolerancia
tol= 0.001;
% chute inicial
x0 = zeros(n,1);
% O metodo
k=0;
x=x0;
normadif = 1;
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
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
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
% chute inicial
x0 = zeros(n,1);
% O metodo
k=0;
x=x0;
normadif = 1;
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
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