¿Cómo dibujar planos de un conjunto de ecuaciones lineales en Python?

Tengo un sistema lineal con tres ecuaciones:

x 1 – 2x 2 + x 3 = 0
2x 2 – 8x 3 = 8
-4x 1 + 5x 2 + 9x 3 = -9

El conjunto de soluciones es (29, 16, 3), que es un punto en la intersección de estos planos.

Esperando que alguien pueda trazar estos planos en un espacio 3D usando Matplotlib para visualizar el problema claramente.

Su tercera ecuación dice:

-4x + 5y + 9z – 9 = 0

o en general una ecuación tuya es

ax + by + cz + d = 0

Lo normal es (a, b, c)

  • Si a no es 0, un punto en el plano es (-d / a, 0, 0)
  • Si b no es 0, un punto en el plano es (0, -d / b, 0)
  • Si c no es 0, un punto en el plano es (0, 0, -d / c)

Usted conecta esto en la biblioteca de ploteo que toma un vector normal y un punto en el plano, y lo hace 3 veces (una para cada plano).

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D point1 = np.array([0,0,0]) normal1 = np.array([1,-2,1]) point2 = np.array([0,-4,0]) normal2 = np.array([0,2,-8]) point3 = np.array([0,0,1]) normal3 = np.array([-4,5,9]) # a plane is a*x+b*y+c*z+d=0 # [a,b,c] is the normal. Thus, we have to calculate # d and we're set d1 = -np.sum(point1*normal1)# dot product d2 = -np.sum(point2*normal2)# dot product d3 = -np.sum(point3*normal3)# dot product # create x,y xx, yy = np.meshgrid(range(30), range(30)) # calculate corresponding z z1 = (-normal1[0]*xx - normal1[1]*yy - d1)*1./normal1[2] z2 = (-normal2[0]*xx - normal2[1]*yy - d2)*1./normal2[2] z3 = (-normal3[0]*xx - normal3[1]*yy - d3)*1./normal3[2] # plot the surface plt3d = plt.figure().gca(projection='3d') plt3d.plot_surface(xx,yy,z1, color='blue') plt3d.plot_surface(xx,yy,z2, color='yellow') plt3d.plot_surface(xx,yy,z3, color='cyan') plt.show() 

introduzca la descripción de la imagen aquí