# Step response error when using step

조회 수: 16(최근 30일)
Justin Sheldon 2021년 9월 6일
답변: Paul 2021년 9월 6일
s=tf('s')
s=((-1.0024*(s+55.86)*(s+0.4987))/(s))
%pzmap(s)
zpk(s)
step(s)
I am recieving the error when trying to use the step function.
Error using DynamicSystem/step (line 95)
Cannot simulate the time response of improper (non-causal) models.
Error in test (line 12)
step(s)

댓글을 달려면 로그인하십시오.

### 답변(2개)

Chunru 2021년 9월 6일
Make the system casual (output does not depend on future input) before using step:
s=tf('s');
sys=((-1.0024*(s+55.86)*(s+0.4987))/(s^2)) % this is a casual system
sys = -1.002 s^2 - 56.49 s - 27.92 ---------------------------- s^2 Continuous-time transfer function.
%pzmap(s)
zpk(sys)
ans = -1.0024 (s+55.86) (s+0.4987) ---------------------------- s^2 Continuous-time zero/pole/gain model.
step(sys) ##### 댓글 수: 0표시숨기기 이전 댓글 수: -1

댓글을 달려면 로그인하십시오.

Paul 2021년 9월 6일
An improper transfer function has a numerator with higher order than the denominator. In your case, the numerator is second order and the denominator is first order.
If you want to approximate the step response, you can augment the transfer function with an additional high frequency pole so that the numerator and denominator are both second order:
s = tf('s');
sys = ((-1.0024*(s+55.86)*(s+0.4987))/(s));
aporoximatesys = sys*tf(1,[.0001 1]);
Now you can plot the step response of approximatesys (make sure you pick a reasonably large final time), but it's only an approximation.
If you want the exact solution, you'll need to work it out by hand or use the Symbolic Math Toolbox. But the solution will be difficult to plot exactly.

댓글을 달려면 로그인하십시오.

R2021a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!