Sistemas Lineares

Documentação das funções do módulo codigos.sistemaslineares para montagem e resolução de sistemas lineares (Eliminação de Gauss, Pivotamento, Decomposição LU, forward/backward solves e cálculo de residuo).

Documentação

As funções listadas abaixo implementam métodos clássicos para resolver sistemas lineares e utilitários de inspeção/depuração. Estão escritas para aceitar e retornar objetos do tipo numpy.ndarray.

codigos.sistemaslineares.montar_sistema_valores()[código-fonte]

Lê interativamente os coeficientes de um sistema linear quadrado.

Solicita ao usuário o número de variáveis n, em seguida lê n linhas com n coeficientes cada e um vetor b com n termos. Faz validações simples de comprimento e converte para numpy.ndarray.

Retorna:

  • A (np.ndarray) – Matriz dos coeficientes (n x n).

  • b (np.ndarray) – Vetor dos termos independentes (n,).

  • vars (list) – Lista de nomes das variáveis (ex.: [‘x1’,’x2’, …]).

Notas

  • Em ambientes não interativos (por exemplo, testes), se houver um EOF na leitura, a função retorna None para indicar que a leitura não foi completada, evitando a interrupção do programa.

Levanta:

ValueError – Se o número de elementos fornecidos por linha não corresponder a n.

codigos.sistemaslineares.eliminacao_gauss_sem_pivotamento(A, b, verbose=False)[código-fonte]

Executa a eliminação de Gauss sem pivotamento parcial.

Triangulariza a matriz A e aplica substituição regressiva para obter a solução x. Esta versão não realiza trocas de linha, por isso pode falhar para matrizes que exigem pivotamento.

Parâmetros:
  • A (array_like, shape (n, n)) – Matriz dos coeficientes do sistema linear.

  • b (array_like, shape (n,)) – Vetor dos termos independentes.

  • verbose (bool, optional) – Se True, imprime os passos da eliminação; se False, executa silenciosamente (default: False).

Retorna:

(x, A_triangular, b_modificado, erro_flag) onde x é o vetor solução (ou None em caso de falha), A_triangular é a matriz A após eliminação e b_modificado o vetor b modificado. erro_flag é False em execução bem-sucedida ou True em caso de erro.

Tipo de retorno:

tuple

codigos.sistemaslineares.eliminacao_gauss_com_pivotamento(A, b, verbose=False)[código-fonte]

Executa a eliminação de Gauss com pivotamento parcial.

Triangulariza a matriz A com trocas de linha para escolher o melhor pivô, e aplica substituição regressiva para obter a solução x.

Parâmetros:
  • A (array_like, shape (n, n)) – Matriz dos coeficientes do sistema linear.

  • b (array_like, shape (n,)) – Vetor dos termos independentes.

  • verbose (bool, optional) – Se True, imprime os passos da eliminação; se False, executa silenciosamente (default: False).

Retorna:

(x, A_triangular, b_modificado, erro_flag) onde x é o vetor solução (ou None em caso de falha), A_triangular é a matriz A após eliminação e b_modificado o vetor b modificado. erro_flag é False em execução bem-sucedida ou True em caso de erro.

Tipo de retorno:

tuple

codigos.sistemaslineares.lu_sem_pivot(A, b, verbose=False)[código-fonte]

Decomposição LU sem pivotamento.

Calcula matrizes L (inferior) e U (superior) tais que A = L @ U quando possível. Não realiza pivotamento; um pivô zero provoca exceção ZeroDivisionError.

Parâmetros:
  • A (array_like, shape (n, n)) – Matriz a ser decomposta.

  • b (array_like) – (opcional) vetor usado apenas para exibição durante passos (pode ser None quando não for necessário).

  • verbose (bool, optional) – Se True, imprime os passos da decomposição; se False, executa silenciosamente (default: False).

Retorna:

L, U – Matrizes inferior e superior da decomposição LU.

Tipo de retorno:

np.ndarray

codigos.sistemaslineares.lu_com_pivot(A, b, verbose=False)[código-fonte]

Decomposição LU com pivotamento parcial.

Retorna a tripla P, L, U tal que P @ A = L @ U.

Parâmetros:
  • A (array_like, shape (n, n)) – Matriz a ser decomposta.

  • b (array_like) – (opcional) vetor usado apenas para exibição durante passos.

  • verbose (bool, optional) – Se True, imprime os passos da decomposição; se False, executa silenciosamente (default: False).

Retorna:

P, L, UP matriz de permutação, L inferior, U superior.

Tipo de retorno:

np.ndarray

codigos.sistemaslineares.forward_solve(L, b)[código-fonte]

Resolve o sistema triangular inferior L y = b por substituição progressiva.

Parâmetros:
  • L (array_like, shape (n, n)) – Matriz triangular inferior (diagonal não-nula esperada).

  • b (array_like, shape (n,)) – Vetor de termos independentes.

Retorna:

y – Solução do sistema triangular inferior.

Tipo de retorno:

np.ndarray

codigos.sistemaslineares.backward_solve(U, y)[código-fonte]

Resolve o sistema triangular superior U x = y por substituição regressiva.

Parâmetros:
  • U (array_like, shape (n, n)) – Matriz triangular superior.

  • y (array_like, shape (n,)) – Vetor do lado direito (resultado da forward_solve).

Retorna:

x – Solução do sistema triangular superior.

Tipo de retorno:

np.ndarray

codigos.sistemaslineares.calcular_residuo(A, x, b)[código-fonte]

Calcula o resíduo r = b - A x.

Parâmetros:
  • A (array_like) – Matriz dos coeficientes.

  • x (array_like) – Solução candidata do sistema.

  • b (array_like) – Vetor do lado direito.

Retorna:

r – Vetor resíduo (b - A x).

Tipo de retorno:

np.ndarray

codigos.sistemaslineares.exibir_residuo_detalhado(A, x, b)[código-fonte]

Exibe detalhadamente as matrizes A, x, b e o resíduo r = b - A x.

Útil para depuração e apresentação passo a passo da solução do sistema.

Exemplo de Uso

 1"""Exemplo: resolver sistema linear via LU e verificações."""
 2
 3import numpy as np
 4from codigos import sistemaslineares as sl
 5
 6
 7if __name__ == '__main__':
 8    A = np.array([[4.0, 3.0], [6.0, 3.0]])
 9    b = np.array([10.0, 12.0])
10    P, L, U = sl.lu_com_pivot(A, np.zeros(2))
11    b_mod = P @ b
12    y = sl.forward_solve(L, b_mod)
13    x = sl.backward_solve(U, y)
14    print("Solução encontrada:", x)
15    print("Resíduo:", sl.calcular_residuo(A, x, b))

Testes de Integração

Coberto pelos seguintes testes:

  • Teste global: pytest -q (roda todos os testes do projeto)

  • Teste de calcnum: pytest tests/test_inputs_calcnum.py::test_calcnum_inputs_basic -q (valida integração via menu principal)

  • Teste individual: pytest tests/test_sistemaslineares.py -v (testes específicos do módulo)

Teste correspondente: tests/inputs/inputSistemas.txt

Testes Unitários (visíveis)

Testes: test_sistemaslineares