Main Content

svd

기호 행렬의 특이값 분해

설명

예제

sigma = svd(A)는 기호 행렬 A의 특이값을 포함하는 벡터 sigma를 반환합니다.

예제

[U,S,V] = svd(A)는 특이 벡터가 포함된 열이 있는 숫자형 유니타리 행렬 UV, 특이값이 포함된 대각 행렬 S를 반환합니다. 이러한 행렬은 조건 A = U*S*V'를 충족하며, 여기서 V'V의 에르미트 전치(켤레 복소수 전치)입니다. 특이 벡터 계산에는 가변 정밀도 연산방식이 사용됩니다. svd는 기호 특이 벡터를 계산하지 않습니다. 따라서 입력 행렬 A가 부동소수점 숫자로 변환 가능해야 합니다. 예를 들어 기호 숫자로 구성된 행렬을 사용할 수 있습니다.

예제

[U,S,V] = svd(A,0)은 행렬 A에 대한 효율적인 크기의 분해를 반환합니다. Am > nm×n 행렬인 경우 svdU의 처음 n개 열만 계산하며 Sn×n 행렬입니다. m <= n인 경우 이 구문은 svd(A)와 동일합니다.

예제

[U,S,V] = svd(A,'econ')은 행렬 A에 대해 다른 효율적인 크기의 분해를 반환합니다. Am >= nm×n 행렬인 경우 이 구문은 svd(A,0)과 동일합니다. m < n인 경우 svdV의 처음 m개 열만 계산하며 Sm×m 행렬입니다.

예제

[___] = svd(___,outputForm)은 위에 열거된 구문에 나와 있는 입력 또는 출력 인수를 사용하여 outputForm으로 지정한 형식으로 특이값을 반환합니다. outputForm'vector'로 지정하여 특이값을 열 벡터로 반환하거나 'matrix'로 지정하여 특이값을 대각 행렬로 반환합니다.

예제

모두 축소

5×5 기호 마방진의 특이값을 계산합니다. 결과는 열 벡터입니다.

A = sym(magic(5));
sigma = svd(A)
sigma = 

(6551345+65655+5655-5565-1345)

또는 'matrix' 옵션을 지정하여 특이값을 대각 행렬로 반환합니다.

S = svd(A,'matrix')
S = 

(650000051345+6500000655+500000655-500000565-1345)

기호 표현식으로 된 요소를 갖는 행렬의 특이값을 계산합니다.

syms t real
A = [0 1; -1 0];
E = expm(t*A)
E = 

(cos(t)sin(t)-sin(t)cos(t))

sigma = svd(E)
sigma = 

(cos(t)2+sin(t)2cos(t)2+sin(t)2)

결과를 단순화합니다.

sigma = simplify(sigma)
sigma = 

(11)

추후 계산을 위해 syms를 사용하여 t를 다시 만들어서 실수라는 가정을 제거합니다.

syms t

6차 마방진에서 5×5 기호 행렬을 만듭니다. svd를 사용하여 행렬의 특이값을 계산합니다.

M = magic(6);
A = sym(M(1:5,1:5));
sigma = svd(A)
sigma = 

(root(σ1,z,5)root(σ1,z,4)root(σ1,z,3)root(σ1,z,2)root(σ1,z,1))where  σ1=z5-11357z4+26691022z3-17903673324z2+979310921328z-1676258447616

svd 함수는 기호 숫자로 정확한 특이값을 구할 수 없습니다. 대신 root 함수로 반환합니다.

vpa를 사용하여 특이값에 대한 수치적 근삿값을 구합니다.

sigmaVpa = vpa(sigma)
sigmaVpa = 

(91.90338229938887559838064521710541.66752364570567794703813090238733.3893117613526255506073034298057.61386514813710461179507988708961.3299296132187199146053915272808)

5×5 마방진의 특이값과 특이 벡터를 계산합니다.

old = digits(10);
A = sym(magic(5))
A = 

(17241815235714164613202210121921311182529)

[U,S,V] = svd(A)
U = 

(0.44721359550.54563487310.5116672736-0.1954395076-0.44975836320.44721359550.4497583632-0.19543950760.51166727360.54563487310.4472135955-1.547164189e-27-0.632455532-0.6324555321.213456644e-270.4472135955-0.4497583632-0.19543950760.5116672736-0.54563487310.4472135955-0.54563487310.5116672736-0.19543950760.4497583632)

