当计算含有无理数的矩阵的列空间(例如sqrt(3))时,sympy.columnspace()产生两个不正交的向量(例如,V_1^TV_2 != 0)。
鉴于矩阵A:
A = Matrix([[1.25000000000000, 0.25*sqrt(3), 0.500000000000000, 0, 1.25000000000000, -0.25*sqrt(3)], [0.25*sqrt(3), 0.750000000000000, -0.5*sqrt(3), 0, 0.25*sqrt(3), -0.750000000000000], [0.500000000000000, -0.5*sqrt(3), 2, 0, 0.500000000000000, 0.5*sqrt(3)], [0, 0, 0, 0, 0, 0], [1.25000000000000, 0.25*sqrt(3), 0.500000000000000, 0, 1.25000000000000, -0.25*sqrt(3)], [-0.25*sqrt(3), -0.750000000000000, 0.5*sqrt(3), 0, -0.25*sqrt(3), 0.750000000000000]])Sympy计算列空间为:
V = A.columnspace()
V = [Matrix([
[ 1.25],
[ 0.25*sqrt(3)],
[ 0.5],
[ 0],
[ 1.25],
[-0.25*sqrt(3)]]), Matrix([
[0.25*sqrt(3)],
[ 0.75],
[-0.5*sqrt(3)],
[ 0],
[0.25*sqrt(3)],
[ -0.75]])]但是,构成列空间的两个向量的点积是非零的:
B = V[0].dot(V[1])
B = 0.75*sqrt(3)为什么结果的列空间是非正交的?我试图简化上面的表达式以删除小数(和潜在的舍入错误),但没有效果。
发布于 2022-11-10 19:54:15
构成列空间的向量不一定是正交的。在上面的例子中,列空间只是矩阵的前两列。
若要正交化,请使用Gram-Schmidt过程:
V = GramSchmidt(A.columnspace(),True)其中,可选参数True对应于标准化结果向量。
https://stackoverflow.com/questions/74393864
复制相似问题