주요 콘텐츠

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

icare

연속시간 대수 리카티 방정식에 대한 음함수 솔버

설명

[X,K,L] = icare(A,B,Q,R,S,E,G)는 다음 연속시간 대수 리카티 방정식의 유일한 안정화 해 X, 상태-피드백 이득 K, 폐루프 고유값 L을 계산합니다.

ATXE+ETXA+ETXGXE-(ETXB+S)R-1(BTXE+ST)+Q = 0

안정화 해 X는 모든 고유값 L을 좌반면에 둡니다.

대수 리카티 방정식은 LQR/LQG 제어, H2- 및 H-무한대 제어, 칼만 필터링 및 스펙트럼 분해 또는 서로소 분해에서 중요한 역할을 합니다.

예제

[X,K,L,info] = icare(___)는 연속시간 대수 리카티 방정식의 해에 대한 추가 정보가 포함된 구조체 info도 반환합니다.

예제

[___] = icare(___,'noscaling')은 내장 스케일링을 끄고, 스케일링 벡터 info.Sxinfo.Sr의 모든 요소를 1로 설정합니다. 스케일링을 끄면 계산 속도가 빨라지지만 A,B,Q,R,S,E,G가 제대로 스케일링되지 않은 경우 정확성을 저해할 수 있습니다.

[___] = icare(___,'anti')는 모든 고유값 L을 우반면에 두는 반안정화 해(anti-stabilizing solution) X를 계산합니다.

예제

예제

모두 축소

대수 리카티 방정식 ATX+XA-XBBTX+CCT=0을 풀기 위해 다음 행렬을 사용해 보겠습니다.

A=[1-23-456789]B=[56-7]C=[7-89].

가장 간편한 방법은 G=-BBTQ=CTC를 사용한 다음, icare를 사용하여 해를 구하는 것입니다.

A = [-1,2,3;4,5,-6;7,-8,9];
B = [5;6;-7];
C = [7,-8,9];
G = -B*B';
Q = C'*C;
[X1,K1,L1] = icare(A,[],Q,[],[],[],G)
X1 = 3×3

   15.3201    4.2369   17.0090
    4.2369    2.6252    4.4123
   17.0090    4.4123   19.0374

K1 =

  0×3 empty double matrix
L1 = 3×1

   -3.2139
  -10.1191
  -76.9693

위 방법은 행렬 BC에 값이 큰 요소들이 있는 경우 부정확한 수치를 생성할 수 있는데, 이는 GQ 행렬을 계산하기 위해 이 요소들이 제곱되기 때문입니다. 제한된 수치 범위로 인해 계산의 정확도가 떨어지거나 계산에 실패할 수도 있습니다. 예를 들어 norm(B)1e6이면 norm(G)1e12이고, 이에 따라 허수축의 1e-4 이내의 모든 고유값이 수치 오차로 인해 '허수'로 진단될 수 있습니다.

수치 정확도를 높이기 위해 다음과 같은 방법으로 대수 리카티 방정식을 다시 작성합니다.

ATX+XA[XB,CT]*[I,0;0,-I][BTX;C]=0.

위 방정식은 ATX+XA-(XB+S)R-1(BTX+ST)=0의 표준 형식입니다.

여기서 B=[B,0], S=[0,CT],and R=[I,0;0,-I]입니다.

위 값과 함께 icare를 사용하여 해를 계산합니다.

