如何生成随机三角矩阵? (上下)
通常我使用rand(n)
,但如果我尝试tril(rand(n))
它将是单数,我不希望这样。
好的,这里是关于三角矩阵奇点的想法。三角矩阵的行列式决定了奇点,因为当构造逆矩阵时它会进入分母。三角矩阵的性质使得行列式等于对角元素的乘积。
因此,对于矩阵NxN
,我们在对角线上具有i.i.d的乘积。 U(0,1)数字。显然,当N
增加时,行列式将会减少,因为所有数字都<1且越多,产品(也就是决定因素)的价值就越小。
有趣的是检查对于det = X1X2 ... * XN,平均值将下降为2-N,因为乘积中的每个项是U(0,1),均值为1/2,并且它们都是i.i.d.替代检查将是从产品PDF计算平均值(参见https://math.stackexchange.com/questions/659254/product-distribution-of-two-uniform-distribution-what-about-3-or-more),实际上,它将给出完全相同的结果,2-N。也可以计算行列式的方差,因为第二动量减去均方,并且它等于(3-N-4-N)。
请注意,这些是平均值,您可以平均预期,例如,如果您对N = 100的106个三角矩阵进行采样,计算它们的行列式并对其求平均值,您会发现它非常接近2-100。
这就是问题所在。平均而言,三角形随机矩阵随着N
的增长呈指数级变为奇点。 2-10约等于1 / 1,000。 2-20约等于1 / 1,000,000。对于N = 100,它应该平均约为10-30左右,这使得整个运动没有实际意义。
不幸的是,除了这个简单的分析,我无法提供任何东西
如果你想要一个条件良好的随机三角矩阵,你可以用A = rand(n)取A2的三角形部分。因此,对于任何大小n的triu(A * A)都有良好的条件,但当然对于矩阵 - 矩阵乘法具有复杂度O(n3)。