Matlab - 生成随机非奇异三角矩阵

Matlab - generate random nonsingular triangular matrix

如何生成随机三角矩阵? (上下)

通常我使用 rand(n) 但如果我尝试 tril(rand(n)) 它将是单数的,我不希望那样。

你的回答是正确的:

 A=tril(rand(n))

您可以使用

检查此矩阵是否为奇异矩阵
 rcond(A)>eps

 min(svd(A))>eps

并验证最小奇异值是否大于 eps 或与您的需求相关的任何其他数值公差。 (代码将 return 1 或 0)。对于 n>50,您将开始处理奇异矩阵。

下面是对矩阵如何以其大小接近奇点的小分析...

好了,关于三角矩阵奇点的思考就到这里。三角矩阵的行列式决定奇点,因为它在构建逆矩阵时进入分母。三角矩阵的属性行列式等于对角元素的乘积。

所以对于矩阵 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 左右,这使得整个练习没有实际意义。

不幸的是,除了这个简单的分析,我无法提供任何东西。

如果你想要一个条件良好的随机三角矩阵,你可以使用 A2 的三角部分 A =rand(n)。因此 triu(A * A) 对于任何大小 n 条件良好但当然具有复杂性 O(n3) 用于矩阵-矩阵乘法。