在为螺旋线安装最合适的线时,numpy.linalg.svd遇到了一些麻烦。我使用以下参数方程式创建了理想的螺旋线:
import numpy as np
def helix(t):
c = 0.5
r = 5
X = r * np.cos(t)
Y = r * np.sin(t)
Z = c * t
return X, Y, Z
为了计算该螺旋的螺旋轴,我通过迭代并绘制t值范围来从螺旋方程生成一些点,并计算了数组的SVD:
value = []
matrix = []
for i in range(0,101):
value = helix(i)
matrix.append(value)
array = np.array(matrix)
datamean = list(array.mean(axis=0))
subtracted = array - datamean
uu, ss, vv = np.linalg.svd(subtracted)
对于此螺旋,属于螺旋轴矢量的SVD应该为(0,0,1)。但是,所得的SVD为(-0.00331051,-0.0121754,0.99992)。尽管计算出的向量和(0,0,1)向量之间的差异似乎很小,但是当您围绕其他轴旋转螺旋线时,会导致与真实的螺旋轴的急剧偏差。有趣的是,当我使用1000点而不是100点来定义要为其计算SVD的螺旋时,所得向量实际上是(0,0,-1),这是预期结果。
我的两个问题是:
1)为什么numpy.linalg.svd对于属于同一参数函数的不同点数给出不同的SVD值?
2)如果对1有一个逻辑上的解释,我可以使用其他什么方法来消除这种偏差?我使用短螺旋,需要一种方法来准确计算螺旋的螺旋轴。