gct*_*gct 2 c linear-algebra vector-graphics
我正在尝试提出一种算法,该算法允许我生成一个随机的 N 维实值向量,该向量与一组已生成的向量线性无关。我不想强迫它们正交,只是线性独立。我知道 Graham-Schmidt 存在于正交化问题中,但是是否有更弱的形式只能给出线性独立向量?
步骤1.生成随机向量vr。
步骤 2. 复制vr并vo更新如下:对于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)):在这种情况下,将其计算为。基本上不同于零的角度对应于线性无关的向量。
| 归档时间: |
|
| 查看次数: |
4001 次 |
| 最近记录: |