使用Matplotlib和numpy绘制方程组

时间:2016-01-30 21:35:58

标签: python numpy matplotlib

我试图学习如何使用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?

1 个答案:

答案 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()

enter image description here