Você está na página 1de 51

Ministério da Educação

Universidade Federal Rural da Amazônia

Cálculo Numérico

Aula 06: Decomposição LU e Matrizes Inversas

Belém-Pa
Conteúdo Programático

1. Métodos Diretos e Métodos Iterativos


2. Método da Decomposição LU
3. Matrizes Inversas
4. Decomposição LU no Cálculo de Matriz Inversa
Métodos Diretos x Métodos Iterativos

 A resolução de sistemas lineares pode ser obtida através de métodos numéricos que são
divididos em:
 Métodos Diretos; e
 Métodos Iterativos.

 O Método de Decomposição LU é um dos métodos diretos, que são métodos que permitem
obter a solução do sistema linear realizando um número finito de operações.
 Neste caso, a solução é exata, a menos de erros de arredondamento, e é possível determinar
o esforço computacional gasto para obter a solução.
Método da Decomposição LU

 Neste método, usa-se o fato de que, nas condições necessárias, uma matriz quadrada
pode ser decomposta como um produto de duas matrizes triangulares.
 Considerando um sistema linear 𝐴 ∙ 𝑋 = 𝐵, onde 𝐴 é uma matriz invertível (det 𝐴 ≠ 0).
Nessa condição, a matriz 𝐴 pode ser decomposta como o produto 𝐴 = 𝐿 ∙ 𝑈, onde 𝐿 é uma
matriz triangular inferior e 𝑈 é uma matriz triangular superior.
 Teorema: Se a matriz 𝐴 é tal que det 𝐴 ≠ 0, então existe uma única matriz triangular
inferior 𝐿 = 𝑙𝑖𝑗 e uma matriz triangular superior 𝑈 = 𝑢𝑖𝑗 , tal que:
𝐴 =𝐿∙𝑈
Método da Decomposição LU
 Pode-se reescrever o Teorema: se o método da eliminação de Gauss pode ser efetuado sobre
a matriz 𝐴, então pode ser escrita por 𝐴 = 𝐿 ∙ 𝑈.
 A matriz 𝐿 é obtida pelos multiplicadores utilizados no processo da eliminação de Gauss,
𝑎𝑖𝑗
sendo 𝑙𝑖𝑗 = 𝑚𝑖𝑗 = , se 𝑖 > 𝑗 , 𝑙𝑖𝑖 = 1, 𝑙𝑖𝑗 = 0 se 𝑖 < 𝑗. E a matriz 𝑈 é a própria matriz
𝑎𝑗𝑗
triangular superior obtida no processo da decomposição de Gauss.

1 0 0 ⋯ 0 𝑢11 𝑢12 𝑢13 ⋯ 𝑢1𝑛


𝑙21 1 0 ⋯ 0 0 𝑢22 𝑢23 ⋯ 𝑢2𝑛
𝐿 = 𝑙31 𝑙32 1 ⋯ 0 e𝑈= 0 0 𝑢33 ⋯ 𝑢3𝑛
⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋱ ⋮
𝑙𝑛1 𝑙𝑛2 𝑙𝑛3 ⋯ 1 0 0 0 ⋯ 𝑢𝑛𝑛
Método da Decomposição LU

 Para a solução do sistema linear 𝐴 ∙ 𝑋 = 𝐵, fatora-se a matriz 𝐴 = 𝐿 ∙ 𝑈 e obtém-se o


sistema:
𝐿∙𝑈∙𝑋 =𝐵
 Fazendo 𝑈 ∙ 𝑋 = 𝑌, reescreve-se o sistema por 𝐿 ∙ 𝑌 = 𝐵.
 Dessa forma, recai-se sobre dois sistemas lineares mais simples de resolver:
𝐿∙𝑌 =𝐵e𝑈∙𝑋 =𝑌
 O primeiro sistema é simples pelo fato de ser um sistema triangular inferior e, para
determinar a solução, basta usar substituição sucessiva.
 Já o segundo sistema é triangular superior e, por retrosubstituição, determina-se a solução.
Método da Decomposição LU

 Resolvendo o primeiro sistema, determina-se os valores do vetor 𝑌. Substituindo 𝑌 no


segundo sistema, determina-se o valor de 𝑋, que é o vetor solução do sistema.

 Algoritmo da Decomposição LU:


