1ª lista de métodos numéricos
DESCRIPTION
Resolução da 1ª lista de exercícios da disciplina métodos numéricos do Programa de Mestrado da UFSJ em parceria com o CEFET-MG.TRANSCRIPT
UNIVERSIDADE FEDERAL DE SÃO JOÃO DEL-REI - UFSJ
DEPARTAMENTO DE ENGENHARIA ELÉTRICA - DEPEL
PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA - PPGEL
1ª LISTA DE EXERCÍCIOS DE MÉTODOS NUMÉRICOS
Aluno: Jhonathan Campos Resende
Matrícula: 2015220230009
Prof. Leonidas Chaves de Resende
São João del-Rei, 26 de março de 2015
1ª Questão
Faça um algoritmo para calcular a precisão da máquina/computador ora em uso.
Com base neste algoritmo, apresente a aritmética de ponto flutuante da máquina.
Solução:
Através do código abaixo, desenvolvido no software Matlab, obteve-se a precisão da
máquina em uso:
clear allclose allclc format long Epsilon = 1; while 1 Epsilon = Epsilon/2; if Epsilon + 1 == 1 break endend disp('Ponto flutuante = ')disp(Epsilon)
O resultado da compilação do referido código é:
Ponto flutuante = 1.110223024625157e-16
Portanto, de acordo com a aritmética de ponto flutuante, tem-se:
Mantissa: m=1,110223024625157;
Número de dígitos na mantissa (precisão): t=15;
Expoente: e=−16;
Base: β=10 (base decimal).
2ª Questão
Calcule as tensões dos nós do circuito elétrico da Figura 1. Descreva passo a passo
a resolução do sistema de equações obtido por meio das Leis de Ohm e Kirchhoff,
utilizando a decomposição LU.
Solução:
Aplicando-se as Leis de Ohm e Kirchhoff no circuito elétrico resistivo mostrado na
Figura 1 e rearranjando-se os termos, tem-se:
−6V 1+2V 2+V 3+V 4=0 (1)
3V 1−4V 2+V 3=0 (2)
V 1+2V 3−13V 4+6V 4=−254 (3)
V 1+2V 3−3V 4=0 (4)
Reescrevendo-se as equações acima na forma matricial, tem-se:
[−6 2 1 13 −4 1 03 2 −13 61 0 2 −3] [
V 1
V 2
V 3
V 4]=[ 0
0−2540
] (5)
Decomposição LU: Uma matriz quadrada pode ser escrita como produto de duas
matrizes. Assim, uma matriz A é fatorada tal que A=LU , onde L é uma matriz
triangular inferior unitária e U uma matriz triangular superior. Deste modo para
resolver o sistema A ∙x=b, usa-se a matriz A na forma decomposta
A ∙x=b→L∙U ∙ x=b (6)
Fazendo
U ∙x= y (6)
Então
L ∙ y=b (7)
Para evitar um pivô nulo e que os multiplicadores tenham valores muito grandes, a
pivotação parcial deve ser utilizada na decomposição LU. Quando esta estratégia for
usada, a decomposição será da forma P A=LU , onde P é uma matriz de
permutações, que será constituída das linhas de uma matriz identidade I , colocadas
na mesma ordem das linhas pivotais que geram a matriz triangular superior U . A
matriz triangular inferior unitária L é formada pelos multiplicadores utilizados na
eliminação. A ordem em que os multiplicadores são atribuídos a cada linha de L é
dada pelos índices das linhas pivotais. Para resolver o sistema A ∙x=b, tem-se:
A ∙x=b→P ∙ A ∙ x=Pb→L∙U ∙ x=Pb (8)
Fazendo
U ∙x= y (9)
Então
L ∙ y=Pb (10)
A solução y do sistema triangular inferior L ∙ y=Pb é obtida pelas substituições
sucessivas. Por sua vez, o vetor y é utilizado como termo independente no sistema
triangular superior U ∙x= y, cuja solução x é calculada pelas substituições
retroativas.1
Foi desenvolvido um programa em Matlab para resolver o sistema de equações
mostrado na forma matricial na equação (5) utilizando a decomposição LU. O
referido programa é mostrado abaixo:
clear allclose allclc %% Parâmetros de entrada: matrizes A e b A=[-6 2 1 1; 3 -4 1 0; 3 2 -13 6; 1 0 2 -3]; b=[0; 0;-254; 0]; n = length(A);
1 CAMPOS FILHO, Frederico Ferreira. Algoritmos numéricos. 2.ed. Rio de Janeiro: LTC, 2012. 428 p.
format short %% Decomposição LU[L,U,P] = lu(A); % Matrizes L e Udisp('L = ');disp(L);disp('U = '); disp(U); % PermutaçãoPb = P*b; %% Solução do sistema triangular inferior Ly = Pb, calculada por substituições sucessivasy = zeros(n,1);y(1) = Pb(1,1)/L(1,1);for i=1:n, Soma = 0.0; for j=1:(i-1), Soma = Soma+L(i,j)*y(j); y(i) = Pb(i)-Soma; endend %% Solução do sistema triangular superior Ux = y, calculada por substituições retroativasx = zeros(n,1);x(n,1) = y(n,1)/U(n,n);for i=n:-1:1, Soma = 0.0; for j=(i+1):n, Soma = Soma+U(i,j)*x(j); x(i) = (y(i)-Soma)/U(i,i); endend %% Solução do vetor xdisp('x = ');disp(x);
As matrizes L e U obtidas foram:
L=[ 1 0 0 0−0,5 1 0 0−0,5 −1 1 0
−0,1667 −0,1111 −0,2121 1] (11)
U=[−6 2 1 10 −3 1,5 0,50 0 −11 70 0 0 −1,2929 ] (12)
As tensões nodais obtidas foram:
V 1=25,7969 (13)
V 2=31,7500 (14)
V 3=49,6094 (15)
V 4=41,6719 (16)
3ª Questão
Para sistemas de equações lineares de grande porte, nem sempre é possível obter
uma precisão igual, ou pelo menos comparável com a limitação da máquina. Na
resolução por meio de métodos diretos, os erros de arredondamento são
acumulados, e são ampliados na medida em que a matriz se aproxima da
singularidade. Neste caso, podem-se perder dois ou três algarismos significativos
para matrizes que estão longe de serem singulares. Uma alternativa para retornar à
precisão da máquina nesta situação é utilizar um método chamado “iterative
improvement”, sucintamente apresentado a seguir.
Suponha que um vetor x é a solução exata do sistema linear.
A ∙x=b (17)
onde x não é conhecido. Apenas uma solução aproximada (x+δx) é conhecida,
quando δx é o erro desconhecido.
Quando multiplicada por A, esta solução fornece um produto ligeiramente diferente
da saída b desejada (lado direito da equação (17)), nomeadamente
A ∙ (x+δx )=(b+δb) (18)
Subtraindo a equação (17) em (18) chega-se a
A ∙δx=δb (19)
Substituindo (19) em (18) tem-se
A ∙δx=A ∙ ( x+δx )−b (20)
Finalmente, para melhorar a solução do sistema de equações, é necessário resolver
o problema da equação (20) e subtrair δx obtido da solução aproximada.
Utilize este método para melhorar uma solução aproximada do sistema linear a
seguir, sendo esta solução obtida por meio da aplicação de um método direto (e.g.,
eliminação de Gauss, decomposição LU, etc.).
x2+5x3−7 x 4+23x5−x6+7 x7+x8+x9−5 x10=10 (21)
17 x1−24 x3−75 x4+100 x5−18 x6+10x7−8 x8+9x9−50x10=−40 (22)
3 x1−2x2+15 x4−78 x5−90x6−70x7+18 x8−75 x9+ x10=−17 (23)
5 x1+5 x2−10 x3−72 x5−x6+80x7−3x8+10 x9−18 x10=43 (24)
100 x1−4 x2−75 x3−8 x4+83x6−10x7−75x8+3 x9−8 x10=−53 (25)
70 x1+85x2−4 x3−9 x4+2 x5+3x7−17 x8−x9−21 x10=12 (26)
x1+15x2+100 x3−4 x 4−23 x5+13x6+7 x8−3 x9+17 x10=−60 (27)
16 x1+2x2−7 x3+89 x4−17 x5+11 x6−73 x7−8 x9−23 x10=100 (28)
51 x1+47 x2−3x3+5 x4−10 x5+18 x6−99 x7−18 x8+12x10=0 (29)
x1+ x2+x3+x4+x5+x6+x7+x8+x9+x10=100 (30)
Solução:
A solução do sistema de equações acima se deu em duas etapas. Primeiramente,
aplicou-se o método da composição LU para obter uma solução aproximada para o
sistema, uma vez que a exatidão da solução é limitada pela precisão do computador
utilizado, culminando em erros de arredondamento. Em seguida, visando minimizar
esses erros, aplicou-se o método “iterative improvement”, apresentado no enunciado
dessa questão. O algoritmo desenvolvido em Matlab para este fim é mostrado
abaixo:
clear allclose allclc %% Solução aproximada do sistema linear utilizando o método de decomposição LU % Parâmetros de entrada: matrizes A e bA = [0 1 5 -7 23 -1 7 1 1 -5; 17 0 -24 -75 100 -18 10 -8 9 -50; 3 -2 0 15 -78 -90 -70 18 -75 1; 5 5 -10 0 -72 -1 80 -3 10 -18; 100 -4 -75 -8 0 83 -10 -75 3 -8; 70 85 -4 -9 2 0 3 -17 -1 -21; 1 15 100 -4 -23 13 0 7 -3 17; 16 2 -7 89 -17 11 -73 0 -8 -23; 51 47 -3 5 -10 18 -99 -18 0 12;
1 1 1 1 1 1 1 1 1 1]; b = [10; -40; -17; 43; -53; 12; -60; 100; 0; 100]; n = length(A); format long %% Decomposição LU[L,U,P] = lu(A); % PermutaçãoPb = P*b; %% Solução do sistema triangular inferior Ly = Pby = zeros(n,1);y(1) = Pb(1,1)/L(1,1);for i=1:n, Soma = 0.0; for j=1:(i-1), Soma = Soma+L(i,j)*y(j); y(i) = Pb(i)-Soma; endend %% Solução do sistema triangular superior Ux = yx_deltaX = zeros(n,1);x_deltaX(n,1) = y(n,1)/U(n,n);for i=n:-1:1, Soma = 0.0; for j=(i+1):n, Soma = Soma+U(i,j)*x_deltaX(j); x_deltaX(i) = (y(i)-Soma)/U(i,i); endend %% Solução aproximada do sistema de equaçõesdisp('x + delta x = ');disp(x_deltaX); %% Melhorando a precisão a solução: Método "Iterative Improvement" b_deltaB = A*x_deltaX; deltaB = b_deltaB-b; deltaX = inv(A)*deltaB; x = x_deltaX-deltaX; % Solução refinadadisp('x = ')
disp(x)
O método da decomposição LU obteve os seguintes resultados:
x1=34,862459137531907 (31)
x2=−14,137451011236953 (32)
x3=−6,711406105568752 (33)
x4=−4,278830802699848 (34)
x5=−0,612762496260318 (35)
x6=13,806271238310904 (36)
x7=1,806651574741939 (37)
x8=69,588088554096359 (38)
x9=0,298787425102358 (39)
x10=5,378192485982453 (40)
Após a aplicação do método "Iterative Improvement", obteve-se os resultados
abaixo:
x1=34,862459137531843 (41)
x2=−14,137451011236895 (42)
x3=−6,711406105568790 (43)
x4=−4,278830802699901 (44)
x5=−0,612762496260335 (45)
x6=13,806271238311064 (46)
x7=1,806651574741933 (47)
x8=69,588088554096501 (48)
x9=0,298787425102201 (49)
x10=5,378192485982384 (50)
Comparando-se a duas soluções, observa-se a diferença existente nas três últimas
casas decimais, devido aos erros de arredondamento oriundos do primeiro método,
corrigidos pelo segundo.