# Ejemplos de solución de sistemas lineales

import numpy as np

A = np.matrix([[4, 3, 0], [3, 4, 1], [0, -1, 4]])
b = np.matrix([[24], [20], [-24]])
if np.linalg.det(A) == 0:
    x = None
    print("No se puede resolver")
else:
    x = (A**-1) * b
    print(x)
    print(np.dot(A, x))
    print((np.dot(A, x) == b).all())


import numpy as np

A = np.matrix([[4, 3, 0], [3, 4, 1], [0, -1, 4]])
b = np.matrix([[24], [20], [-24]])
# Solucion [[3], [4], [-5]]

if np.linalg.det(A) == 0:
    x = None
    print("No se puede resolver")
else:
    x = (A**-1) * b
    print(x)


import numpy as np

A = np.array([[4, 3, 0], [3, 4, 1], [0, -1, 4]])
b = np.array([[24], [20], [-24]])
x = np.linalg.solve(A, b)
print(x)


import numpy as np

A = np.array([[4, 3, 0], [3, 4, 1], [0, -1, 4]])
b = np.array([[24], [20], [-24]])
x = np.linalg.inv(A).dot(b)
print(x)


import numpy as np

A = np.array([[4, 3, 0], [3, 4, 1], [0, -1, 4]])
b = np.array([[24], [20], [-24]])
x = np.linalg.pinv(A).dot(b)
print(x)


import numpy as np

A = np.array([[4, 3, 0], [3, 4, 1], [0, -1, 4]])
b = np.array([[24], [20], [-24]])
x = np.linalg.solve(A, b)

# qr descomposicion de A
Q, R = np.linalg.qr(A)
# Resolver Ax = b usando Q y R
y = np.dot(Q.T, b)
xQR = np.linalg.solve(R, y)

print("\nSolucion comparada")
print(x.T, "Ax=b")
print(xQR.T, "Rx=y")


from sympy import symbols, Matrix, linsolve

x, y, z = symbols("x, y, z")
A = Matrix([[4, 3, 0], [3, 4, 1], [0, -1, 4]])
b = Matrix([[24], [20], [-24]])
xx = linsolve((A, b), [x, y, z])
print(xx)
