Resolución de sistemas de ecuaciones lineales por descomposión QR usando Numpy

Posted on jue 21 febrero 2013 in Tutorial Python • 1 min read

En Diciembre se publicó un artículo donde se explica como resolver sistemas de ecuaciones.

Este artículo se basa de un artículo en Inglés QR descomposition with numpy .

Si se desea averiguar más sobre la descomposición QR se puede consultar a la página de wikipedia ó de la siguiente página.

Las ecuaciones que se usaron son:

3x+9y-10z  =   24
x-6y+4z      =   -4
10x-2y+8z  =  20

Donde Ax = b.

A = [[3 9 -10][1 -6 4][10 -2 8]] y
B  = [[24][-4[[20]]

El código se muestra a continuación:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from numpy import *


#Se define los valores de la matriz A
A = array([[3,9,-10],[1,-6,4],[10,-2,8]])

Q,R = linalg.qr(A) # qr decomposition of A

#Se definen los valores de la matriz B
b = array([[24],[-4],[20]])


#resolver Ax=b usando la funcion estandar numpy
x = linalg.solve(A,b)


#resolver Ax = b usando Q y R.
y = dot(Q.T,b)
xQR = linalg.solve(R,y) 

print "\nComparacion de Soluciones:"
print x.T,'Ax=b'
print xQR.T,'Rx=y'

Al ejecutar el script se tiene lo siguiente:

python qr.py 

Comparacion de Soluciones:

[[ 2.99029126  0.40776699 -1.13592233]] Ax=b

[[ 2.99029126  0.40776699 -1.13592233]] Rx=y

Como se puede ver, la solución usando la función estándar de numpy y por la descomposición QR generan el mismo resultado.

¡Haz tu donativo! Si te gustó el artículo puedes realizar un donativo con Bitcoin (BTC) usando la billetera digital de tu preferencia a la siguiente dirección: 17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV

O Escaneando el código QR desde la billetera:

17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV