生成与一组向量线性无关的随机向量

gct*_*gct 2 c linear-algebra vector-graphics

我正在尝试提出一种算法,该算法允许我生成一个随机的 N 维实值向量,该向量与一组已生成的向量线性无关。我不想强迫它们正交,只是线性独立。我知道 Graham-Schmidt 存在于正交化问题中,但是是否有更弱的形式只能给出线性独立向量?

Ale*_*x I 5

步骤1.生成随机向量vr

步骤 2. 复制vrvo更新如下:对于v中每个已生成的向量,减去上v1, v2... vn的投影。vovi

结果是与 所跨越的子空间正交的随机向量v1, v2... vn。如果该子空间是基,那么它当然是零向量:)

可以根据vr的范数与vo的范数的比较来判断初始向量是否线性无关。非线性独立向量的 vo 范数为零或接近零(某些数值精度问题可能使其成为一个小非零数,约为 epsilon 的几倍,这可以通过应用程序相关的方式进行调整)。

伪代码:

vr = random_vector()
vo = vr
for v in (v1, v2, ... vn):
    vo = vo - dot( vr, v ) / norm( v )
if norm(vo) < k1 * norm(vr):
    # this vector was mostly contained in the spanned subspace
else:
    # linearly independent, go ahead and use
Run Code Online (Sandbox Code Playgroud)

这里 k1 是一个非常小的数字,也许是 1e-8 到 1e-10?

您还可以通过vr 和子空间之间的角度theta = arcsin(norm(vo) / norm(vr)):在这种情况下,将其计算为。基本上不同于零的角度对应于线性无关的向量。