如何生成随机三角矩阵? (上下)
通常我会使用rand(n)
但是如果我尝试tril(rand(n))
它会是单数的,我不希望这样。
答案 0 :(得分:3)
你的回答是正确的:
A=tril(rand(n))
您可以使用
检查此矩阵不是单数 rcond(A)>eps
或
min(svd(A))>eps
并验证最小奇异值是否大于eps,或任何其他与您的需求相关的数值公差。 (代码将返回1或0)。对于n>50
,您将开始接近单个矩阵。
这里有一个关于矩阵如何以它的大小接近奇点的小分析......
答案 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 )。