2016-11-26 86 views
1

如果我有一个矩形矩阵C,带有线性独立行(参见在帖子底部的第一个观察中的预期数值的信息),其暗格是qxn,使得q<=n和我想制作几个正方形可逆矩阵T=[C;R]完成一个矩形矩阵,以便产生几个方形可逆的井状矩阵

这里重要的一点是矩阵T应该很好地适应条件(条件编号接近1)。

我写了一个非常inneficient的方式解决该问题的代码:

clear all 
C=[1 0]; %example 
tol=0.1; 

n=size(C,2); 
q=size(C,1); 

singularity=1; 
it=0; 
while(singularity==1) 
    a=-5; 
    b=5; 
    R=a + (b - a) .* rand(n - q, n); %generates randomic R matrix with numerical values beetwen 'a' and 'b' 
    M=[C;R]; 
    if(abs(cond(M)-1)<tol) %cond(M) computes the condition number of M 
     singularity=0; 
    end 
    it=it+1; 
end 

考虑C=[1 0]算法的范围为700〜2K迭代(收敛然而,过程运行速度非常快,因为指令很简单。)

现在,考虑到C=[1 0 0]我被迫中断处理,因为迭代超过2kkk。

观察:我的矩阵C的值的数值usuaally将是小的正整数(从一到十),小racional编号从0至5和零。

重要:对于一个给定矩阵C我做只需要一个矩阵R,这将使M良好条件。在我的应用程序中,我将需要几个矩阵R(尽可能多我想要)为一个给定的C,所以这就是为什么我试图生成R随机,但不幸的是在一个非常低效的方式。

备注:当然,我能找到一个R,M为好的条件,然后其他好条件矩阵可以是多以前的一个,但我想尝试其他方法。

+0

代替嵌套的循环,你可以写'R = A +(B - A) * rand(n - q,n);'生成'R' – rahnema1

+0

好吧,现在代码更简单 – gustavoreche

+0

,效率更高! – rahnema1

回答

0

的一种方法将是使用C”(C的转置)的QR decompositon使得

C' = Q * (R) 
     (0) 

,其中R是qxq上三角的和非单一的,并且Q是正交的。然后,对于任何非奇异(NQ)×(NQ)矩阵B,和任何QX(NQ)矩阵A

Q * (R A) 
    (0 B) 

将是非奇异并且将具有相同的第一Q列为C”,使得这个转置就是你想要的。

为了分析的条件数,我认为这将是最简单的取A为零,因为那时我们有

|| D || = || R || + || B || 
|| inv(D) || = || inv(R) || + || inv(B) || 
where 
D = (R 0) 
    (0 B)