강의자료 · 제어공학1

Control Engineering 1 · Week 14 · Stability와 Performance Index 비교

본인 사본에서 코드와 작성란을 직접 수정하세요. 이름: ⟦직접 입력⟧ / 학번: ⟦직접 입력⟧

실행 방법

Live Editor에서 코드 안을 클릭하고 Run Section으로 현재 Section을 실행하세요(Windows/Linux Ctrl+Enter, Mac ⌘+Enter). Run은 문서 전체를 실행합니다. 설명·작성란은 직접 편집하세요.
처음에는 위에서부터 실행하고, 값을 바꾼 Section은 다시 실행하세요. 변수가 없다는 오류가 나면 앞 Section부터 실행하세요. 출력은 코드 아래 또는 오른쪽에 표시됩니다.
환경: MATLAB Online과 Control System Toolbox.

1. Closed-loop 모델과 최종값 계산

아래 계산을 먼저 수행한 뒤 MATLAB 결과와 비교하세요.
  • 실습용 Live Script의 ‘3. Tracking Error와 비교점 Error’ 코드의 G(s)=1s+2G(s)=\frac1{s+2}, H(s)=2s+4H(s)=\frac2{s+4}를 사용하되 먼저 K=2K=2인 경우를 손으로 계산하세요.
  • Y=GUY=GU에 U=K(R−HY)U=K(R-HY)를 대입하세요. Y 항을 한쪽으로 모아 YR\frac{Y}{R}을 정리한 뒤, 분모의 근을 구해 Pole의 실수부가 모두 음수인지 판정하세요.
  • Unit Step의 최종 출력과 센서 측정값을 구한 뒤 r−yr-y와 r−Hyr-Hy의 최종값을 각각 계산하세요.
  • 그 다음 K를 2로 설정해 코드를 실행하고 두 결과를 대조하세요.
  • 이미 계산한 K=2K=2는 반복하지 않고 K=4,8K=4,8로 이어갑니다.
  • Routh 활동도 기존 안내대로 첫 열을 직접 유도한 뒤 roots로 확인하세요.
코드 실행 전 — 손으로 계산한 식과 값: ⟦여기에 계산을 적으세요⟧ 코드 실행 후 — 비교할 MATLAB 출력값: ⟦출력값을 적으세요⟧

2. Stability 판별

Pole의 실수부가 0인 경우에는 모든 Pole의 실수부가 음수라는 조건을 만족하지 않습니다. 경계값을 넣었을 때 Pole이 어디에 놓이는지 확인하세요.
실행 전 예상: ⟦직접 입력⟧
polynomials={[1 3 2],[1 1 2 8],[1 0 1]};
for j=1:numel(polynomials)
p=roots(polynomials{j});strictStable=all(real(p)<-1e-9);
disp(p);disp(strictStable);
end
직접 수행:
  1. s3+3s2+2s+Ks^3+3s^2+2s+K의 Routh 첫 열을 유도하고 K∈{1,6,7}K\in\{1,6,7\}을 비교하세요.
  2. K=6K=6에서 Pole을 구하고 실수부가 0인 Pole이 있는지 확인하세요.
  3. 모든 Pole의 실수부가 음수인 경우와 응답이 어떻게 다른지 설명하세요.
% ✍ 직접 작성: 아래에 본인 코드를 추가하세요.
바꾼 조건: ⟦직접 입력⟧
실제 결과: ⟦직접 입력⟧
예상과 차이 및 원인: ⟦직접 입력⟧

3. Tracking Error와 비교점 Error

y는 실제 출력이고 Hy는 센서를 거친 측정값입니다. 목표값에서 각각을 빼면 r−y와 r−Hy가 됩니다. 두 값을 나란히 계산해 센서 때문에 차이가 생기는지 확인합니다.
실행 전 예상: ⟦직접 입력⟧
s=tf('s');K=4;G=1/(s+2);H=2/(s+4);T=feedback(K*G,H);
assert(isstable(T));
tracking=1-dcgain(T);comparator=1-dcgain(H*T);disp([tracking comparator]);
직접 수행:
  1. K∈{2,4,8}K\in\{2,4,8\}에서 목표값에서 실제 출력을 뺀 r−yr-y와, 목표값에서 센서 측정값을 뺀 r−Hyr-Hy를 각각 계산하세요.
  2. 실제 출력이 목표값에 가까운지 판단할 때 사용할 오차가 어느 쪽인지 적으세요.
% ✍ 직접 작성: 아래에 본인 코드를 추가하세요.
바꾼 조건: ⟦직접 입력⟧
실제 결과: ⟦직접 입력⟧
예상과 차이 및 원인: ⟦직접 입력⟧

