3.1 Solución de sistema de 3×3

Solución de un sistema de 3×3 como un punto de intersección de planos

Referencia del ejercicio: http://blog.espol.edu.ec/matg1013/1eva_iit2011_t2-sistema-de-ecuaciones/

Considere el siguiente sistema de ecuaciones:

\begin{cases} -2x+5y+9z=1\\7x+y+z=6\\-3x+7y-z=-26\end{cases}

Se pueden representar como planos en el espacio despejando la variable z para cada ecuación, de la forma:

\begin{cases} z=(1+ 2x - 5y)/(9)\\z=(6 -7x-y)/(1)\\z=(-26+3x-7y)/(-1)\end{cases}

Se visualizan los resultados de cada ecuación como los planos mostrados en la gráfica:

La intersección de los planos genera un punto cuyas coordenadas corresponden a la solución del sistema.

Para observar mejor del resultado, ejecute las intrucciones en python propuestas y rote el gráfico resultante con el cursor.


Intrucciones en python

Para generalizar el ingreso de las ecuaciones se usa la forma matricial Ax=B, usando solo los coeficientes.

# INGRESO Ax=B
A = np.array([[-2, 5, 9],
              [ 7, 1, 1],
              [-3, 7,-1]])

B = np.array([1,6,-26])

Para visualizar los planos se requiere cada ecuación como funciones(x,y), por simplicidad se usan formulas en formato lambda. Con la forma matricial se generan las ecuaciones de cada plano usando los coeficientes al despejar la variable z.

# Ecuaciones de planos
z0 = lambda x,y: (-A[0,0]*x - A[0,1]*y + B[0])/A[0,2]
z1 = lambda x,y: (-A[1,0]*x - A[1,1]*y + B[1])/A[1,2]
z2 = lambda x,y: (-A[2,0]*x - A[2,1]*y + B[2])/A[2,2]

Para evaluar las funciones se requieren muestras en cada punto del plano X,Y, semejante a las gráficas en 2D que solo requerian muestra en el eje X.

– Primero se generan las muestras para cada eje en los vectores xi, yi.

a = -5
b = 5
muestras = 21

xi = np.linspace(a,b, muestras)
yi = np.linspace(a,b, muestras)

= Las combinaciones entre las muestras de cada eje se obtienen generando las matrices Xi, Yi que representan la malla de muestras en el plano para evaluar cada punto.

Xi, Yi = np.meshgrid(xi,yi)

– Se evaluan los puntos Xi,Yi en cada ecuación, generando las matrices Zi

Z0 = z0(Xi,Yi)
Z1 = z1(Xi,Yi)
Z2 = z2(Xi,Yi)

Se grafica cada ecuación como una «malla de alambre» o wireframe, usando librerias 3D, usando Xi,Yi, Z0, luego con Z1 y Z2

El Valor de la solución se grafica como un punto usando «dispersión» o scatter.

El algoritmo completo se muestra a continuación:

# 1ra Evaluación II Término 2011
# Tema 2. Sistema de ecuaciones 3x3
# Desarrollo conceptual como interseccion de Planos

import numpy as np

# INGRESO Ax=B
A = np.array([[-2, 5, 9],
              [ 7, 1, 1],
              [-3, 7,-1]])

B = np.array([1,6,-26])

a = -5
b = 5
muestras = 21

# PROCEDIMIENTO --------
# Ecuaciones de planos
z0 = lambda x,y: (-A[0,0]*x - A[0,1]*y + B[0])/A[0,2]
z1 = lambda x,y: (-A[1,0]*x - A[1,1]*y + B[1])/A[1,2]
z2 = lambda x,y: (-A[2,0]*x - A[2,1]*y + B[2])/A[2,2]

xi = np.linspace(a,b, muestras)
yi = np.linspace(a,b, muestras)
Xi, Yi = np.meshgrid(xi,yi)

Z0 = z0(Xi,Yi)
Z1 = z1(Xi,Yi)
Z2 = z2(Xi,Yi)

# solución al sistema
punto = np.linalg.solve(A,B)

# SALIDA
print('respuesta de A.X=B : ')
print(punto)

# GRAFICA de planos
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

figura = plt.figure()
grafica = figura.add_subplot(111, projection='3d')

grafica.plot_wireframe(Xi,Yi,Z0, color ='blue',   label='Ecuación 1')
grafica.plot_wireframe(Xi,Yi,Z1, color ='green',  label='Ecuación 2')
grafica.plot_wireframe(Xi,Yi,Z2, color ='orange', label='Ecuación 3')

grafica.scatter(punto[0],punto[1],punto[2],
                color = 'red', marker='o', label ='punto')

grafica.set_title('Sistema de ecuaciones 3x3')
grafica.set_xlabel('eje x')
grafica.set_ylabel('eje y')
grafica.set_zlabel('eje z')
grafica.legend()
plt.show()