1) Decompor 𝐴 = 𝐿 ∙ 𝑈. Nessa etapa, as matrizes 𝐿 e 𝑈 são construídas simultaneamente.
A cada processo do método da eliminação de Gauss, se estabelece uma linha de 𝑈 e uma
coluna de 𝐿;
2) Resolver o sistema linear 𝐿 ∙ 𝑌 = 𝐵 por substituição sucessiva; e
3) Resolver o sistema linear 𝑈 ∙ 𝑋 = 𝑌 por retrosubstituição.
Método da Decomposição LU – Exemplo 1

 Resolver, pelo método da decomposição LU, o sistema linear:

𝑥1 − 3𝑥2 + 2𝑥3 = 11
−2𝑥1 + 8𝑥2 − 𝑥3 = −15
4𝑥1 − 6𝑥2 + 5𝑥3 = 29
a) Inicialmente, monta-se as matrizes relacionadas ao sistema 𝐴 ∙ 𝑋 = 𝐵:

1 −3 2 𝑥1 11
𝐴 = −2 8 −1 , 𝑋 = 𝑥2 𝑒 𝐵 = −15
4 −6 5 𝑥3 29

b) Construção das matrizes triangulares 𝐿 e 𝑈, a partir de 𝐴.

1 0 0 𝑢11 𝑢12 𝑢13


𝐿 = 𝑙21 1 0 e𝑈= 0 𝑢22 𝑢23
𝑙31 𝑙32 1 0 0 𝑢33
Método da Decomposição LU – Exemplo 1
Passo 1: determinar a primeira coluna de 𝐿 e a primeira linha de 𝑈.
𝟏 −3 2
𝐴 = −𝟐 8 −1
𝟒 −6 5
Pivô da primeira coluna: 𝑎11 = 1. Zerar elementos da primeira coluna abaixo da diagonal
principal. Para isso, determina-se os multiplicadores de cada linha do pivô e se procede com o
método de Gauss para zerar os elementos abaixo do pivô:
−2
𝑙21 = 𝑚21 = = −2 ⟶ 𝐿’2 = 𝐿2 − 𝑚21 𝐿1
1
4
𝑙31 = 𝑚31 = = 4 ⟶ 𝐿’3 = 𝐿3 − 𝑚31 𝐿1
1

1 −3 2 1 0 0 1 −3 2
𝐴= 0 2 3 , 𝐿 = −2 1 0 e𝑈= 0 𝑢22 𝑢23
0 6 −3 4 𝑙32 1 0 0 𝑢33
Método da Decomposição LU – Exemplo 1

Passo 2: determinar a segunda coluna de 𝐿 e a segunda linha de 𝑈.


1 −3 2
𝐴= 0 𝟐 3
0 𝟔 −3

Pivô da segunda coluna: 𝑎22 = 2. Zerar elementos da segunda coluna abaixo da diagonal
principal. Para isso, determina-se os multiplicadores de cada linha do pivô e se procede com o
método de Gauss para zerar os elementos abaixo do pivô:
6
𝑙32 = 𝑚32 = = 3 ⟶ 𝐿’3 = 𝐿3 − 𝑚32 𝐿2
2

1 −3 2 1 0 0 1 −3 2
𝐴= 0 2 3 , 𝐿 = −2 1 0 e𝑈= 0 2 3
0 0 −12 4 3 1 0 0 𝑢33
Método da Decomposição LU – Exemplo 1

Passo 3: determinar a terceira coluna de 𝐿 e a terceira linha de 𝑈.


1 −3 2
𝐴= 0 2 3
0 0 −𝟏𝟐

Pivô da terceira coluna: 𝑎33 = −12. Neste caso, a linha e a coluna das matrizes 𝐿 e 𝑈,
respectivamente, já estão definidas.

1 −3 2 1 0 0 1 −3 2
𝐴= 0 2 3 , 𝐿 = −2 1 0 e𝑈= 0 2 3
0 0 −12 4 3 1 0 0 −12
1 −3 2 1 0 0 1 −3 2
𝐴 = 𝐿 ∙ 𝑈 ⇒ −2 8 −1 = −2 1 0 ∙ 0 2 3
4 −6 5 4 3 1 0 0 −12
Método da Decomposição LU – Exemplo 1
c) Calcular a solução do sistema 𝐿 ∙ 𝑌 = 𝐵:

1 0 0 𝑦1 11 𝑦1 = 11 11
−2 1 0 ∙ 𝑦2 = −15 → −2𝑦1 + 𝑦2 = −15 ⟹ 𝑌 = 7
4 3 1 𝑦3 29 4𝑦1 + 3𝑦2 + 𝑦3 = 29 −36
d) Calcular a solução do sistema 𝑈 ∙ 𝑋 = 𝑌, e por sua vez, a solução de 𝐴 ∙ 𝑋 = 𝐵:

