如果我有一个矩形矩阵C
,带有线性独立行,(在帖子底部的第一个观察中查看其预期数值的信息),其dimmension为qxn
,使得q<=n
我希望生成几个方形可逆矩阵T=[C;R]
。
这里重要的一点是矩阵T应该有条件(条件数接近1 )。
我编写了一个代码,以非常有效的方式解决了这个问题:
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
的值的数值通常是小的正整数(从1到10),从0到5的小的racional数字和零。
重要:对于一个给定的矩阵C
我不只需要一个矩阵R
,这将使M
条件良好。在我的应用程序中,对于给定的R
,我将需要几个矩阵C
(我想要多少),这就是为什么我试图生成R
随机的,但不幸的是在一个非常低效的方式。
备注:当然我可以找到一个R使得M条件良好,然后其他条件良好的矩阵可以是前一个的多个,但我想尝试其他方法。
答案 0 :(得分:0)
一种方法是使用C&#39;的qr分解。 (C转置)这样
C' = Q * ( R )
( 0 )
其中R是qxq上三角和非奇异,Q是正交的。然后对于任何非奇异(n-q)x(n-q)矩阵B和任何q x(n-q)矩阵A
Q * ( R A )
( 0 B )
将是非单数的,并且与C&#39;具有相同的第一个q列,因此您的转置就是您想要的。
为了分析条件数,我认为将A变为零是最简单的,因为我们有
|| D || = || R || + || B ||
|| inv(D) || = || inv(R) || + || inv( B) ||
where
D = ( R 0 )
( 0 B )