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

问题描述 投票:0回答:3

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

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

matlab matrix random singular triangular
3个回答
3
投票

你的答案是对的:

 A=tril(rand(n))

你可以检查这个矩阵是不是单数使用

 rcond(A)>eps

要么

 min(svd(A))>eps

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

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

enter image description here


0
投票

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

因此,对于矩阵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左右,这使得整个运动没有实际意义。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.