我在一个项目上工作,对于这个项目,我需要生成一个方形随机可逆矩阵。
我发现了如何生成一个方形随机矩阵,我仍然想确定这是一个可逆矩阵,无需计算行列式或多次生成这个矩阵,你能给我一个提示吗? / p>
答案 0 :(得分:3)
一种方法是生成矩阵的SVD。那就是你生成'随机'(正方形)正交矩阵U和V,以及一个'随机'对角矩阵S,然后计算
M = U*S*V'
请注意,每个矩阵都有一个SVD
只要S的对角元素都不为0,M就是可逆的。处理可逆矩阵的许多例程对矩阵的条件数敏感;随着条件数量的增加,错误往往会增加。 M的条件数与S的条件数相同,S的条件数是S的最大(绝对值)对角线元素除以最小值(绝对值)。你可能想要控制它。一种方法是在[lo,hi]中生成S的元素,然后随机设置符号。
生成“随机”正交矩阵的一种方法是生成“随机”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'
答案 1 :(得分:0)
LU decomposition可能有用。
生成两个矩阵L,它是下三角形,主对角线零点以上的所有条目,U,上三角矩阵,主要对角线零下方有条目。然后形成矩阵A = LU。
L或U的行列式只是主对角线下方的条目的乘积,因此您只需确保这些都不为零。 A的决定因素是两个决定因素的乘积。