numpy.linalg.svd结果随点数适合而变化

时间:2018-11-26 19:05:22

标签: python numpy svd helix

在为螺旋线安装最合适的线时,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有一个逻辑上的解释,我可以使用其他什么方法来消除这种偏差?我使用短螺旋,需要一种方法来准确计算螺旋的螺旋轴。

0 个答案:

没有答案