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

时间:2015-10-07 16:11:24

标签: matlab matrix random singular triangular

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

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

3 个答案:

答案 0 :(得分:3)

你的回答是正确的:

 A=tril(rand(n))

您可以使用

检查此矩阵不是单数
 rcond(A)>eps

 min(svd(A))>eps

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

这里有一个关于矩阵如何以它的大小接近奇点的小分析......

enter image description here

答案 1 :(得分:0)

好的,这是关于三角矩阵奇点的想法。三角矩阵的行列式决定了奇点,因为当构造逆矩阵时它会进入分母。三角矩阵的性质使得行列式等于对角元素的乘积。

因此,对于矩阵NxN,我们在对角线上具有i.i.d的乘积。 U(0,1)数字。显然,由于所有数字都是<1且越多,因此N增加,行列式将会减少,产品(也就是决定因素)的价值就越小。

有趣的是检查det = X 1 X 2 ... * X N 平均值将下降为2 -N ,因为产品中的每个项都是U(0,1),平均值为1/2,它们都是iid替代检查将是从产品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的10 6 三角矩阵,计算它们的行列式并对其求平均值,您应该找到它非常接近2 -100

问题出在哪里。平均而言,三角形随机矩阵随着N的增长呈指数级变为奇点。 2 -10 约等于1 / 1,000。 2 -20 约等于1 / 1,000,000。 对于N = 100,它应该平均大约10 -30 左右,这使得整个运动没有实际意义。

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

答案 2 :(得分:0)

如果您需要条件良好的随机三角矩阵,则可以将 A 2 的三角形部分与 A = rand( n )。因此,任意大小 n 的triu( A * A )条件都很好,但当然具有复杂度 O(n 3