MATLAB Answers

Step response error when using step

16 views (last 30 days)
Justin Sheldon
Justin Sheldon on 6 Sep 2021
Answered: Paul on 6 Sep 2021
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)

Answers (2)

Chunru
Chunru on 6 Sep 2021
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)

Paul
Paul on 6 Sep 2021
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.

Tags

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!