我试图学习如何使用matplotlib和numpy为我的一个班级绘制方程组。我们还没有得到很多指导,而且我对编程并不是很了解,我不能真正理解如何做到这一点,尽管我并不认为这太复杂了。基本上,我有一个像这样的方程组:
4x -2y + z =11
-2x +4y -2z = -16
x -2y + 4z = 17
如何使用matplotlib绘制每个方程式的图形?
谢谢!
编辑:说明也说使用mplot3d。 编辑:解决方案:How to draw planes from a set of linear equations in Python?
答案 0 :(得分:4)
您可以从前两个方程中消除z
以给出x=1
和前两个平面z=7+2y
的交点,然后用剩余的方程求解以给出点(1,-2,3)
。您可以使用numpy.linalg.solve
验证这一点:
In [11]: M = np.array([[4., -2., 1.], [-2., 4., -2.], [1., -2., 4.]])
In [12]: b = np.array([11., -16., 17.])
In [13]: np.linalg.solve(M, b)
Out[13]: array([ 1., -2., 3.])
在Matplotlib中,可以使用plot_surface
绘制平面,前两个(蓝色)与plot
的交点和用于第三个平面的点的标记(在绿色)与线相交。
使用alpha=0.5
使平面变得有点透明,并且因为平面重新平坦,所以不需要标记线来平铺曲面(可以将行步幅和列步幅设置为大) :
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x, y = np.linspace(-8,8,100), np.linspace(-8,8,100)
X, Y = np.meshgrid(x,y)
Z1 = 11 - 4*X + 2*Y
Z2 = (16 - 2*X + 4*Y) / 2
Z3 = (17 - X + 2*Y) / 4
ax.plot_surface(X,Y,Z1, alpha=0.5, rstride=100, cstride=100)
ax.plot_surface(X,Y,Z2, alpha=0.5, rstride=100, cstride=100)
ax.plot((1,1),(-8,8),(-9,23), lw=2, c='b')
ax.plot_surface(X,Y,Z3, alpha=0.5, facecolors='g', rstride=100, cstride=100)
ax.plot((1,),(-2,),(3,), lw=2, c='k', marker='o')
plt.show()