Visualizações de página dos últimos 30 dias

Resolvendo Sistemas Lineares de Forma Simbólica no Python


Quando tratamos de sistemas lineares, uma das abordagens mais elegantes e exatas é resolvê-los simbolicamente, ou seja, obter as soluções na forma de expressões algébricas exatas (com frações, letras e variáveis) em vez de valores decimais aproximados. Para isso, o Python conta com a poderosa biblioteca SymPy, voltada para álgebra simbólica.

✍️ O que é SymPy?

SymPy é uma biblioteca Python para matemática simbólica, capaz de manipular expressões matemáticas exatamente como fazemos no papel: com frações, raízes, variáveis, simplificações e muito mais.

🧮 Exemplo: resolvendo um sistema simbólico

Considere o sistema linear:

\[ \begin{cases} 2x + 3y - z = 4 \\ 5x - 6y + 2z = 1 \\ 7x - 3y + z = 5 \end{cases} \]

Vamos resolvê-lo com SymPy:


from sympy import symbols, Eq, solve

# Definindo as variáveis simbólicas
x, y, z = symbols('x y z')

# Definindo as equações
eq1 = Eq(2*x + 3*y - z, 4)
eq2 = Eq(5*x - 6*y + 2*z, 1)
eq3 = Eq(7*x - 3*y + z, 5)

# Resolvendo o sistema
solucao = solve((eq1, eq2, eq3), (x, y, z))

# Exibindo a solução
print(solucao)

✅ Saída esperada:


{x: 1, y: z/3 + 2/3}

Ou seja, a solução simbólica do sistema é:

\( x = 1,\quad y = \dfrac{2}{3}+\dfrac{z}{3},\quad z\text{(variável livre)} \)

A forma vetorial da solução é dada por:

\[ \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} 1 \\ \frac{2}{3} \\ 0 \end{bmatrix} + z \cdot \begin{bmatrix} 0 \\ \frac{1}{3} \\ 1 \end{bmatrix} \]

onde \( z \) é uma variável livre, e a solução representa uma reta no espaço tridimensional.

Vejamos outro exemplo...

Vamos resolver o seguinte sistema linear com três variáveis:

\[ \begin{cases} 2x - 3y + 2z = 12 \\ -5x + y - 7z = -5 \\ -11x - 3y - 17z = 9 \end{cases} \]

Nosso objetivo é encontrar as soluções possíveis para \( x \), \( y \) e \( z \).

🐍 Código Python com SymPy

A seguir, utilizamos o Python para resolver o sistema de forma simbólica:


from sympy import symbols, Eq, solve

# Definindo as variáveis simbólicas
x, y, z = symbols('x y z')

# Equações do sistema
eq1 = Eq(2*x - 3*y + 2*z, 12)
eq2 = Eq(-5*x + y - 7*z, -5)
eq3 = Eq(-11*x - 3*y - 17*z, 9)

# Resolvendo o sistema
solucao = solve((eq1, eq2, eq3), (x, y, z))

print(solucao)

✅ Resultado


{x: 3/13 - 19*z/13, y: -50/13 - 4*z/13}

Isso significa que o sistema admite infinitas soluções, expressas em função do parâmetro livre \( z \). A variável \( z \) pode assumir qualquer valor real, e as demais variáveis dependem dela:

\[ \begin{cases} x = \dfrac{3}{13} - \dfrac{19}{13}z \\ y = -\dfrac{50}{13} - \dfrac{4}{13}z \\ z = z \quad (\text{livre}) \end{cases} \]

Podemos também escrever a solução em forma vetorial:

\[ \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} \frac{3}{13} \\ -\frac{50}{13} \\ 0 \end{bmatrix} + z \cdot \begin{bmatrix} -\frac{19}{13} \\ -\frac{4}{13} \\ 1 \end{bmatrix} \]

Vamos a um exemplo de sistema impossívle

Considere o seguinte sistema linear com três variáveis \( t \), \( u \) e \( v \):

\[ \begin{cases} -8t + u - 2v = -7 \\ -5t + 3u + 7v = 2 \\ 3t + 2u + 9v = 1 \end{cases} \]

Nosso objetivo é verificar se existe uma solução que satisfaça simultaneamente as três equações.

🐍 Código Python com SymPy