1 −3 2 𝑥1 11 𝑥1 − 3𝑥2 + 2𝑥3 = 11 𝟐
0 2 3 ∙ 𝑥2 = 7 → 𝑥2 + 3𝑥3 = 7 ⟹ 𝑿 = −𝟏
0 0 −12 𝑥3 −36 −12𝑥3 = −36 𝟑

 A vantagem do método da decomposição 𝐿𝑈 é que se pode alterar o valor de 𝐵 e não é


necessário refazer os cálculos do método da eliminação de Gauss, pois efetua-se as
operações somente sobre as linhas da matriz 𝐴.
Método da Decomposição LU – Exemplo 2

 Resolver, pelo método da decomposição LU, o sistema linear, com duas casas decimais:

0,42𝑥1 − 0,31𝑥2 + 1,44𝑥3 = 2,30


−0,21𝑥1 + 0,65𝑥2 − 0,58𝑥3 = 0,41
0,32𝑥1 + 0,24𝑥2 + 0,97𝑥3 = 1,25
a) Inicialmente, monta-se as matrizes relacionadas ao sistema 𝐴 ∙ 𝑋 = 𝐵:

0,42 −0,31 1,44 𝑥1 2,30


𝐴 = −0,21 0,65 −0,58 , 𝑋 = 𝑥2 𝑒 𝐵 = 0,41
0,32 0,24 0,97 𝑥3 1,25
b) Construção das matrizes triangulares 𝐿 e 𝑈, a partir de 𝐴.

1 0 0 𝑢11 𝑢12 𝑢13


𝐿 = 𝑙21 1 0 e𝑈= 0 𝑢22 𝑢23
𝑙31 𝑙32 1 0 0 𝑢33
Método da Decomposição LU – Exemplo 2
Passo 1: determinar a primeira coluna de 𝐿 e a primeira linha de 𝑈.
𝟎, 𝟒𝟐 −0,31 1,44
𝐴 = −𝟎, 𝟐𝟏 0,65 −0,58
𝟎, 𝟑𝟐 0,24 0,97
Pivô da primeira coluna: 𝑎11 = 0,42. Zerar elementos da primeira coluna abaixo da diagonal
principal. Para isso, determina-se os multiplicadores de cada linha do pivô e se procede com o
método de Gauss para zerar os elementos abaixo do pivô:
−0,21
𝑙21 = 𝑚21 = = −0,5 ⟶ 𝐿’2 = 𝐿2 − 𝑚21 𝐿1
0,42
0,32
𝑙31 = 𝑚31 = = 0,762 ⟶ 𝐿’3 = 𝐿3 − 𝑚31 𝐿1
0.42

0,42 −0,31 1,44 1 0 0 0,42 −0,31 1,44


𝐴= 0 0,49 0,14 , 𝐿 = −0,5 1 0 e𝑈= 0 𝑢22 𝑢23
0 0,48 −0,13 0,76 𝑙32 1 0 0 𝑢33
Método da Decomposição LU – Exemplo 2

Passo 2: determinar a segunda coluna de 𝐿 e a segunda linha de 𝑈.


0,42 −0,31 1,44
𝐴= 0 𝟎, 𝟒𝟗 0,14
0 𝟎, 𝟒𝟖 −0,13

Pivô da segunda coluna: 𝑎22 = 0,495. Zerar elementos da segunda coluna abaixo da diagonal
principal. Para isso, determina-se os multiplicadores de cada linha do pivô e se procede com o
método de Gauss para zerar os elementos abaixo do pivô:
0,476
𝑙32 = 𝑚32 = = 0,962 ⟶ 𝐿’3 = 𝐿3 − 𝑚32 𝐿2
0,495

0,42 −0,31 1,44 1 0 0 0,42 −0,31 1,44


𝐴= 0 0,49 0,14 , 𝐿 = −0,5 1 0 e𝑈= 0 0,49 0,14
0 0 −0,26 0,76 0,96 1 0 0 𝑢33
Método da Decomposição LU – Exemplo 2

Passo 3: determinar a terceira coluna de 𝐿 e a terceira linha de 𝑈.


0,42 −0,31 1,44
𝐴= 0 0,49 0,14
0 0 −𝟎, 𝟐𝟔

Pivô da terceira coluna: 𝑎33 = −0,262. Neste caso, a linha e a coluna das matrizes 𝐿 e 𝑈,
respectivamente, já estão definidas.

0,42 −0,31 1,44 1 0 0 0,42 −0,31 1,44