S = 

(65.00000022.547088690000021.687425360000013.4035660000011.90078954)

V = 

(0.44721359550.40451643610.24656489620.66272600070.36927828660.44721359550.0055661597140.6627260007-0.2465648962-0.54769427410.4472135955-0.82016519161.767621593e-279.706484055e-280.35683197510.44721359550.005566159714-0.66272600070.2465648962-0.54769427410.44721359550.4045164361-0.2465648962-0.66272600070.3692782866)

digits(old)

10자리 정확도로 U, S, 그리고 V의 에르미트 전치에 대한 곱을 계산합니다. 결과는 모든 요소가 부동소수점 숫자로 전환된 원래 행렬 A입니다.

vpa(U*S*V',10)
ans = 

(17.024.01.08.015.023.05.07.014.016.04.06.013.020.022.010.012.019.021.03.011.018.025.02.09.0)

8자리 정확도 내에서 사각 행렬의 전체 분해와 효율적인 크기의 분해를 계산합니다.

old = digits(8);
A = sym([1 2; 3 4; 5 6; 7 8])
A = 

(12345678)

[U,S,V] = svd(A)
U = 

(0.15248323-0.82264747-0.39450102-0.379959130.34991837-0.421375290.242796550.800655880.54735351-0.0201031030.69790998-0.461434360.744788650.38116908-0.54620550.040737612)

S = 

(14.269095000.626828230000)

V = 

(0.641423030.76718740.7671874-0.64142303)

[U,S,V] = svd(A,'econ')
U = 

(0.15248323-0.822647470.34991837-0.421375290.54735351-0.0201031030.744788650.38116908)

S = 

(14.269095000.62682823)

V = 

(0.641423030.76718740.7671874-0.64142303)

digits(old)

A가 4×2 행렬이므로 svd(A,'econ')은 전체 크기 분해와 비교하여 U에 더 적은 수의 열을 반환하고, S에 더 적은 수의 행을 반환합니다. S에서 0으로 이루어진 추가 행이 제외되고, 표현식 A = U*S*V'에서 이러한 0과 곱해질 U의 열도 제외됩니다.

입력 인수

모두 축소

입력 행렬로, 기호 행렬로 지정됩니다. 1개의 출력 인수가 있는 구문의 경우 A의 요소는 기호 숫자, 기호 변수, 기호 표현식 또는 기호 함수일 수 있습니다. 3개의 출력 인수가 있는 구문의 경우 A의 요소는 부동소수점 숫자로 변환 가능해야 합니다.

R2021b 이상

특이값의 출력 형식으로, 'vector' 또는 'matrix'로 지정됩니다. 이 옵션을 사용하면 특이값을 열 벡터로 반환할지 또는 대각 행렬로 반환할지 지정할 수 있습니다. 디폴트 동작은 지정된 출력값의 개수에 따라 달라집니다.

  • sigma = svd(A)와 같이 1개의 출력값을 지정하면 특이값이 기본적으로 열 벡터로 반환됩니다.

  • [U,S,V] = svd(A)와 같이 3개의 출력값을 지정하면 특이값이 기본적으로 대각 행렬 S로 반환됩니다.

출력 인수

모두 축소

행렬의 특이값으로, 벡터로 반환됩니다. sigma가 숫자로 구성된 벡터인 경우 요소는 내림차순으로 정렬됩니다.

특이 벡터로, 유니타리 행렬로 반환됩니다. 이 행렬의 각 열이 특이 벡터입니다.

특이값으로, 대각 행렬로 반환됩니다. 이 행렬의 대각선 요소는 내림차순으로 표시됩니다.

특이 벡터로, 유니타리 행렬로 반환됩니다. 이 행렬의 각 열이 특이 벡터입니다.

  • 두 번째 인수 0'econ'은 반환된 행렬의 형태에만 영향을 줍니다. 이러한 인수는 계산 성능에 영향을 주지 않습니다.

  • 기호 객체가 아닌 숫자형 행렬에 대해 svd를 호출하면 MATLAB® svd 함수가 호출됩니다.

  • 기호 변수를 많이 사용한 행렬 계산은 속도가 느릴 수 있습니다. 계산 속도를 높이려면 일부 변수에 지정된 값을 대입하여 기호 변수의 개수를 줄이십시오.

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

| | | | | | |

도움말 항목