2016-11-26 68 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)