𝐴= 0 0,49 0,14 , 𝐿 = −0,5 1 0 e𝑈= 0 0,49 0,14
0 0 −0,26 0,76 0,96 1 0 0 −0,26
0,42 −0,31 1,44 1 0 0 0,42 −0,31 1,44
⇒ −0,21 0,65 −0,58 = −0,5 1 0 ∙ 0 0,49 0,14
0,32 0,24 0,97 0,76 0,96 1 0 0 −0,26
Método da Decomposição LU – Exemplo 2
c) Calcular a solução do sistema 𝐿 ∙ 𝑌 = 𝐵:

1 0 0 𝑦1 2,30 𝑦1 = 2,3 2,3


−0,5 1 0 ∙ 𝑦2 = 0,41 → −0,5𝑦1 + 𝑦2 = 0,41 ⟹ 𝑌 = 1,56
0,76 0,96 1 𝑦3 1,25 0,76𝑦1 + 0,96𝑦2 + 𝑦3 = 1,25 −2,003

d) Calcular a solução do sistema 𝑈 ∙ 𝑋 = 𝑌, e por sua vez, a solução de 𝐴 ∙ 𝑋 = 𝐵:

0,42 −0,31 1,44 𝑥1 2,3 0,42𝑥1 − 0,31𝑥2 + 1,44𝑥3 = 2,3


0 0,49 0,14 ∙ 𝑥2 = 1,56 → 0,49𝑥2 + 0,14𝑥3 = 1,56
0 0 −0,26 𝑥3 −2,003 −0,26𝑥3 = −2,003

−𝟐𝟎, 𝟎𝟐𝟓
⟹ 𝑿 = 𝟎, 𝟗𝟖𝟖
𝟕, 𝟔𝟓𝟏
Decomposição LU – Código em Matlab
Decomposição LU – Código em C
#define MAX 30 // ordem máxima do sistema

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

/* Programa de Resolução de Sistemas de Equações Lineares


usando Decomposição LU */
int N;
float x[MAX]; // vetor de incógnitas/soluções
float y[MAX]; // vetor de incógnitas/soluções parcial
float b[MAX]; // vetor de termos independentes
float a[MAX][MAX]; // matriz de coeficientes
float l[MAX][MAX]; // matriz lower
float u[MAX][MAX]; // matriz upper
float termo;

/* Método que mostra na tela o estado atual das matrizes A, L e U */


void Show() {
int i, j;
Decomposição LU – Código em C
printf("Matriz A:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("\t%10.2f", a[i][j]);
printf("\n");
}
printf("\nMatriz L:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
if (l[i][j] == -100000) printf("\t l%d,%d",i+1,j+1);
else printf("\t%10.2f", l[i][j]);
printf("\n");
}
printf("\nMatriz U:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
if (u[i][j] == -100000) printf("\t u%d,%d",i+1,j+1);
else printf("\t%10.2f", u[i][j]);
printf("\n");
}
printf("\nAperte <ENTER> para continuar "); getchar();
}
Decomposição LU – Código em C

/* Método que realiza a leitura das matrizes A e B


e inicializa as matrizes L e U */

