Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

qr

설명

R = qr(A)는 QR 분해 A = Q*R의 상부 삼각 인수 R을 반환합니다.

예제

[Q,R] = qr(A)A = Q*R을 충족하는 m×n 행렬 A에 대해 QR 분해를 수행합니다. 인수 Rm×n 상부 삼각 행렬이고 인수 Qm×m 직교 행렬입니다.

예제

[Q,R,P] = qr(A)A*P = Q*R을 충족하는 치환 행렬 P를 추가로 반환합니다. A가 비희소 행렬이면 abs(diag(R))이 감소하도록 치환 행렬을 선택합니다.

예제

[___] = qr(A,"econ")은 위에 열거된 출력 인수 조합을 사용하여 효율적인 크기의 분해를 생성합니다. 출력값의 크기는 m×n 행렬 A의 크기에 따라 달라집니다.

  • m > n인 경우 qrQ의 처음 n개 열과 R의 처음 n개 행만 계산합니다.

  • m <= n인 경우 효율적인 크기의 분해는 정상적인 분해와 동일합니다.

예제

[Q,R,P] = qr(A,outputForm)은 치환 정보 P를 행렬 또는 벡터로 반환할지 여부를 지정합니다. 예를 들어, outputForm"vector"인 경우 A(:,P) = Q*R입니다. outputForm의 디폴트 값은 A*P = Q*R이 되는 "matrix"입니다.

예제

[___] = qr(A,0)qr(A,"econ","vector")와 동일합니다. 이 구문의 사용은 권장되지 않습니다. "econ" 옵션을 대신 사용하십시오.

[C,R] = qr(S,B)C = Q'*B와 상부 삼각 인수 R을 계산합니다. CR을 사용하여 X = R\C로 희소 선형 시스템 S*X = B에 대한 최소제곱해를 계산할 수 있습니다.

예제

[C,R,P] = qr(S,B)R에서 필인(fill-in)을 줄이도록 선택된 치환 행렬 P를 추가로 반환합니다. C, R, P를 사용하여 X = P*(R\C)로 희소 선형 시스템 S*X = B에 대한 최소제곱해를 계산할 수 있습니다.

예제

[___] = qr(S,B,"econ")은 위에 열거된 출력 인수 조합을 사용하여 효율적인 크기의 분해를 생성합니다. 출력값의 크기는 m×n 희소 행렬 S의 크기에 따라 달라집니다.

  • m > n인 경우 qrCR에서 처음 n개의 행만 계산합니다.

  • m <= n인 경우 효율적인 크기의 분해는 정상적인 분해와 동일합니다.

예제

[C,R,P] = qr(S,B,outputForm)은 치환 정보 P를 행렬 또는 벡터로 반환할지 여부를 지정합니다. 예를 들어, outputForm"vector"이면 S*X = B에 대한 최소제곱해는 X(P,:) = R\C입니다. outputForm의 디폴트 값은 S*X = B에 대한 최소제곱해가 X = P*(R\C)가 되는 "matrix"입니다.

예제

[___] = qr(S,B,0)qr(S,B,"econ","vector")와 동일합니다. 이 구문의 사용은 권장되지 않습니다. "econ" 옵션을 대신 사용하십시오.

예제

모두 축소

5×5 마방진 행렬의 QR 분해를 구합니다. 상부 삼각 인수만 반환할 1개 출력 인수를 지정합니다.

A = magic(5);
R = qr(A)
R = 5×5

  -32.4808  -26.6311  -21.3973  -23.7063  -25.8615
         0   19.8943   12.3234    1.9439    4.0856
         0         0  -24.3985  -11.6316   -3.7415
         0         0         0  -20.0982   -9.9739
         0         0         0         0  -16.0005

두 출력 인수를 지정하여 마방진 테스트 행렬의 전체 QR 분해를 계산합니다.

