Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula - 03 - UVV - Métodos Diretos para Resolução de Sistemas Lineares
Aula - 03 - UVV - Métodos Diretos para Resolução de Sistemas Lineares
x³ + y - z = 0
Revisão Geral dos Conceitos de Sistemas Lineares
Um conjunto de n equações lineares com n variáveis (incógnitas) é denominado de:
Sistemas de n equações lineares; ou Sistema Linear de ordem n
Uma solução para um sistema linear consiste em determinar valores para as n
variáveis que satisfaçam todas as equações simultaneamente.
Por exemplo, o sistema de três equações lineares:
O sistema linear acima pode ser escrito na seguinte forma, chamada matricial:
Representação geral de sistemas lineares algébricos – SELA’s
De um modo geral, um sistema de equações lineares é escrito como:
ou simplesmente por Ax = b
Classificação dos sistemas lineares
Representação geométrica
de um sistema possível e
indeterminado de ordem 2.
Sistema impossível
Neste exemplo são duas equações e, neste caso, um sistema impossível,
isto é, não possui soluções comuns.
Representação geométrica de
um sistema impossível de
ordem 2.
Sistema possível e determinado - Ordem 3
Temos três equações e, neste caso, um sistema possível e determinado, isto é, possui uma
única solução comum que é o ponto
Representação geométrica de um
sistema possível e determinado de
ordem 3.
Sistema possível e indeterminado - Ordem 3
Temos três equações e, neste caso, um sistema possível e indeterminado, isto é, possui
infinitas soluções comuns que é toda uma reta.
Representação geométrica de
um sistema possível e
indeterminado de ordem 3.
Sistema impossível
Neste exemplo são três equações e, neste caso, um sistema impossível, isto é, não possui
soluções comuns.
Representação geométrica de
um sistema impossível de
ordem 3.
Objetivo dos métodos numéricos de resolução de
sistemas de equações lineares
● Métodos numéricos resolvem SELA's com solução única.
● Se o sistema não tiver uma solução única, uma modelagem matemática
adequada pode transformá-lo em um sistema possível e determinado,
como no caso de problemas de balanceamento de equações químicas.
●
|x + 2y + z = 3|
O determinante desta matriz é 0, o que
|2x + 4y + 6z = 12|
significa que a matriz é singular e o sistema
|x + 3y + 2z = 6 | de equações lineares correspondente tem
infinitas soluções.
A matriz dos coeficientes é:
Por outro lado, se a matriz dos coeficientes
fosse não singular, isso implicaria que todas
|1 2 1|
as equações do sistema são independentes
|2 4 6| entre si e, assim, o sistema teria uma única
|1 3 2| solução possível e determinada.
Objetivo dos métodos numéricos de resolução de sistemas
de equações lineares
O determinante de uma matriz quadrada é uma operação matemática que envolve seus
elementos e é usado em muitos campos da matemática, como álgebra linear, cálculo e
geometria.
O determinante de uma matriz 2x2 é dado pela seguinte fórmula:
|a b|
|c d| = ad - bc
O determinante de uma matriz 3x3 é dado pela soma dos produtos das diagonais principais
e secundárias, da seguinte forma:
|a b c|
|d e f|
|g h i| = aei + bfg + cdh - ceg - bdi - afh
Objetivo dos métodos numéricos de resolução de sistemas
de equações lineares
Para encontrar seu determinante, podemos usar a fórmula do determinante de
uma matriz 3x3:
Matematicamente, se o vetor é denotado por v = (v1, v2, ..., vn), a norma vetorial
||v|| é dada por:
A norma vetorial pode ser usada nesse contexto para normalizar cada vetor de dados. Por exemplo, se
temos um conjunto de dados representado por uma matriz X, onde cada linha é um vetor de dados,
podemos normalizar cada vetor dividindo-o pela sua norma vetorial:
import numpy as np
print(X_norm)
Norma matricial
A norma matricial é uma medida da magnitude de uma matriz. Em outras palavras, ela é um
valor que indica o tamanho da matriz.
A norma matricial é definida como o maior valor possível da multiplicação entre a matriz e
um vetor unitário.
Existem diferentes tipos de normas matriciais, mas uma das mais comuns é a norma de
Frobenius, que é definida como a raiz quadrada da soma dos quadrados de todos os
elementos da matriz.
||A||F = sqrt(sum(sum(A^2)))
Norma matricial
A norma matricial é uma medida importante em muitas áreas da matemática e da física,
porque ela permite quantificar a magnitude de uma matriz. Além disso, ela é útil para
determinar a estabilidade de um sistema linear, ou seja, a sensibilidade do sistema às
mudanças nos seus parâmetros.
Por exemplo, se temos uma matriz A de tamanho 2 x 2, podemos calcular sua norma de
Frobenius:
import numpy as np
# Exemplo de matriz
A = np.array([[1, 2],
[3, 4]])
print(norma)
Exemplo Prático
Um exemplo prático de uso da norma matricial é na avaliação da estabilidade de sistemas lineares. Por exemplo, se temos
um sistema linear representado por uma matriz A, podemos calcular a norma matricial de A para determinar se o sistema é
estável ou não. Um sistema é considerado estável se a norma matricial de A for menor que 1, e é considerado instável se a
norma matricial de A for maior que 1.
Vamos considerar um exemplo simples de um sistema linear representado por uma matriz 2x2:
import numpy as np Nesse exemplo, utilizamos a função np.linalg.norm da biblioteca NumPy para calcular a
norma matricial de A.
# Exemplo de matriz
A = np.array([[0.5, 0.7], A opção "ord=2" indica que queremos calcular a norma matricial de ordem 2, que é a norma
[0.3, 0.9]]) espectral, também conhecida como raio espectral ou maior autovalor.
Como a norma matricial de A é menor que 1, podemos concluir que o sistema representado
# Cálculo da norma matricial por A é estável.
norma = np.linalg.norm(A, ord=2)
Note que existem diferentes tipos de normas matriciais, como a norma de Frobenius e a
print(norma)
norma de máximo, e que cada uma delas pode produzir um resultado diferente. No caso da
estabilidade de sistemas lineares, a norma espectral é a mais utilizada.
Transformações básicas sobre as linhas dos SELA’s
As transformações básicas sobre as linhas dos sistemas de equações lineares (SELA)
podem ser facilmente implementadas em Python utilizando a biblioteca NumPy.
As transformações básicas são operações que podemos aplicar sobre as linhas de uma
matriz de coeficientes de um SELA sem alterar a solução do sistema.
1. Troca de linhas
O resultado da concatenação da
# Matriz de coeficientes matriz A com o vetor b é:
A = np.array([[2, 3, 1],
[1, -1, 2], [[ 2 3 1 5]
[4, 2, 3]]) [ 1 -1 2 1]
[ 4 2 3 4]]
# Vetor de termos independentes
b = np.array([5, 1, 4])
print(AB)
Transformações básicas sobre as linhas dos SELA’s
Para realizar as transformações básicas sobre as linhas, podemos utilizar as funções do NumPy.
print(AB)
[[ 1 -1 2 1]
[ 2 3 1 5]
[ 4 2 3 4]]
Transformações básicas sobre as linhas dos SELA’s
Para multiplicar a terceira linha por 2, podemos fazer:
print(AB)
print(AB)
2x + 3y - z = 5
4x + 2y + z = 4
-2x + y + 2z = 2
2. Utilize operações elementares de linha para transformar a matriz aumentada em uma matriz triangular superior.
Comece pela primeira coluna e aplique as operações necessárias para zerar os elementos abaixo do primeiro
elemento na diagonal principal.
[2 3 -1 | 5 ]
[0 -4 3 |-6 ]
[0 7 0 | 12]
Etapas na resolução dos SELA’s
3. Repita o processo para as colunas seguintes, seguindo a mesma lógica de zerar os elementos abaixo da diagonal
principal.
[2 3 -1 | 5]
[0 -4 3 | -6]
[0 0 15 | 30]
4. Agora que a matriz está na forma triangular superior, podemos resolver o sistema de equações a partir da última
equação e substituindo os valores obtidos nas equações anteriores.
z = 2
-4y + 3z = -6 => -4y + 3(2) = -6 => y = 3/2
2x + 3y - z = 5 => 2x + 3(3/2) - 2 = 5 => x = 3/2
# Resolução do sistema
x = np.zeros(n)
for i in range(n-1, -1, -1):
x[i] = (A[i,-1] - np.dot(A[i,i+1:-1],
x[i+1:])) / A[i,i]
print("Solução do sistema:", x)
Sistemas triangulares
Um sistema triangular é um sistema de equações lineares em que a matriz dos coeficientes é triangular superior ou
inferior. Resolver sistemas triangulares é um processo simples, que pode ser implementado facilmente em Python. Aqui
estão alguns exemplos:
# Solução do sistema
x = np.zeros(3)
for i in range(2, -1, -1):
x[i] = (b[i] -
np.dot(A[i,i+1:], x[i+1:])) /
A[i,i]
print("Solução do sistema:", x)
Sistemas triangulares
Sistema triangular inferior:
x + 0y + 0z = 1
Considere o seguinte sistema triangular inferior: 2x - 3y + 0z = -1
5x + 4y + z = 3
import numpy as np
Podemos resolver esse sistema facilmente usando substituição para frente: # Vetor dos termos independentes
b = np.array([1, -1, 3])
# Solução do sistema
x = np.zeros(3)
for i in range(3):
x[i] = (b[i] - np.dot(A[i,:i], x[:i])) /
A[i,i]
print("Solução do sistema:", x)
Método da fatoração ou decomposição LU
O método da fatoração ou decomposição LU é um método de resolução de sistemas
lineares que consiste em decompor a matriz dos coeficientes em um produto de duas
matrizes triangulares, L e U, de forma que:
A = LU
onde A é a matriz dos coeficientes, L é uma matriz triangular inferior e U é uma matriz
triangular superior.
O método consiste em resolver dois sistemas triangulares:
● um sistema triangular inferior com a matriz L
● outro sistema triangular superior com a matriz U
Método da fatoração ou decomposição LU
Para exemplificar como o método funciona em Python, vamos resolver o seguinte sistema linear usando o método da
decomposição LU:
2x + 3y - z = 5
3x + 2y + z = 6
import numpy as np
x - 2y + 2z = 2
A = np.array([[2, 3, -1],
Primeiro, vamos criar a matriz dos coeficientes e o vetor dos termos independentes: [3, 2, 1],
[1, -2, 2]])
b = np.array([5, 6, 2])
A matriz P é uma matriz de permutação que é usada para trocar as linhas de A durante a decomposição
LU, se necessário. Em geral, é uma matriz identidade com algumas linhas trocadas.
Agora, vamos resolver o sistema triangular inferior Lc = Pb, onde c é um vetor auxiliar:
c = np.linalg.solve(L, np.dot(P, b))
○ Essas variações podem ser tão grandes que a solução pode se tornar
completamente inútil. Em outras palavras, pequenos erros de arredondamento
na entrada do sistema podem levar a grandes erros na saída.
x = [x, y, z]
Usando o NumPy em Python, podemos resolver esse sistema de equações lineares usando a função solve e
plotar os gráficos dos resultados. import numpy as np
import matplotlib .pyplot as plt
# Resolver o sistema
x = np.linalg .solve (A, b)
# Imprimir a solução
print ('Solução do sistema:' , x)
Como podemos ver, os valores estão longe dos valores verdadeiros [1, 2, 3], o
que indica que o sistema é mal condicionado. Podemos visualizar isso plotando um
gráfico comparando os valores da solução com os valores verdadeiros.
Note que, em geral, pode ser difícil visualizar o comportamento de um sistema mal
condicionado apenas através de gráficos.
Em outras palavras, pequenas mudanças nos valores da matriz A ou do vetor b podem causar grandes
mudanças na solução x. x + y = 1
x - y = 1
Podemos representar esse sistema na forma matricial como Ax = b, onde: A = [[1, 1],
[1, -1]]
x = [x, y]
b = [1, 1]
Sistemas lineares instáveis
Usando o NumPy em Python, podemos resolver esse sistema de equações lineares usando a função solve e
plotar os gráficos dos resultados. Vamos dar um exemplo: import numpy as np
import matplotlib.pyplot as plt
# Resolver o sistema
x = np.linalg.solve(A, b)
# Imprimir a solução
print('Solução do sistema:', x)
Como podemos ver no gráfico anterior, qualquer outra linha que passa pela origem terá uma interseção com
essa linha, o que significa que pequenas mudanças nos valores da matriz ou do vetor podem levar a
grandes variações na solução.
Note que, em geral, pode ser difícil visualizar o comportamento de um sistema instável apenas através
de gráficos. Para avaliar a estabilidade de um sistema de equações lineares, é necessário analisar a
sua matriz A e determinar se ela é invertível. Caso contrário, o sistema é instável.
Número de condição
O número de condição de uma matriz é uma medida da sensibilidade da solução de um sistema
de equações lineares à mudanças nos dados de entrada (coeficientes da matriz ou termos
independentes). Em outras palavras, ele mede o quão "bem comportado" é o sistema e indica se
pequenas perturbações nos dados de entrada podem resultar em grandes variações na solução.
O número de condição é definido como o produto da norma da matriz e da norma da sua matriz
inversa. Ele é calculado da seguinte forma: cond(A) = ||A|| * ||A-1||
Número de condição
import matplotlib.pyplot as plt
O método da eliminação de Gauss é uma técnica utilizada para calcular a matriz inversa de uma matriz
quadrada A.
O processo envolve a transformação da matriz A em uma matriz identidade I por meio de operações
elementares de linha, e aplicando as mesmas operações na matriz identidade, resultando na matriz inversa
de A.
Em Python, podemos usar a biblioteca NumPy para calcular a matriz inversa de uma matriz usando o
método da eliminação de Gauss. Para isso, precisamos seguir os seguintes passos:
Cálculo da matriz inversa usando o método da eliminação de Gauss
for i in range(3):
5. Aplicar o método da eliminação de Gauss
pivot = M[i][i]
para transformar a matriz M em uma matriz
M[i] = M[i] / pivot
escada:
for j in range(3):
if i != j:
M[j] = M[j] - M[j][i] * M[i]
● Essa estrutura especial pode ser usada para otimizar cálculos matriciais, uma
vez que reduz a quantidade de operações necessárias para manipular a
matriz.
print(A)
Matriz banda
O resultado será uma matriz 5x5 com uma banda de largura 2 ao redor da diagonal principal, contendo
valores aleatórios na diagonal principal e secundária:
array([[0.655, 0.499, 0. , 0. , 0. ],
[0.976, 0.617, 0.811, 0. , 0. ],
[0. , 0.154, 0.808, 0.287, 0. ],
[0. , 0. , 0.064, 0.261, 0.841],
[0. , 0. , 0. , 0.115, 0.569]])
Podemos então usar essa matriz para realizar cálculos matriciais, como multiplicação de matriz e
resolução de sistemas lineares, aproveitando sua estrutura de banda para otimizar os cálculos.
Dúvidas?
vinicius.motta@uvv.br