void PreencheMatrizes() {
int i, j;
printf("Entre com a ordem do sistema: n = ");
scanf("%d", &N);
printf("Informe a matriz expandida do sistema linear - ");
printf("\nDigite os valores separados por espaços:\n");
for (i = 0; i < N; i++) {
printf("Linha %d: ", i + 1);
for (j = 0; j < N; j++) {
scanf("%f", &(a[i][j]));
}
scanf("%f", &(b[i]));
}

Decomposição LU – Código em C
// Preenchimento das matrizes L e U
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (i > j) {
u[i][j] = 0;
l[i][j] = -100000;
}
else if (i == j) {
l[i][j] = 1;
u[i][j] = -100000;
}
else {
l[i][j] = 0;
u[i][j] = -100000;
}
}

}
printf("\nMatrizes Preenchidas\n");
Show(); //mostra as matrizes
}
Decomposição LU – Código em C
// Faz a Decomposicao das Matrizes L e U
void Decomposicao() {
int i, j, k;
int cont = 1;
for (k = 0; k <= N - 1; k++) {
printf("Iteração %d:\n", cont);
for (i = N - 1; i >= k; i--) {
if (i > k){
termo = a[i][k] / a[k][k];
l[i][k] = termo;
for (j = 0; j < N; j++) {
a[i][j] = a[i][j] - a[k][j] * termo;
}
}
u[k][i] = a[k][i];
}
cont++;
Show();
}
}
Decomposição LU – Código em C
/* Calcula a Matriz das Soluções Intermediárias */
void Solucaoy() {
int k, j;
float s;
for (k = 0; k < N; k++) {
s = 0;
for (j = k-1; j >= 0; j--) {
s = s + l[k][j] * y[j];
}
y[k] = (b[k] - s) / l[k][k];
}
}
/* Mostra o Resultado da Matriz de Soluções Intemediárias*/
void Imprimey() {
int i;
printf("\nSolução do Sistema Intermediário\n");
for (i = 0; i < N; i++) {
printf(”y(%d)= %.3f\n", i + 1, y[i]);
}
printf("\n");
}
Decomposição LU – Código em C
/* Calcula a Matriz das Soluções do Sistema */
void Solucaox() {
int k, j;
float s;
for (k = N - 1; k >= 0; k--) {
s = 0;
for (j = k + 1; j < N; j++) {
s = s + u[k][j] * x[j];
}
x[k] = (y[k] - s) / u[k][k];
}
}
/* Mostra o Resultado da Matriz de Soluções */
void Imprimex() {
int i;
printf("\nSolução do Sistema Linear\n");
for (i = 0; i < N; i++) {
printf("x(%d)= %.3f\n", i + 1, x[i]);
}
printf("\nProblema Encerrado.\n");
}
Decomposição LU – Código em C

int main(int argc, char** argv) {


PreencheMatrizes();
getchar();
printf("\nProcesso de Decomposição LU.\n");
Decomposicao();
Solucaoy();
Imprimey();
Solucaox();
Imprimex();
return (EXIT_SUCCESS);
}
Decomposição LU – Código em Python
Matriz Inversa e Decomposição LU

 Se 𝐴 é uma matriz quadrada, tal que det(𝐴) ≠ 0, então existe uma matriz 𝐴−1 , com a
mesma ordem de 𝐴, chamada inversa de 𝐴, tal que:

𝐴 ∙ 𝐴−1 = 𝐴−1 ∙ 𝐴 = 𝐼
 Uma das melhores formas de determinar a inversa de uma matriz numericamente é através
da decomposição LU.
 Tal método fornece uma forma eficaz de determinar a solução de um sistema 𝐴 ∙ 𝑋 = 𝐵,
para diversos valores do vetor 𝐵.
 O problema consiste em, dada uma matriz quadrada 𝐴 de ordem 𝑛, se quer determinar 𝐴−1 ,
tal que:
𝐴 ∙ 𝐴−1 = 𝐼
Matriz Inversa e Decomposição LU

 Assim, temos:
𝑎11 𝑎12 𝑎13 ⋯ 𝑎1𝑛 𝑥11 𝑥12 𝑥13
⋯ 𝑥1𝑛 1 0 0 ⋯ 0
𝑎21 𝑎22 𝑎23 ⋯ 𝑎2𝑛 𝑥21 𝑥22 𝑥23
⋯ 𝑥2𝑛 0 1 0 ⋯ 0
𝑎31 𝑎32 𝑎33 ⋯ 𝑎3𝑛 ∙ 𝑥31 𝑥32 𝑥33
⋯ 𝑥3𝑛 = 0 0 1 ⋯ 0
⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱ ⋮
𝑎𝑛1 𝑎𝑛2 𝑎𝑛3 ⋯ 𝑎𝑛𝑛 𝑥𝑛1 𝑥𝑛2 𝑥𝑛3
⋯ 𝑥𝑛𝑛 0 0 0 ⋯ 1
 Pode-se determinar a inversa de 𝐴 com o auxílio da decomposição LU, resolvendo sistemas
do tipo: 𝐴 ∙ 𝑋𝑗 = 𝐼𝑗 , para 𝑗 = 1, 2, … , 𝑛. Onde:
𝑥1𝑗
𝑥2𝑗
𝑥𝑗 = 𝑥3𝑗

𝑥𝑛𝑗
É a 𝑗-ésima coluna de 𝐴−1 , e
Matriz Inversa e Decomposição LU

0

0
𝐼𝑗 = 𝑎𝑗𝑗 = 1
0

0
É a 𝑗-ésima coluna de 𝐼. Com a decomposição, obtém-se sistemas do tipo:
𝐴 ∙ 𝑋𝑗 = 𝐿 ∙ 𝑈 ∙ 𝑋𝑗 = 𝐼𝑗 , para 𝑗 = 1, 2, … , 𝑛.
Gerando os sistemas:
𝑈 ∙ 𝑋𝑗 = 𝑌𝑗 e 𝐿 ∙ 𝑌𝑗 = 𝐼𝑗
 Como a matriz 𝐴 é comum em todos os sistemas, com uma única aplicação da eliminação
de Gauss, se consegue determinar os 𝑛 vetores 𝑥𝑗 que formam a matriz inversa.
Matriz Inversa - Exemplo

 Determinar, pelo método da decomposição LU, a inversa da matriz:


1 0 0
𝐴= 1 3 1
1 2 0

a) Determinar as matrizes triangulares 𝐿 e 𝑈, a partir de 𝐴.

