[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-gsl] ODE for state space system
From: |
toso |
Subject: |
[Help-gsl] ODE for state space system |
Date: |
Wed, 12 Apr 2006 16:55:30 +0200 |
Hi all,
I'm writing a code to compute the time response of a mechanical system
written in a state space form
dot(x) = A x + B u
y = C x + D u
I use for the first system of equation the gsl rk4 ode solver and an then I
evaluate the system outputs (y). The problem arise when I compare the
results with matlab (same system, same solver).
I have tried two different ways t calculate y. The pseudo code that I use
is:
/* evaluate state evolution and then calculate outputs */
while( t < t_end )
{
u = new_inputs();
gsl_odeiv_step_apply( .. );
update_state_derivatives( .. );
y = C x + D u;
t += dt;
}
/* calculate outputs and then evaluate state evolution*/
while( t < t_end )
{
u = new_inputs();
y = C x + D u;
gsl_odeiv_step_apply( .. );
update_state_derivatives( .. );
t += dt;
}
I thought the second way was corrected but it gives worse results with
respect to the first one.
The example that I've tried has 4 states with natural frequencies 4 and 50
Hz, the input is a chirp signal between 0.1 and 100 Hz, and if I sample it
at 512 Hz the error is more than 40% while using 2048 Hz decrease to 4% but
I think it's still a lot.
Do anyone has any idea?
Alessandro Toso
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Help-gsl] ODE for state space system,
toso <=