이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

lsim

임의의 입력에 대한 동적 시스템의 시간 응답 시뮬레이션

구문

lsim(sys,u,t)
lsim(sys,u,t,x0)
lsim(sys,u,t,x0,method)
lsim(sys1,...,sysn,u,t)
lsim(sys1,LineSpec1,...,sysN,LineSpecN,u,t)
y = lsim(___)
[y,t,x] = lsim(___)
lsim(sys)

설명

lsim은 임의의 입력에 대한 연속 또는 이산 선형 시스템의 (시간) 응답을 시뮬레이션합니다. 좌변의 인수 없이 호출할 경우 lsim은 화면에 응답을 플로팅합니다.

lsim(sys,u,t)는 입력 이력, t,u에 대한 동적 시스템 모델 sys의 시간 응답의 플롯을 생성합니다. 벡터 t는 시뮬레이션에 대한 시간 샘플을 지정하며(단위: sysTimeUnit 속성에 지정된 시스템 시간), 규칙적인 간격의 시간 샘플로 구성됩니다.

t = 0:dt:Tfinal

입력 u는 행 수가 시간 샘플의 개수(length(t))와 같고 열 수가 시스템 입력 개수와 같은 배열입니다. 예를 들어, sys가 SISO 시스템이면 u는 tx1 벡터입니다. sys에 입력이 3개 있으면 u는 tx3 배열입니다. 각 행 u(i,:)는 시간 샘플 t(i)에서의 입력값을 지정합니다. 신호 u도 플롯에 표시됩니다.

모델 sys는 연속 모델 또는 이산 모델일 수 있고 SISO 또는 MIMO일 수 있습니다. 이산시간인 경우, u는 시스템과 동일한 레이트로 샘플링되어야 합니다. 이때 입력 t는 중복이므로 생략하거나 빈 행렬로 설정할 수 있습니다. 연속시간인 경우, 연속 모델을 이산화하는 데 시간 샘플링 dt = t(2)-t(1)이 사용됩니다. dt가 너무 큰 경우(언더샘플링) lsim은 보다 적절한 샘플 시간을 사용하라고 제안하는 경고를 발생시키기는 하지만 결국에는 지정된 샘플 시간을 사용합니다. 샘플 시간에 대한 논의는 알고리즘 항목을 참조하십시오.

lsim(sys,u,t,x0) 은 시스템 상태에 대한 초기 조건 x0을 추가로 지정합니다. 이 구문은 sys가 상태공간 모델인 경우에만 적용됩니다. x0은 요소가 sys의 대응하는 상태의 초기값인 벡터입니다.

lsim(sys,u,t,x0,method)sys가 연속시간 시스템일 때 샘플 사이에 입력값을 보간할 방법을 명시적으로 지정합니다. method를 다음 값 중 하나로 지정합니다.

  • 'zoh' — 영차수 유지 사용

  • 'foh' — 선형 보간(일차수 유지) 사용

방법을 지정하지 않을 경우 lsim은 신호 u의 매끄러운 정도를 기준으로 보간 방법을 자동으로 선택합니다.

lsim(sys1,...,sysn,u,t)는 동일한 입력 이력 t,u에 대한 여러 동적 시스템 모델의 응답을 시뮬레이션하고 이들 응답을 단일 Figure에 플로팅합니다. 여러 모델의 응답을 계산할 때 x0method 입력 인수를 사용할 수도 있습니다.

lsim(sys1,LineSpec1,...,sysN,LineSpecN,u,t)는 플롯의 각 시스템 응답의 선 스타일, 마커 및 색을 지정합니다. 이 구문에서는 x0method 입력 인수도 사용할 수 있습니다. 각 LineSpec 인수는 1개, 2개 또는 3개의 문자로 구성된 벡터로 지정됩니다. 문자는 어떤 순서로 지정해도 좋습니다. 예를 들어, 다음 코드는 sys1의 응답을 노란색 점선으로 플로팅하고 sys2의 응답을 녹색 파선으로 플로팅합니다.

lsim(sys1,'y:',sys2,'g--',u,t,x0)

이 인수를 구성하는 방법에 대한 자세한 내용은 plot 함수의 LineSpec 입력 인수를 참조하십시오.

y = lsim(___)은 입력과 동일한 시간(t)에 샘플링된 시스템 응답 y를 반환합니다. 출력 y는 행 수가 시간 샘플의 개수(length(t))와 같고 열 수가 시스템 출력 개수와 같은 배열입니다. 플롯이 화면에 그려지지는 않습니다. 이 구문은 LineSpec 인수를 제외한 위에 열거된 구문에 나와 있는 입력 인수를 원하는 대로 조합하여 사용할 수 있습니다.

