lsim giving NaN output for zero input

Hi,
I have a system with frequency and phase response as shown. The system is unstable with one pole on the right half of s-plane. If input is x=[0 0 0] output through lsim is NaN. How can this issue be solved ? Please help. Thank you.
Zeros=(-37436128.4318415 + 29344189.3569776i , -37436128.4318415 - 29344189.3569776i , -4398673.13805009 + 4099882.75353130i , -4398673.13805009 - 4099882.75353130i, -632969.549556042 + 0.00000000000000i)
Poles=( -1105299964.29975 + 0.00000000000000i, -102844523.541346 + 0.00000000000000i, -23575505.1105442 + 30425526.2059357i, -23575505.1105442 - 30425526.2059357i, 24762584.8470421 + 0.00000000000000i)
Gain k = -8.8777e+04

 Accepted Answer

I am getting zero output for zero input if that's what you are looking for. Check how you are using lsim.
Zeros=[-37436128.4318415 + 29344189.3569776i , -37436128.4318415 - 29344189.3569776i , -4398673.13805009 + 4099882.75353130i , -4398673.13805009 - 4099882.75353130i, -632969.549556042 + 0.00000000000000i];
Poles=[ -1105299964.29975 + 0.00000000000000i, -102844523.541346 + 0.00000000000000i, -23575505.1105442 + 30425526.2059357i, -23575505.1105442 - 30425526.2059357i, 24762584.8470421 + 0.00000000000000i];
k = -8.8777e+04;
sys=zpk(Zeros,Poles,k) % Define your system
t=0:0.1:1; % lets say we run the simulation for 1 second
x=zeros(1,numel(t)); % all zero input till end of simulation
lsim(sys,x,t)

5 Comments

Zeros=[-37436128.4318415 + 29344189.3569776i , -37436128.4318415 - 29344189.3569776i , -4398673.13805009 + 4099882.75353130i , -4398673.13805009 - 4099882.75353130i, -632969.549556042 + 0.00000000000000i];
Poles=[ -1105299964.29975 + 0.00000000000000i, -102844523.541346 + 0.00000000000000i, -23575505.1105442 + 30425526.2059357i, -23575505.1105442 - 30425526.2059357i, 24762584.8470421 + 0.00000000000000i];
k = -8.8777e+04;
sys=zpk(Zeros,Poles,k) % Define your system
t=0:0.1:1; % lets say we run the simulation for 1 second
x=zeros(1,numel(t)); % all zero input till end of simulation
[y,t1]=lsim(sys,x,t)
plot(t1,y);
Here y is NaN and there is no plot.
Raj
Raj on 27 May 2019
Edited: Raj on 27 May 2019
NaN doesn't mean error. There may be many reasons for getting a NaN output. As a way around here, I suggest using 'filter' command instead of 'lsim'. Something like this:
Zeros=[-37436128.4318415 + 29344189.3569776i , -37436128.4318415 - 29344189.3569776i , -4398673.13805009 + 4099882.75353130i , -4398673.13805009 - 4099882.75353130i, -632969.549556042 + 0.00000000000000i];
Poles=[ -1105299964.29975 + 0.00000000000000i, -102844523.541346 + 0.00000000000000i, -23575505.1105442 + 30425526.2059357i, -23575505.1105442 - 30425526.2059357i, 24762584.8470421 + 0.00000000000000i];
k = -8.8777e+04;
sys=zpk(Zeros,Poles,k) % Define your system
%t=0:0.1:1; % lets say we run the simulation for 1 second
dt = 1/10;
t = dt*(0:10);
x=zeros(1,numel(t)); % all zero input till end of simulation
%lsim(sys,x,t)
[num den]=tfdata(sys)
y=filter(cell2mat(num),cell2mat(den),x)
plot(t,y);
Hope this helps!!
Thank you.
Can you please explain the difference betweeen lsim and filter? Is filter only for discrete time systems?
I have edited my previous answer a bit. Please take care of that.
You are right about point that filter is for discrete time systems. For details see
and
Thanks a lot:)

Sign in to comment.

More Answers (0)

Asked:

on 27 May 2019

Commented:

on 28 May 2019

Community Treasure Hunt

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

Start Hunting!