<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    On 8/3/2012 11:02 AM, Ryan Krauss wrote:
    <blockquote
cite="mid:CAAroWSZ0KRxtPRf+37sZOS7TRa6ym85ZaQn_f=P9ryLJkOKEAw@mail.gmail.com"
      type="cite">
      <pre wrap="">I need help speeding up some code I wrote to perform a Runge-Kuta
integration.  I need to do the integration as part of a real-time
control algorithm, so it needs to be fairly fast.
scipy.integrate.odeint does too much error checking to be fast enough.
 My pure Python version was just a little too slow, so I tried coding
it up in Cython.  I have only used Cython once before, so I don't know
if I did it correctly (the .pyx file is attached).

The code runs just fine, but there is almost no speed up.  I think the
core issue is that my dxdt_runge_kuta function gets called about 4000
times per second, so most of my overhead is in the function calls (I
think).  I am running my real-time control algorithm at 500 Hz and I
need at least 2 Runge-Kuta integration steps per real-time steps for
numeric stability.  And the Runge-Kuta algorithm needs to evaluate the
derivative 4 times per times step.  So, 500 Hz * 2 * 4 = 4000 calls
per second.

I also tried coding this up in fortran and using f2py, but I am
getting a type mismatch error I don't understand.  I have a function
that declares its return values as double precision:

double precision function dzdt(x,voltage)

and I declare the variable I want to store the returned value in to
also be double precision:

double precision F,z,vel,accel,zdot1,zdot2,zdot3,zdot4

zdot1 = dzdt(x_prev,volts)

but some how it is not happy.</pre>
    </blockquote>
    <br>
    I'm not much of a Fortran programmer and I may misunderstand the
    above, but have you tried adding dzdt to your double precision
    declaration?<br>
    <br>
    <br>
    <br>
    <blockquote
cite="mid:CAAroWSZ0KRxtPRf+37sZOS7TRa6ym85ZaQn_f=P9ryLJkOKEAw@mail.gmail.com"
      type="cite">
      <pre wrap="">


My C skills are pretty weak (the longer I use Python, the more C I
forget, and I didn't know that much to start with).  I started looking
into Boost as well as using f2py on C code, but I got stuck.


Can anyone either make my Cython or Fortran approaches work or point
me in a different direction?

Thanks,

Ryan
</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
SciPy-User mailing list
<a class="moz-txt-link-abbreviated" href="mailto:SciPy-User@scipy.org">SciPy-User@scipy.org</a>
<a class="moz-txt-link-freetext" href="http://mail.scipy.org/mailman/listinfo/scipy-user">http://mail.scipy.org/mailman/listinfo/scipy-user</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>