A seguir, implementamos o sistema no Python e usamos a função solve() para obter a solução simbólica:


from sympy import symbols, Eq, solve

# Definindo as variáveis simbólicas
t, u, v = symbols('t u v')

# Equações do sistema
eq1 = Eq(-8*t + u - 2*v, -7)
eq2 = Eq(-5*t + 3*u + 7*v, 2)
eq3 = Eq(3*t + 2*u + 9*v, 1)

# Resolvendo o sistema
solucao = solve((eq1, eq2, eq3), (t, u, v))

print(solucao)

✅ Resultado


[]

Ou seja, o sistema não possui solução. Isso significa que ele é incompatível — também conhecido como Sistema Impossível (SI).

💡 Dica prática

Você também pode usar solve() com sistemas que dependem de parâmetros. Por exemplo:


a = symbols('a')
eq_param = Eq(x + a*y, 2)
solve((eq_param, Eq(y, 1)), (x, y))

Isso permite resolver sistemas simbolicamente em função de um parâmetro, recurso valioso em muitos contextos teóricos.

🔍 Comparando NumPy e SymPy na Resolução de Sistemas Lineares

As bibliotecas NumPy e SymPy são amplamente utilizadas em Python para resolver sistemas de equações lineares. Apesar de ambas permitirem encontrar soluções para sistemas, elas possuem fins distintos. A escolha entre elas depende do contexto: numérico ou simbólico.

🧩 Convergências

AspectoNumPy e SymPy em comum
Resolução de sistemasPermitem resolver sistemas lineares com múltiplas variáveis
Sistemas quadradosSuportam sistemas com mesmo número de equações e incógnitas
AmbienteFuncionam em Jupyter, scripts Python e ambientes educacionais
RepresentaçãoUsam matrizes e vetores para representar os sistemas

⚙️ Divergências

Característica NumPy SymPy
Tipo de cálculo Numérico (ponto flutuante) Simbólico (exato)
Variáveis Vetores e arrays Símbolos matemáticos
Precisão Aproximada Exata (frações)
Sistemas paramétricos Limitado Suportado
Performance Alta Lenta em sistemas grandes
Álgebra simbólica Não suporta Totalmente suportada
Uso de memória Eficiente Mais custoso

✅ Vantagens

🟦 NumPy

  • 🔢 Alto desempenho computacional.
  • 💻 Ideal para sistemas grandes e aplicações numéricas.
  • 🧮 Função numpy.linalg.solve() é rápida e confiável.
  • 🔁 Integração com SciPy, Pandas e Matplotlib.

🟨 SymPy

  • 🧠 Ideal para ensino e demonstrações teóricas.
  • 📐 Trabalha com frações e variáveis literais.
  • 🔎 Resolve sistemas com parâmetros (como \( a \cdot x + y = 1 \)).
  • 📝 Permite expressar soluções como vetores paramétricos.

❌ Desvantagens

NumPy

  • ⚠️ Pode introduzir erros de arredondamento.
  • ❌ Não fornece soluções simbólicas.
  • 🔒 Não resolve sistemas com parâmetros literais.

SymPy

  • 🐢 Mais lento em sistemas grandes.
  • 📉 Menos eficiente em performance computacional.
  • 💾 Consome mais memória.

📌 Exemplo de uso

NumPy (cálculo numérico):


import numpy as np
A = np.array([[2, -1], [1, 1]])
b = np.array([1, 3])
x = np.linalg.solve(A, b)
print(x)  # [1.333... 1.666...]

SymPy (resolução simbólica):


from sympy import symbols, Eq, solve
x, y = symbols('x y')
eq1 = Eq(2*x - y, 1)
eq2 = Eq(x + y, 3)
sol = solve((eq1, eq2), (x, y))
print(sol)  # {x: 4/3, y: 5/3}

🧠 Conclusão

A escolha entre NumPy e SymPy depende do propósito:

  • 📊 Para aplicações numéricas, simulações e problemas grandes: NumPy.
  • 📚 Para análises teóricas, ensino e demonstrações simbólicas: SymPy.

Ambas as bibliotecas são poderosas e complementares. Saber quando usar cada uma é fundamental para aproveitar ao máximo seus recursos.

Comentários

Mais visualizadas nos últimos 30 dias

Mais visualisadas