用于创建基于矢量的拼图的算法

时间:2014-06-29 08:06:37

标签: algorithm random linear-algebra

我正在开发一个小小的益智游戏项目。基本思想是围绕将多维数据投影到2D而构建的。我唯一的问题是如何生成随机方案数据。这是问题所在:

我得到了多个随机向量v_i和一个目标向量t,所有这些都是2D。现在我想随机化标量值c_i

t = sum c_i v_i

因为有两个以上v_i这是一个超定系统。我还注意到v_i的线性组合实际上能够达到t

如何为c_i创建(随机化)值?

编辑:找到this Question之后我还可以说,我也可以(稍微)更改v_i

所有值均基于double

2 个答案:

答案 0 :(得分:1)

由于v_i是线性相关的,因此存在0 = sum l_i v_i的非平凡解。 如果你有n个向量,你可以找到n-2个独立的解决方案。

如果你现在有一个t = sum c_i v_i的解决方案,你可以将任何多个l_i添加到c_i,你仍然可以得到一个解决方案:c_i'= p l_i + c_i。

对于同质问题的每个独立解,确定随机p_j并计算 c_i''= c_i + sum p_j l_i_j。

答案 1 :(得分:1)

假设您的v_i形成一个包含2行和n列的矩阵V,每个向量都是一列。系数c_i形成列向量c。然后,等式可以以矩阵形式写成

V×c = t

现在将Singular Value Decomposition应用于矩阵V

V = A×D×B

其中A是正交2×2矩阵,D是2×n矩阵,B是正交n×n矩阵。原方程现在变为

A×D×B×c = t

将此等式乘以A的倒数,倒数与转置矩阵AT相同:

D×B×c = AT×t

让我们介绍新的符号c'=B×ct'=AT×t

D×c' = t'

这个等式的解决方案很简单,因为矩阵D看起来像这样:

u 0 0 0 ...  // n columns
0 v 0 0 ... 

解决方案是

c1' = t1' / u
c2' = t2' / v

由于D的所有其他列都为零,因此可以自由选择剩余的组件c3'...cn'这是您可以为c3'...cn创建随机数的地方。拥有向量c',您可以将c计算为

c = BT×c'

BTB的反转/转置。