import re
import numpy as np
def parse_equation(equation):
pattern = r'([+-]?\d*)\s*([a-zA-Z]?)'
lhs, rhs = equation.split('=')
rhs = int(rhs.strip())
terms = re.findall(pattern, lhs)
print(terms)
coefficients = {}
for coeff, var in terms:
if not (coeff or var):
continue
print(coeff,var,sep=',',end='!')
if coeff in {'','+'}:
coefficients[var] = 1
elif coeff == '-':
coefficients[var] = -1
else:
coefficients[var] = int(coeff)
print(coeff, coefficients[var],sep=',',end="$")
return coefficients, rhs
def convert_to_matrix(equations):
variables = set()
for eq in equations:
coefficients, _ = parse_equation(eq)
variables.update(coefficients.keys())
variables = sorted(variables)
A = []
b = []
for eq in equations:
coefficients, rhs = parse_equation(eq)
row = [coefficients.get(var, 0) for var in variables]
A.append(row)
b.append(rhs)
return np.array(A), np.array(b), variables
equations = [
"-x+y+z=12345",
"x-y+z=1234",
"x+y-z=123"
]
print("\n".join(equations))
print()
A, b, v = convert_to_matrix(equations)
print(A, b, v, s:=np.linalg.solve(A,b),sep="")
print()
for var,val in zip(v,s):
print(var,'=',val)