[y,t,x] = lsim(___)은 시뮬레이션에 사용되는 시간 벡터 t와 상태 궤적 x(상태공간 모델에만 해당)도 반환합니다. 출력 x는 행 수가 시간 샘플의 개수(length(t))와 같고 열 수가 시스템 상태 개수와 같습니다. 이 구문은 LineSpec 인수를 제외한 위에 열거된 구문에 나와 있는 입력 인수를 원하는 대로 조합하여 사용할 수 있습니다.

lsim(sys)는 선형 시뮬레이션 툴 GUI를 엽니다. 이 GUI를 사용하는 방법에 대한 자세한 내용은 선형 시뮬레이션 툴로 작업하기 항목을 참조하십시오.

예제

모두 축소

주기가 4초인 구형파에 대한 다음 시스템의 응답을 시뮬레이션하고 플로팅합니다.

H(s)=[2s2+5s+1s2+2s+3s-1s2+s+5].

전달 함수를 만들고, gensig를 사용하여 구형파를 생성합니다. 10초 동안 0.1초마다 샘플링합니다.

H = [tf([2 5 1],[1 2 3]);tf([1 -1],[1 1 5])];
[u,t] = gensig('square',4,10,0.1);

그런 다음 lsim을 사용하여 시뮬레이션합니다.

lsim(H,u,t)

플롯에 지정한 신호와 응답이 모두 표시됩니다.

모델을 추정할 추정 데이터를 불러옵니다.

load(fullfile(matlabroot,'toolbox','ident','iddemos','data','dcmotordata'));
z = iddata(y,u,0.1,'Name','DC-motor');

z는 샘플 시간이 0.1초인 1-입력 2-출력 추정 데이터를 포함하는 iddata 객체입니다.

추정 데이터 z를 사용하여 4차 상태공간 모델을 추정합니다.

[sys,x0] = n4sid(z,4);

sys는 추정된 모델이고 x0은 추정된 초기 상태입니다.

추정에 사용된 것과 동일한 입력 데이터와 추정 명령이 반환한 초기 상태를 사용하여 sys의 응답을 시뮬레이션합니다.

[y,t,x] = lsim(sys,z.InputData,[],x0);

여기서 y는 시스템 응답이고 t는 시뮬레이션에 사용된 시간 벡터이고 x는 상태 궤적입니다.

두 출력에 대해 시뮬레이션된 응답 y를 측정된 응답 z.OutputData와 비교합니다.

subplot(211), plot(t,z.OutputData(:,1),'k',t,y(:,1),'r')
legend('Measured','Simulated')
subplot(212), plot(t,z.OutputData(:,2),'k',t,y(:,2),'r')
legend('Measured','Simulated')

알고리즘

이산시간 시스템은 ltitr(상태공간) 또는 filter(전달 함수 및 영점-극점-이득)를 사용하여 시뮬레이션됩니다.

연속시간 시스템은 'zoh' 또는 'foh' 방법을 사용하여 c2d로 이산화됩니다('foh'는 매끄러운 입력 신호에 대해 사용되고 'zoh'는 펄스나 구형파와 같은 불연속 신호에 대해 사용됨). 샘플 시간은 사용자 제공 시간 샘플 t 사이의 간격 dt로 설정됩니다.

샘플 시간의 선택은 시뮬레이션 결과에 크게 영향을 미칠 수 있습니다. 그 이유를 알아보기 위해 다음과 같은 2차 모델을 살펴보겠습니다.

H(s)=ω2s2+2s+ω2,ω=62.83

주기가 1초인 구형파에 대한 응답을 시뮬레이션하려면 다음과 같이 코드를 입력하십시오.

w2 = 62.83^2;
h = tf(w2,[1 2 w2]);
t = 0:0.1:5;                % vector of time samples
u = (rem(t,1) >= 0.5);        % square wave values
lsim(h,u,t)

lsim은 지정된 샘플 시간을 계산하고 다음과 같은 경고를 발생시킵니다.

Warning: Input signal is undersampled. Sample every 0.016 sec or 
faster.

이 응답을 개선하려면 권장 샘플 시간을 사용하여 H(s)를 이산화하십시오.

dt = 0.016;
ts = 0:dt:5;
us = (rem(ts,1) >= 0.5);
hd = c2d(h,dt);
lsim(hd,us,ts)

이 응답은 언더샘플링되었을 때에는 숨겨져 있던 강한 진동 동작을 보입니다.

R2006a 이전에 개발됨