python_numpy_在二维三维空间中平面的正交基

在线性代数中,(也称为基底)是描述、刻画[向量空间的基本工具。向量空间的基是它的一个特殊的子集,基的元素称为基向量。向量空间中任意一个元素,都可以唯一地表示成基向量的线性组合。正交基就是两个垂直的基向量。它能更为方便的表示向量空间中的元素。

下面介绍一下,使用Gram-Schmidt投影法求正交基

二维空间中求正交基

相当于已知线OA(一个基向量),和线OA外一点C,求C在OA上的投影点P,求得OA的正交向量CP,为平面的另一个基。
CP与OA就组成了一组正交基。

python_numpy_在二维三维空间中平面的正交基_第1张图片
二维空间中平面的正交基

问题变为了最小二乘法的最优解
http://www.jianshu.com/p/acec83df379c

三维空间中求正交基

已知向量a,b在三维空间中构成一个平面,求在这个平面上的一组正交基a,p

python_numpy_在二维三维空间中平面的正交基_第2张图片
三维空间中平面的正交基

使用的原理和二维空间里类似,p为ax=b最小二乘法的最优解
CODE

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#将a,b写成3x1的向量,三维的向量
a = np.array([[1],[2],[3]])
b = np.array([[1],[1],[1]])

aa=np.linalg.inv(a.T.dot(a))
x = aa.dot(a.T).dot(b)
al=a.dot(x)
oc=b-al

xx=np.linspace(-0.5,1,10)
xx.shape=(1,10)
xxx=a.dot(xx)

fig = plt.figure()
ax = fig.gca(projection='3d')

ax.plot(xxx[0,:],xxx[1,:],xxx[2,:],label='line a')
ax.plot(a[0],a[1],a[2],'r-o',label='a')
ax.plot([0,b[0]],[0,b[1]],[0,b[2]],'m-o',label="0B")
ax.plot([b[0][0],al[0][0]],[b[1][0],al[1][0]],[b[2][0],al[2][0]],'g-o',label="bP")
ax.plot([0,oc[0]],[0,oc[1]],[0,oc[2]],'y-o',label=u'求出的基坐标')

ax.legend(loc='upper left')
ax.axis('equal')
plt.show()

结果:

python_numpy_在二维三维空间中平面的正交基_第3张图片
结果

你可能感兴趣的:(python_numpy_在二维三维空间中平面的正交基)