n = size(A,1);
m = size(B,2);
p = size(C,1);
R = blkdiag(eye(m),-eye(p));
BB = [B,zeros(n,p)];
S = [zeros(n,m),C'];
[X2,K2,L2,info] = icare(A,BB,0,R,S,[],[])
X2 = 3×3

   15.3201    4.2369   17.0090
    4.2369    2.6252    4.4123
   17.0090    4.4123   19.0374

K2 = 2×3

  -17.0406    6.0501  -21.7435
   -7.0000    8.0000   -9.0000

L2 = 3×1

   -3.2139
  -10.1191
  -76.9693

info = struct with fields:
        Sx: [3×1 double]
        Sr: [2×1 double]
         U: [3×3 double]
         V: [3×3 double]
         W: [2×3 double]
    Report: 0

여기서 X2는 유일한 안정화 해이고, K2는 상태-피드백 이득을 포함하며, L2는 폐루프 고유값을 포함합니다.

연속시간 대수 리카티 방정식 ATX+XA-XBBTX+CCT=0의 반안정화 해를 구하기 위해 다음 행렬을 사용해 보겠습니다.

A=[1-23-456789]B=[56-7]C=[7-89].

수치 정확도를 높이기 위해 다음과 같은 방법으로 대수 리카티 방정식을 다시 작성합니다.

ATX+XA[XB,CT]*[I,0;0,-I][BTX;C]=0.

위 방정식은 ATX+XA-(XB+S)R-1(BTX+ST)=0의 표준 형식입니다.

여기서 B=[B,0], S=[0,CT],and R=[I,0;0,-I]입니다.

'anti' 옵션을 사용하여 반안정화 해를 계산합니다.

A = [-1,2,3;4,5,-6;7,-8,9];
B = [5;6;-7];
C = [7,-8,9];
n = size(A,1);
m = size(B,2);
p = size(C,1);
R = blkdiag(eye(m),-eye(p));
BB = [B,zeros(n,p)];
S = [zeros(n,m),C'];
[X,K,L] = icare(A,BB,0,R,S,[],[],'anti')
X = 3×3

  -18.0978   10.9090   -1.8466
   10.9090   -6.7195    1.4354
   -1.8466    1.4354   -0.9426

K = 2×3

  -12.1085    4.1803    5.9774
   -7.0000    8.0000   -9.0000

L = 3×1

   76.9693
   10.1191
    3.2139

여기서 X는 유일한 반안정화 해이고, K는 상태-피드백 이득을 포함하며, L은 폐루프 고유값을 포함합니다.

입력 인수

모두 축소

입력 행렬로, 행렬로 지정됩니다.

행렬 Q, R, G는 에르미트여야 합니다. 정사각 행렬이 자신의 켤레 복소수 전치(즉, ai,j=a¯j,i)와 동일하면 에르미트 행렬입니다.

에르미트 행렬에 대한 자세한 내용은 ishermitian을 참조하십시오.

행렬 RE는 가역적이어야 합니다.

행렬 B, R, S, E, G가 생략되었거나 []로 설정된 경우, icare는 다음 디폴트 값을 사용합니다.

  • B = 0

  • R = I

  • S = 0

  • E = I

  • G = 0

입력 Q, R, G가 스칼라 값인 경우 icare는 이를 단위 행렬의 배수로 해석합니다.

내장 스케일링을 끄기 위한 옵션으로, 'noscaling'으로 지정됩니다. 내장 스케일링을 끄면 icare는 스케일링 벡터 info.Sxinfo.Sr의 모든 요소를 1로 설정합니다. 스케일링을 끄면 계산 속도가 빨라지지만 A,B,Q,R,S,E,G가 제대로 스케일링되지 않은 경우 정확성을 저해할 수 있습니다.

반안정화 해를 계산하기 위한 옵션으로, 'anti'로 지정됩니다. 이 옵션을 활성화하면 icare(A+G*X*E-B*K,E)의 모든 고유값을 우반면에 두는 반안정화 해 X를 계산합니다.

리카티 미분 방정식의 전체 위상 모방(phase portrait)을 알려면 유일한 안정화와 반안정화가 모두 필요합니다.

출력 인수

모두 축소

연속시간 대수 리카티 방정식의 유일한 해로, 행렬로 반환됩니다.

기본적으로 X는 연속시간 대수 리카티 방정식의 안정화 해입니다. 'anti' 옵션이 사용되는 경우 X는 반안정화 해입니다.

관련 해밀턴 행렬이 허수축에 고유값을 갖는 경우 icareX에 대해 []을 반환합니다.

펜슬이 특이 행렬인 경우(즉, [B;S;R]의 랭크가 부족함) icare[]을 반환합니다. (R2024a 이후)

상태-피드백 이득으로, 행렬로 반환됩니다.

상태-피드백 이득 K는 다음과 같이 계산됩니다.

K = R1(BTXE+ST).

관련 해밀턴 행렬이 허수축에 고유값을 갖는 경우 icareK에 대해 []을 반환합니다.

펜슬이 특이 행렬인 경우(즉, [B;S;R]의 랭크가 부족함) icare[]을 반환합니다. (R2024a 이후)

폐루프 고유값으로, 행렬로 반환됩니다.

폐루프 고유값 L은 다음과 같이 계산됩니다.

L = eig(A+GXEBK,E).

관련 해밀턴 행렬이 허수축에 고유값을 갖는 경우 icareXK에 대해 []을 반환합니다. 즉, XK가 빈 행렬이더라도 L은 비어 있지 않습니다.

펜슬이 특이 행렬인 경우(즉, [B;S;R]의 랭크가 부족함) icareL = NaN(n,1)을 반환합니다. (R2024a 이후)

유일한 해에 대한 정보로, 다음 필드를 갖는 구조체로 반환됩니다.

  • Sx — 상태를 스케일링하는 데 사용되는 값으로 구성된 벡터.

  • SrR 행렬을 스케일링하는 데 사용되는 값으로 구성된 벡터.

  • U, V, W — 스케일링된 관련 행렬 펜슬의 안정적인 불변 부분공간의 기저를 나타내는 값으로 구성된 벡터. 자세한 내용은 알고리즘 항목을 참조하십시오.

  • Report — 다음 값 중 하나를 갖는 스칼라

    • 0 — 유일한 해가 정확합니다.

    • 1 — 해의 정확도가 떨어집니다.

    • 2 — 해가 유한하지 않습니다.

    • 3[L;-L]로 표기되는 헤밀턴 스펙트럼이 허수축에 고유값을 가지므로 해를 구할 수 없습니다.

    • 4 — 펜슬이 특이 행렬([B;S;R]의 랭크가 부족함)입니다. (R2024a 이후)

제한 사항

  • (A-sE,B)는 안정화 가능해야 하며, 유한한 안정화 해 X가 존재하고 유한하려면 ER이 가역적이어야 합니다. 이러한 조건은 일반적으로 충분하지 않지만, 다음 조건이 충족될 경우에는 충분해집니다.

    • [QSTSR]  0

    • [ABR1STQSR1ST]가 감지 가능함

알고리즘

불변 부분공간의 기저

icare는 다음 펜슬을 사용하고, 이 펜슬의 안정적(stable)이거나 반안정적(anti-stable)인 유한 고유값과 관련된 불변 부분공간의 기저 [U;V;W]를 계산합니다.

MsN = [AGBQATSSTBTR]s[E000ET0000]

데이터는 허수축 가까이에 있는 고유값의 민감도를 줄이고 안정적인 불변 부분공간과 반안정적인 불변 부분공간을 더 잘 분리하기 위해 자동으로 스케일링됩니다.

해와 상태-피드백 이득과 스케일링 벡터 간의 관계

X와 상태 피드백 이득 K는 스케일링 벡터 및 U,V,W와 다음 수식의 관계가 있습니다.

X = Dx VU1 Dx E1,K = Dr WU1 Dx,

여기서

Dx = diag(Sx),Dr = diag(Sr).

버전 내역

R2019a에 개발됨

모두 확장

참고 항목

| | | | | | (Robust Control Toolbox) | (Robust Control Toolbox) | | (Robust Control Toolbox) | (Robust Control Toolbox)