1 0 0 𝑢11 𝑢12 𝑢13


𝐿 = 𝑙21 1 0 e𝑈= 0 𝑢22 𝑢23
𝑙31 𝑙32 1 0 0 𝑢33
Matriz Inversa - Exemplo
Passo 1: determinar a primeira coluna de 𝐿 e a primeira linha de 𝑈.
𝟏 0 0
𝐴= 𝟏 3 1
𝟏 2 0

Pivô da primeira coluna: 𝑎11 = 1. Zerar elementos da primeira coluna abaixo da diagonal
principal. Para isso, determina-se os multiplicadores de cada linha do pivô e se procede com o
método de Gauss para zerar os elementos abaixo do pivô:
1
𝑙21 = 𝑚21 = = 1 ⟶ 𝐿’2 = 𝐿2 − 𝑚21 𝐿1
1
1
𝑙31 = 𝑚31 = = 1 ⟶ 𝐿’3 = 𝐿3 − 𝑚31 𝐿1
1

1 0 0 1 0 0 1 0 0
𝐴= 0 3 1 ,𝐿= 1 1 0 e 𝑈 = 0 𝑢22 𝑢23
0 2 0 1 𝑙32 1 0 0 𝑢33
Matriz Inversa - Exemplo

Passo 2: determinar a segunda coluna de 𝐿 e a terceira linha de 𝑈.


1 0 0
𝐴= 0 𝟑 1
0 𝟐 0

Pivô da segunda coluna: 𝑎22 = 3. Zerar elementos da segunda coluna abaixo da diagonal
principal. Para isso, determina-se os multiplicadores de cada linha do pivô e se procede com o
método de Gauss para zerar os elementos abaixo do pivô:
2
𝑙32 = 𝑚32 = ⟶ 𝐿’3 = 𝐿3 − 𝑚31 𝐿1
3

1 0 0 1 0 0 1 0 0
𝐴= 0 3 1 ,𝐿= 1 1 0 e𝑈= 0 3 1
0 0 −2/3 1 2/3 1 0 0 𝑢33
Matriz Inversa - Exemplo

Passo 3: determinar a terceira coluna de 𝐿 e a terceira linha de 𝑈.


1 0 0
𝐴= 0 3 1
0 0 −𝟐/𝟑

Pivô da terceira coluna: 𝑎33 = −2/3. Neste caso, a linha e a coluna das matrizes 𝐿 e 𝑈,
respectivamente, já estão definidas:

1 0 0 1 0 0 1 0 0
𝐴= 0 3 1 ,𝐿= 1 1 0 e𝑈= 0 3 1
0 0 −2/3 1 2/3 1 0 0 −2/3
Matriz Inversa - Exemplo
b) Calcular a solução dos sistema 𝐿 ∙ 𝑌𝑗 = 𝐼𝑗 e 𝑌𝑗 = 𝑈 ∙ 𝑋𝑗

b.1) Para a coluna 𝑗 = 1:

1 0 0 𝑦11 1 𝑦11 = 1 1
𝐿 ∙ 𝑌1 = 𝐼1 ⟹ 1 1 0 ∙ 𝑦21 = 0 → 𝑦11 + 𝑦21 = 0 ⟹ 𝑌1 = −1
1 2/3 1 𝑦31 0 𝑦11 + 2 3 𝑦21 + 𝑦31 = 0 −1/3

1 0 0 𝑥11 1 𝑥11 = 1
𝑈 ∙ 𝑋1 = 𝑌1 ⟹ 0 3 1 ∙ 𝑥21 = −1 → 3𝑥21 + 𝑥31 = −1
0 0 −2/3 𝑥31 −1/3 − 2 3 𝑥31 = − 1 3

1
⟹ 𝑋1 = −1/2
1/2
Matriz Inversa - Exemplo

b.2) Para a coluna 𝑗 = 2:

