我在一个项目上工作,对于这个项目,我需要生成一个正方形随机可逆矩阵。
我发现了如何生成一个平方随机矩阵,但我仍然希望确保这是一个可逆矩阵,而不需要计算行列式或多次生成这个矩阵,您能给我一个提示吗?
发布于 2016-03-07 17:21:01
一种方法是生成矩阵的奇异值分解。也就是说,你生成‘随机’(正方形)正交矩阵U和V,以及一个‘随机’对角矩阵S,然后计算
M = U*S*V'注意,每个矩阵都有一个奇异值分解
只要S的对角线元素都不是0,M就是可逆的。许多处理可逆矩阵的例程对矩阵的条件数很敏感;随着条件数的增加,误差往往会增加。M的条件数与S的条件数相同,S的条件数是S的最大(绝对值)对角线元素除以最小(绝对值)。你可能想要控制这个。一种方法是生成S的元素,使其在例如lo,hi中是一致的,然后随机设置符号。
生成‘随机’正交矩阵的一种方法是生成‘随机’Householder反射的乘积,即以下形式的矩阵
R_v = 1 - 2*v*v'/(v'*v)其中v是一个“随机”向量。每个n×n正交矩阵可以写成n个Householder反射的乘积。所有这一切在计算上并不像乍看起来那么严重。由于反射器的特殊形式,因此很容易编写计算
R_u*M and M*R_v'在M中,仅使用n个额外的存储空间,并且是O( n* n)
所以一种方案是
Generate S
Repeat n times
Generate random non zero vector u
Update S to be R_u*S
Generate random non zero vector v
Update S to be S*R_v'发布于 2016-03-08 16:21:20
LU decomposition可能会起作用。
生成两个矩阵,L,它是下三角矩阵,所有项都在主对角线零之上;U,上三角矩阵,项在主对角线零以下。然后形成一个矩阵A=LU。
L或U的行列式只是主对角线下的项的乘积,所以你只需要确保这些项都不是零。A的行列式是这两个行列式的乘积。
https://stackoverflow.com/questions/35832782
复制相似问题