4. 유한 구간 Performance Index

동일 시간·동일 간격으로 trapz 적분합니다.
실행 전 예상: ⟦직접 입력⟧
s=tf('s');G=1/(s^2+2*s+1);t=(0:.01:20)';
for K=[1 2 4]
T=feedback(K*G,1);[y,~]=step(T,t);e=1-y;
disp([K trapz(t,e.^2) trapz(t,abs(e)) trapz(t,t.*abs(e))]);
end
직접 수행:
  1. ISE 계산에 사용한 Plant G(s)=1/(s2+2s+1)G(s)=1/(s^2+2s+1)와 K에서 종료 시간을 10 s·20 s·40 s로 바꾸어 ISE를 계산하세요.
  2. 사용한 K, 적분 종료 시간, ISE를 표에 기록하세요. 같은 K끼리 10→20 s와 20→40 s에서 ISE가 얼마나 증가했는지 대조하세요.
  3. 증가량이 줄어드는지 보고 적분값이 일정한 값에 가까워지는지 판단하세요. 결과에는 계산한 시간 구간을 함께 적고, 유한시간 적분값과 무한시간 지표를 구별하세요.
% ✍ 직접 작성: 아래에 본인 코드를 추가하세요.
바꾼 조건: ⟦직접 입력⟧
실제 결과: ⟦직접 입력⟧
예상과 차이 및 원인: ⟦직접 입력⟧

5. Optimization과 Approximation

설계 범위와 비교 구간을 명시합니다.
실행 전 예상: ⟦직접 입력⟧
K3=.1:.01:10;ISE=1./K3+.1*K3;[v,idx]=min(ISE);disp([K3(idx),sqrt(10),v]);
s=tf('s');GH=1/(1+11*s/6+s^2+s^3/6);GL=1/(1+1.615*s+.624*s^2);
t=(0:.01:15)';yh=step(GH,t);yl=step(GL,t);
figure;plot(t,yh,t,yl);legend('GH','GL');grid on;disp(max(abs(yh-yl)));
직접 수행:
  1. K3의 검색 범위 0.1–10은 유지하고 간격만 바꿔 최소값 검색을 다시 실행하세요. 변경 전후 검색 간격·최소점을 주는 Gain·10\sqrt{10}과 그 Gain의 절대 차이를 표에 적으세요.
  2. GL의 분모 계수 하나만 1.1배 한 비교 모델을 만드세요. 예를 들어 [numL,denL]=tfdata(GL,'v')로 계수를 꺼내 denL(end)=1.1*denL(end)를 적용한 뒤 tf(numL,denL)로 새 모델을 만들 수 있습니다. 바꾼 계수의 차수와 변경 전후 값을 적으세요.
  3. 같은 t=0:0.01:15에서 max(abs(yh-yl))를 변경 전후 각각 구하세요. 이 최대 절대 차이로 GH에 대한 Approximation 오차가 커졌는지 작아졌는지 적으세요.
% ✍ 직접 작성: 아래에 본인 코드를 추가하세요.
바꾼 조건: ⟦직접 입력⟧
실제 결과: ⟦직접 입력⟧
예상과 차이 및 원인: ⟦직접 입력⟧

반복 숙달과 제출 전 확인

앞의 직접 수행에서 비교한 조건 세 가지를 아래에 정리하세요. 이미 수행한 실험을 추가로 반복할 필요는 없습니다. 예상은 정확한 수치 대신 증가·감소 방향으로 적어도 됩니다.
반복 1 — 조건: ⟦직접 입력⟧ / 예상: ⟦직접 입력⟧ / 실제: ⟦직접 입력⟧
반복 2 — 조건: ⟦직접 입력⟧ / 예상: ⟦직접 입력⟧ / 실제: ⟦직접 입력⟧
반복 3 — 조건: ⟦직접 입력⟧ / 예상: ⟦직접 입력⟧ / 실제: ⟦직접 입력⟧
선택:
예: 허수축 Pole을 Asymptotically Stable로 판정한 경우
  1. p=roots([1 0 1])로 Pole을 구하고, all(real(p)<=0)을 판정식으로 썼을 때의 결과를 기록하세요.
  2. 이 조건과 Asymptotic Stability 판정식 all(real(p)<-1e-9)를 나란히 적으세요. 실수부가 0인 Pole과 음수인 Pole을 구별해, Asymptotic Stability를 판정하도록 조건식만 복구하세요.
코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.
파일명: 이름_학번_14주차.mlx.