A = magic(5);
[Q,R] = qr(A)
Q = 5×5

   -0.5234    0.5058    0.6735   -0.1215   -0.0441
   -0.7081   -0.6966   -0.0177    0.0815   -0.0800
   -0.1231    0.1367   -0.3558   -0.6307   -0.6646
   -0.3079    0.1911   -0.4122   -0.4247    0.7200
   -0.3387    0.4514   -0.4996    0.6328   -0.1774

R = 5×5

  -32.4808  -26.6311  -21.3973  -23.7063  -25.8615
         0   19.8943   12.3234    1.9439    4.0856
         0         0  -24.3985  -11.6316   -3.7415
         0         0         0  -20.0982   -9.9739
         0         0         0         0  -16.0005

기계 정밀도 내에서 A=QR인지 확인합니다.

norm(A-Q*R)
ans = 9.6765e-15

QR 분해의 R 인수에서 필인을 줄여주는 치환 행렬 또는 벡터를 반환할 3개 출력 인수를 지정합니다.

west0479 희소 행렬의 QR 분해를 계산합니다. AP=QR을 충족하는 치환 행렬을 반환할 3개 출력값을 지정합니다.

load west0479
A = west0479;
[Q,R,P] = qr(A);

기계 정밀도 내에서 치환 행렬 P에 대해 A*P = Q*R인지 확인합니다.

norm(A*P-Q*R,"fro")
ans = 3.3521e-10

이제 p를 치환 벡터로 반환하기 위해 "vector" 옵션을 지정합니다.

[Q,R,p] = qr(A,"vector");

기계 정밀도 내에서 치환 벡터 p에 대해 A(:,p) = Q*R인지 확인합니다.

norm(A(:,p) - Q*R,"fro")
ans = 3.3521e-10

분해에 치환 행렬이나 치환 벡터를 사용하면 비치환 분해에 비해 희소 형식 입력값에 대하여 0이 아닌 값이 더 적은 R 인수가 생성되는지 확인합니다.

[Q1,R1] = qr(A);
spy(R1)

spy(R)

이 결과를 보면, 치환된 분해에서 생성되는 R 인수에 훨씬 더 적은 수의 0이 아닌 값이 있습니다.

계수 행렬에 대한 효율적인 크기의 QR 분해를 통해 선형 시스템 Ax=b를 풉니다.

magic(10)의 처음 5개 열을 사용하여 10×5 계수 행렬을 만듭니다. 선형 방정식 Ax=b의 우변에는 행렬의 행 합을 사용합니다. 이렇게 설정하면 방정식의 해 x는 1로 구성된 벡터가 됩니다.

A = magic(10);
A = A(:,1:5)
A = 10×5

    92    99     1     8    15
    98    80     7    14    16
     4    81    88    20    22
    85    87    19    21     3
    86    93    25     2     9
    17    24    76    83    90
    23     5    82    89    91
    79     6    13    95    97
    10    12    94    96    78
    11    18   100    77    84

b = sum(A,2)
b = 10×1

   215
   215
   215
   215
   215
   290
   290
   290
   290
   290

