2016-11-26 1 views
1

선형 행을 사용하여 직사각형 행렬이있는 경우 (게시물 하단의 첫 번째 관측에서 예상되는 수치 정보 참조) 그의 dimmension은 qxn이고 따라서 q<=n이고 나는 몇 가지 square invertible matrix 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 

이 알고리즘은 700 ~ 2K 반복 (의 범위에 수렴 C=[1 0]을 고려 :

나는 매우 inneficient 방법으로이 문제를 해결하는 코드를 작성 매우 간단합니다.)

이제 C=[1 0 0]을 고려하면 반복이 2kkk 이상이므로 처리를 중단해야했습니다.

관측 : usuaally 내 C 행렬의 값의 수치는 (하나의 10) 작은 양의 정수, 0 내지 5, 0으로 작은 racional 수있을 것이다. 중요

: 내가 할 하나의 주어진 행렬 C를 들어 하지 필요 M이 잘 조절 된 것 단 하나의 매트릭스 R. 내 응용 프로그램에서, 내가 R (내가 원하는만큼) 주어진 하나의 C, 그래서 내가 왜 R 랜덤 생성하려고했는데,하지만 불행히도 매우 비효율적 인 방식으로 주어진 매트릭스가 필요합니다.

비고 : 나는 M이 잘 조절 된 후 다른 잘 조절 행렬은 이전의 여러 될 수 있지만, 나는 다른 접근을 시도 싶은 것을 하나 개의 R 같은 찾을 수 있습니다 물론.

+0

대신 당신이'쓸 수있는 루프 중첩이, 나는이 제로가되도록을하는 것이 가장 간단 할 것이라고 생각 조건 번호를 분석

R = A + (B - A) . * rand (n - q, n);''R'을 생성합니다. – rahnema1

+0

이제 코드가 더 간단합니다 – gustavoreche

+0

이상! – rahnema1

답변

0

방법 중 하나는 R이 qxq 상 삼각 및 비 특이하다

C' = Q * (R) 
     (0) 

그래서 C '(C의 전치)의 QR의 decompositon을 사용하는 것, 및 Q는 직교한다. 이어서 비 단수 (NQ) × (NQ) 행렬 B, 및 QX (NQ)을위한

Q * (R A) 
    (0 B) 

비 특이 것이다 매트릭스 있도록 "C와 같은 첫번째 Q 컬럼을 갖 그 전치사는 당신이 원하는 것입니다. 우리는

|| D || = || R || + || B || 
|| inv(D) || = || inv(R) || + || inv(B) || 
where 
D = (R 0) 
    (0 B) 
관련 문제