1 0 0 𝑦12 0 𝑦12 = 0 0
𝐿 ∙ 𝑌2 = 𝐼2 ⟹ 1 1 0 ∙ 𝑦22 = 1 → 𝑦12 + 𝑦22 = 1 ⟹ 𝑌2 = 1
1 2/3 1 𝑦32 0 𝑦12 + 2 3 𝑦22 + 𝑦32 = 0 −2/3

1 0 0 𝑥12 0 𝑥12 = 0
𝑈 ∙ 𝑋2 = 𝑌2 ⟹ 0 3 1 ∙ 𝑥22 = 1 → 3𝑥22 + 𝑥32 = 1
0 0 −2/3 𝑥32 −2/3 − 2 3 𝑥32 = − 2 3

0
⟹ 𝑋2 = 0
1
Matriz Inversa - Exemplo
b.3) Para a coluna 𝑗 = 3:

1 0 0 𝑦13 0 𝑦13 = 0 0
𝐿 ∙ 𝑌3 = 𝐼3 ⟹ 1 1 0 ∙ 𝑦23 = 0 → 𝑦13 + 𝑦23 = 0 ⟹ 𝑌3 = 0
1 2/3 1 𝑦33 1 𝑦13 + 2 3 𝑦23 + 𝑦33 = 1 1

1 0 0 𝑥13 0 𝑥13 = 0
𝑈 ∙ 𝑋3 = 𝑌3 ⟹ 0 3 1 ∙ 𝑥23 = 0 → 3𝑥23 + 𝑥33 = 0
0 0 −2/3 𝑥33 1 − 2 3 𝑥33 = 1

0
⟹ 𝑋3 = 1/2
−3/2
c) Montar a matriz inversa 𝐴−1 :

1 0 0
𝐴−1 = 𝑋1 𝑋2 𝑋3 = −1/2 0 1/2
1/2 1 −3/2
Matriz Inversa – Exemplo (Pela Definição )
1 0 0
Determinar a inversa da matriz 𝐴 = 1 3 1
1 2 0
Solução:
𝐴𝐴−1 = 𝐼, definição de matriz inversa

1 0 0 𝑎 𝑏 𝑐 1 0 0
1 3 1 𝑑 𝑒 𝑓 = 0 1 0
1 2 0 𝑔 ℎ 𝑖 0 0 1
𝐹𝑎𝑧𝑒𝑟 …
Decomposição LU – Código em Matlab
Decomposição LU – Código em C
#define MAX 30 // ordem máxima do sistema

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

/* Programa de Cealculo de Matriz Inversa


usando Decomposição LU */
int N;
float x[MAX]; // vetor de incógnitas/soluções
float y[MAX]; // vetor de incógnitas/soluções parcial
float a[MAX][MAX]; // matriz de coeficientes
float id[MAX][MAX]; // matriz identidade
float inv[MAX][MAX]; // matriz inversa
float l[MAX][MAX]; // matriz lower
float u[MAX][MAX]; // matriz upper
float termo;

/* Método que mostra na tela o estado atual das matrizes A, L e U */


void Show() {
int i, j;
Decomposição LU – Código em C
printf("Matriz A:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("\t%10.2f", a[i][j]);
printf("\n");
}
printf("\nMatriz L:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
if (l[i][j] == -100000) printf("\t l%d,%d",i+1,j+1);
else printf("\t%10.2f", l[i][j]);
printf("\n");
}
printf("\nMatriz U:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
if (u[i][j] == -100000) printf("\t u%d,%d",i+1,j+1);
else printf("\t%10.2f", u[i][j]);
printf("\n");
}
printf("\nAperte <ENTER> para continuar "); getchar();
}
Decomposição LU – Código em C
/* Método que realiza a leitura da matriz A, cria a matriz
identidade e inicializa as matrizes L e U */