A의 효율적인 크기의 QR 분해를 계산합니다. 그런 다음, x(p,:) = R\(Q\b)로 선형 시스템 QRx=b를 풉니다. Q는 직교 행렬이므로 이 방정식은 x(p,:) = R\(Q'*b)와 동일합니다.

[Q,R,p] = qr(A,"econ","vector")
Q = 10×5

   -0.0050   -0.4775   -0.0504    0.5193    0.0399
   -0.0349   -0.5001   -0.0990   -0.1954   -0.2006
   -0.4384    0.1059   -0.4660    0.4464    0.0628
   -0.0947   -0.4151   -0.2923   -0.2542    0.5274
   -0.1246   -0.4117   -0.2812   -0.1326   -0.4130
   -0.3787    0.0209    0.2702    0.4697    0.0390
   -0.4085   -0.0017    0.2217   -0.2450   -0.2015
   -0.0648   -0.3925    0.6939    0.0669    0.1225
   -0.4683    0.0833    0.0283   -0.3038    0.5265
   -0.4982    0.0867    0.0394   -0.1822   -0.4138

R = 5×5

 -200.7112  -55.5026 -167.6040  -84.7237 -168.7997
         0 -192.1053  -40.3557 -152.4040  -39.2814
         0         0  101.3180  -89.4254   96.0172
         0         0         0   41.0248  -14.9083
         0         0         0         0   24.6386

p = 1×5

     3     1     5     2     4

x(p,:) = R\(Q\b)
x = 5×1

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

R의 대각선에 대한 세미로그 플롯을 만들어 치환된 분해가 abs(diag(R))이 감소하는 R 인수를 생성하는지 확인합니다. 비교를 위해 동일한 플롯에서 A의 특이값을 플로팅합니다. 실제로 R의 대각선 요소의 값은 A의 특이값과 유사한 추이를 보입니다. 따라서 R의 대각선 요소의 값을 행렬 A가 특이 행렬에 얼마나 가까운지 보여주는 척도로 사용할 수 있습니다.

semilogy(abs(diag(R)),"-o")
hold on
semilogy(svd(A),"r-o")
legend("Diagonal of R","Singular Values of A")

희소 선형 시스템을 풀고 그 결과를 사용하여 벡터 b의 요소 중 얼마나 많은 수가 S의 열 공간에 속하는지 확인합니다.

10%의 밀도와 1로 구성된 벡터로 임의의 500×20 희소 행렬을 만듭니다. qr을 사용하여 행렬을 인수 RC = Q'*b로 분해합니다.

S = sprand(500,20,0.1);
b = ones(500,1);
[C,R] = qr(S,b,"econ");

그 결과를 사용하여 x = R\CSx=b를 풉니다.

x = R\C;

항등식 b2=Sx-b2+C2을 사용해 보겠습니다.

b의 노름으로 나누면, b의 요소 중 얼마만큼이 S의 열 공간에 속하는지를 보여주는 다음과 같은 새로운 항등식을 얻게 됩니다.

Sx-b2b2+C2b2=1.

첫 번째 항은 S의 열 공간에 속하지 않는 b 요소의 비율을 보여주는 반면, 두 번째 항은 S의 열 공간에 속한 b 요소의 비율을 보여줍니다.

t1 = norm(S*x-b)^2/norm(b)^2
t1 = 0.4000
t2 = norm(C)^2/norm(b)^2
t2 = 0.6000

qr을 사용하여 사각 희소 계수 행렬 S가 있는 행렬 방정식 Sx=B를 풉니다.

west0479 희소 행렬을 불러오고 처음 200개의 열을 선형 시스템의 사각 계수 행렬로 사용합니다. 방정식의 우변에는 S의 행 합을 사용합니다. 이렇게 설정하면 Sx=B의 해는 1로 구성된 벡터가 됩니다.

load west0479
S = west0479(:,1:200);
B = sum(S,2);

2개의 입력값과 3개의 출력값이 있는 qr을 사용하여 Sx=B를 풉니다. 선형 시스템의 해는 x = P*(R\C)입니다.

[C,R,P] = qr(S,B);
x = P*(R\C);

기계 정밀도 내에서 Sx-B=0인지 확인합니다.

norm(S*x-B)
ans = 8.3874e-11

참고: 상부 삼각 인수 R과 치환 행렬 P를 계산하되 직교 행렬 Q(종종 qr에 대한 호출에서 가장 계산 비용이 많이 드는 부분)는 계산되지 않도록 하려면 다음과 같이 B를 빈 행렬로 지정하면 됩니다.

emptyB = zeros(size(S,1),0);
[~,R,P] = qr(S,emptyB);

입력 인수

모두 축소

입력 행렬로, 비희소 행렬이나 희소 행렬로 지정됩니다.

데이터형: single | double
복소수 지원 여부:

입력 계수 행렬로, 희소 행렬로 지정됩니다. qr은 2개의 입력 행렬을 사용하여 선형 시스템 S*X = B의 최소제곱해를 계산합니다.

데이터형: double
복소수 지원 여부:

우변 행렬로, 비희소 행렬이나 희소 행렬로 지정됩니다. qr은 2개의 입력 행렬을 사용하여 C = Q'*B를 계산하며, 이를 통해 선형 시스템 S*X = B를 풀 수 있습니다.

데이터형: single | double
복소수 지원 여부:

치환 출력값의 형태로, "matrix" 또는 "vector"로 지정됩니다. 이 플래그는 치환 출력값 P가 치환 행렬과 치환 벡터 중 어느 것으로 반환되는지 제어합니다. 이 옵션을 사용하려면 qr에 3개의 출력 인수를 지정해야 합니다.

  • outputForm"vector"이면 PA(:,P) = Q*R을 충족하는 치환 벡터입니다.

  • outputForm의 디폴트 값은 A*P = Q*R이 되는 "matrix"입니다.

예: [Q,R,P] = qr(A,"vector")

출력 인수

모두 축소

직교 인수로, m×n 행렬 A에 대해 A = Q*R을 충족하는 행렬로 반환됩니다.

  • 전체 분해의 경우, qr(A)QQHQ=QQH=Im을 충족하는 m×m 직교 행렬로 반환합니다.

  • m > n인 사각 행렬 A의 경우, 효율적인 크기의 분해 qr(A,"econ")Q에서 처음 n개의 열과 R에서 처음 n개의 행만 계산합니다. Q의 열은 A의 열 공간에 대한 정규 직교 기저를 형성합니다.

컴퓨터가 다르거나 MATLAB® 릴리스가 다르면, 같지는 않지만 수치적으로는 정확한 열이 Q에 생성될 수 있습니다. QR에서 서로 대응하는 행과 열은 부호를 뒤집을 수 있으며, 이렇게 해도 표현식 A = Q*R의 값에는 영향을 미치지 않습니다.

상부 삼각 인수로, A = Q*R을 충족하는 행렬로 반환됩니다. A가 비희소 행렬이고 3개의 출력값이 지정되었을 때 R의 대각선은 내림차순입니다([Q,R,P] = qr(A)).

치환 정보로, 행렬이나 벡터로 반환됩니다. P의 형태는 outputForm의 값에 따라 달라집니다. 또한 qr은 다음과 같이 첫 번째 입력 행렬이 비희소 행렬인지 또는 희소 행렬인지 여부에 따라 다른 기준을 충족하는 P를 선택합니다.

  • 비희소 — qrabs(diag(R))이 감소하도록 P를 선택합니다.

  • 희소 — qrR에서 필인이 감소하도록 P를 선택합니다.

선형 시스템 인수로, C = Q'*B를 충족하는 행렬로 반환됩니다. S*X = B에 대한 최소제곱해는 X = R\C입니다. 치환 출력값 P가 지정된 경우 해는 다음과 같이 outputForm의 값에 따라 X = P*(R\C) 또는 X(P,:) = R\C입니다.

  • outputForm"vector"인 경우 S*X = B에 대한 최소제곱해는 X(P,:) = R\C입니다.

  • outputForm의 디폴트 값은 S*X = B에 대한 최소제곱해가 X = P*(R\C)가 되는 "matrix"입니다.

  • 동일한 계수 행렬을 포함한 여러 선형 시스템을 풀려면 decomposition 객체를 사용하십시오.

  • 구문 [C,R] = qr(S,B)의 경우 X = R\C의 값은 S의 랭크가 낮지 않을 때만 S*X = B에 대한 최소제곱해가 됩니다.

참고 문헌

[1] Anderson, E., ed. LAPACK Users’ Guide. 3rd ed. Software, Environments, Tools. Philadelphia: Society for Industrial and Applied Mathematics, 1999. https://doi.org/10.1137/1.9780898719604.

[2] Davis, Timothy A. “Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing Sparse QR Factorization.” ACM Transactions on Mathematical Software 38, no. 1 (November 2011): 1–22. https://doi.org/10.1145/2049662.2049670.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장