您可以从前两个方程中消去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()