void PreencheMatrizes() {
int i, j;
printf("Entre com a ordem da matriz: n = ");
scanf("%d", &N);
printf("Informe a matriz a ser calculada sua inversa ");
printf("\nDigite os valores separados por espaços:\n");
for (i = 0; i < N; i++) {
printf("Linha %d: ", i + 1);
for (j = 0; j < N; j++) {
scanf("%f", &(a[i][j]));
}
}
//Preenchimento da Matriz Identidade
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
if (i==j) id[i][j]=1;
else id[i][j]=0;
}
Decomposição LU – Código em C
// Preenchimento das matrizes L e U
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (i > j) {
u[i][j] = 0;
l[i][j] = -100000;
}
else if (i == j) {
l[i][j] = 1;
u[i][j] = -100000;
}
else {
l[i][j] = 0;
u[i][j] = -100000;
}
}

}
printf("\nMatrizes Preenchidas\n");
Show(); //mostra as matrizes
}
Decomposição LU – Código em C
// Faz a Decomposicao das Matrizes L e U
void Decomposicao() {
int i, j, k;
for (k = 0; k <= N - 1; k++) {
for (i = N - 1; i >= k; i--) {
if (i > k){
termo = a[i][k] / a[k][k];
l[i][k] = termo;
for (j = 0; j < N; j++) {
a[i][j] = a[i][j] - a[k][j] * termo;
}
}
u[k][i] = a[k][i];
}
}
printf("\nDecomposição Realizada\n");
Show();
}
Decomposição LU – Código em C
/* Calcula a Matriz das Soluções Intermediárias */
void Solucaoy(int m) {
int k, j;
float s;
for (k = 0; k < N; k++) {
s = 0;
for (j = k-1; j >= 0; j--) {
s = s + l[k][j] * y[j];
}
y[k] = (id[k][m] - s) / l[k][k];
}
}
/* Mostra o Resultado da Matriz de Soluções Intemediárias*/
void Imprimey() {
int i;
printf("\nSolução do Sistema Intermediário\n");
for (i = 0; i < N; i++) {
printf(”y(%d)= %.3f\n", i + 1, y[i]);
}
printf("\n");
}
Decomposição LU – Código em C
/* Calcula a Matriz das Soluções do Sistema */
void Solucaox(int m) {
int k, j, i; float s;
for (k = N - 1; k >= 0; k--) {
s = 0;
for (j = k + 1; j < N; j++) {
s = s + u[k][j] * x[j];
}
x[k] = (y[k] - s) / u[k][k];
}
for (i = 0; i < N; i++) {
inv[i][m] = x[i];
}
}
/* Mostra o Resultado da Matriz de Soluções */
void Imprimex() {
int i; printf("\nSolução do Sistema Linear\n");
for (i = 0; i < N; i++) {
printf("x(%d)= %.3f\n", i + 1, x[i]);
}
printf("\nProblema Encerrado.\n");
}
Decomposição LU – Código em C
void ImprimeInversa() {
int i, j; printf("Matriz Inversa:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("\t%10.2f", inv[i][j]);
printf("\n");
}
}

int main(int argc, char** argv) {


PreencheMatrizes();
getchar();
printf("\nProcesso de Decomposição LU\n");
Decomposicao();
for (int i = 0; i < N; i++) {
printf("\nSolução do sistema para a coluna %d\n", i+1);
Solucaoy(i); Imprimey();
Solucaox(i);Imprimex();
printf("\nAperte <ENTER> para continuar "); getchar();
}
ImprimeInversa(); return (EXIT_SUCCESS);
}
Decomposição LU – Código em Python
Exercícios

1. Resolver, pelo método da decomposição LU, o sistema linear, com três casas decimais:

0,448𝑥1 + 0,832𝑥2 + 0,193𝑥3 = 1


0,421𝑥1 + 0,784𝑥2 − 0,207𝑥3 = 0
0,412𝑥1 − 0,784𝑥2 + 0,279𝑥3 = −1
2. Resolver o sistema linear pelo método da decomposição LU:

4𝑥1 − 2𝑥2 − 3𝑥3 + 6𝑥4 = 12


−6𝑥1 + 7𝑥2 + 6,5𝑥3 − 6𝑥4 = −6,5
𝑥1 + 7,5𝑥2 + 6,25𝑥3 + 5,5𝑥4 = 16
−12𝑥1 + 22𝑥2 + 15,5𝑥3 − 𝑥4 = 17
Exercícios

3. Determine a inversa da matriz 𝐴 usando o método da decomposição LU:

0,2 −5 3 0,4 0
−0,5 1 7 −2 0,3
𝐴= 0,6 2 −4 3 0,1
3 0,8 2 −0,4 3
0,5 3 2 0,4 1
Exercícios

−1,410
1. 𝑋 = 1,398
2,427

2
4
2. 𝑋 =
−3
0,5

−0,7079 2,5314 2,4312 0,9666 3,9023


−0,1934 0,3101 0,2795 0,0577 0,2941
3. 𝐴−1 = 0,0217 0,3655 0,2861 0,0506 −0,2899
0,2734 −0,1299 0,1316 −0,1410 0,4489
0,7815 −2,8751 −2,6789 0,7011 4,2338

Você também pode gostar