How to build simulation software like Simulink using SciPy?
I wonder how simulation software could be built using SciPy. I tried to do so, but get into troubles as soon as feedback pathes are involved. What I want to achieve is a package, that can be called periodically every T seconds, where all blocks (which are connected to each other) are calculated and results are recorded in blocks that can display signals (scopes). Between the coarse grained T seconds, I create a time vector for odeint, to calculate state vectors between the coarse grained i*T. Without odeint I would have to choose a very small T to approach continuous time situation. I want odeint to do that (and it does), because it's so much faster than some homebrew ode solver. The rule I've implemented to solve a net of blocks is: A block may be calculated as soon as all its predecessors have been calculated. Everything works as expected, if I don't create loops. If I create loops, I only get at the output results of each block at i*T. What I need is a method to get at the output results of each blocks at the times j*Tau (where Tau < T and j = range( T/Tau)) odeint is solving the 1st order differential eq. While having all these difficulties to get at proper results, I really wonder how Simulink is doing all this. Anyone willing to shed some light on this? Kind regards Loretta
You may want to see this page: http://mgltools.scripps.edu/packages/vision And for extra tutorials search for "vision" on showmedo.com On Mon, Aug 17, 2009 at 12:39 AM, loretta <loretta@vol.at> wrote:
I wonder how simulation software could be built using SciPy. I tried to do so, but get into troubles as soon as feedback pathes are involved.
What I want to achieve is a package, that can be called periodically every T seconds, where all blocks (which are connected to each other) are calculated and results are recorded in blocks that can display signals (scopes). Between the coarse grained T seconds, I create a time vector for odeint, to calculate state vectors between the coarse grained i*T.
Without odeint I would have to choose a very small T to approach continuous time situation. I want odeint to do that (and it does), because it's so much faster than some homebrew ode solver.
The rule I've implemented to solve a net of blocks is: A block may be calculated as soon as all its predecessors have been calculated.
Everything works as expected, if I don't create loops. If I create loops, I only get at the output results of each block at i*T. What I need is a method to get at the output results of each blocks at the times j*Tau (where Tau < T and j = range( T/Tau)) odeint is solving the 1st order differential eq.
While having all these difficulties to get at proper results, I really wonder how Simulink is doing all this.
Anyone willing to shed some light on this?
Kind regards Loretta _______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
-- Gökhan, on my way to SciPy09
or look at PyLab_Works http://mientki.ruhosting.nl/data_www/pylab_works/pw_animations_screenshots.h... One of the tricks for closed loop with visual feedback, is to perform more than 1 network calculations in one display loop. So let's say 50 frames per second fr visulization, and 1000 calculations per second. cheers, Stef Gökhan Sever wrote:
You may want to see this page: http://mgltools.scripps.edu/packages/vision
And for extra tutorials search for "vision" on showmedo.com <http://showmedo.com>
On Mon, Aug 17, 2009 at 12:39 AM, loretta <loretta@vol.at <mailto:loretta@vol.at>> wrote:
I wonder how simulation software could be built using SciPy. I tried to do so, but get into troubles as soon as feedback pathes are involved.
What I want to achieve is a package, that can be called periodically every T seconds, where all blocks (which are connected to each other) are calculated and results are recorded in blocks that can display signals (scopes). Between the coarse grained T seconds, I create a time vector for odeint, to calculate state vectors between the coarse grained i*T.
Without odeint I would have to choose a very small T to approach continuous time situation. I want odeint to do that (and it does), because it's so much faster than some homebrew ode solver.
The rule I've implemented to solve a net of blocks is: A block may be calculated as soon as all its predecessors have been calculated.
Everything works as expected, if I don't create loops. If I create loops, I only get at the output results of each block at i*T. What I need is a method to get at the output results of each blocks at the times j*Tau (where Tau < T and j = range( T/Tau)) odeint is solving the 1st order differential eq.
While having all these difficulties to get at proper results, I really wonder how Simulink is doing all this.
Anyone willing to shed some light on this?
Kind regards Loretta _______________________________________________ SciPy-User mailing list SciPy-User@scipy.org <mailto:SciPy-User@scipy.org> http://mail.scipy.org/mailman/listinfo/scipy-user
-- Gökhan, on my way to SciPy09 ------------------------------------------------------------------------
_______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
participants (3)
-
Gökhan Sever
-
loretta
-
Stef Mientki