c - 生成与一组 vector 线性无关的随机 vector

标签 c linear-algebra vector-graphics

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

最佳答案

第1步.生成随机 vector vr

第 2 步. 将 vr 复制到 vo 并更新如下:对于 v1、v2 中每个已生成的 vector v。 .. vn,减去 vovi 上的投影。

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

可以根据vr的范数与vo的范数的比较来判断初始 vector 是否线性无关。非线性独立 vector 的 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

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

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

关于c - 生成与一组 vector 线性无关的随机 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210354/

相关文章:

c - 我编写这段代码是为了检查一个数字是质数、阿姆斯特朗数还是完美数,由于某种原因,当我使用大数时它不会打印

python - python 中的特征向量给出了看似随机的元素符号

xml - SVG 圆角

c - 默认情况下,C 程序是否在所有处理器内核上运行?

c - 为什么此示例明确地将字符串的最后一个字符(由 `snprintf()` 分配)设置为 `/0` ?

c - access 总是返回 -1,即使文件存在

求解线性规划最大化的C++算法

c# - 如何计算水平投影到有角度的线的点

css - Firefox 和 Opera : SVG & background-size results in bad rendering

java - 哪些库可用于帮助创建适用于手机的 2D Java 游戏?