Re: How to create a request to change a function?

mansing takale <[email protected]> Sat, 1 Feb 2020 16:27:49 +0530
Newsgroups gmane.comp.python.scientific.user
Message-ID <CAGqyK-izvZjnZ28nXECQkizM9F1R6m2+2Rx6XPzZFTGnM7+pTA@mail.gmail.com>
Great, Nice contribution


On Sat, Feb 1, 2020 at 4:11 AM Augusto Dufloth <[email protected]> wrote:

> Thanks for your email!
>
> My point is: for the sake of the formal definition of ode, the function is
> lacking a convenient feature.
>
> Since you have to input as an argument a time array, it would be super
> useful to have the option to also input time-varying arguments of the same
> length as t.
>
> Checking stackoverflow you find that many people would benefit from this
> addition.
>
> Because of the lack of this feature, I had to create my own ODE as a C
> function. In a practical example the time to solve my system was reduced by
> 20 fold. As compared to the solution you provided (and I also tried in the
> past). I believe this could be even faster, but I lack the skills of code
> optimization.
>
> Kind regards
>
>
>
> On Sat, Feb 1, 2020 at 0:18 Fabrice Silva <[email protected]> wrote:
>
>> see https://pastebin.com/TKt12AEE for a readable version of the code
>> sample
>>
>> Le vendredi 31 janvier 2020, Fabrice Silva a écrit :
>>
>> Le vendredi 31 janvier 2020, Augusto Dufloth a écrit :
>>
>> Hello,
>>
>> I have a request to change one of scipy’s function.
>>
>> I am trying to use odeint to integrate a set of equations of motion. My
>> state equations rely on time dependent inputs. And these inputs are numpy
>> arrays.
>>
>> When I do a flight path reconstruction, the inputs comes from the
>> inertial system of the aircraft and I plug it into the state equations, so
>> I get the deterministic position of the aircraft and than I can compare it
>> to the measured values.
>>
>> The issue is that I can’t input an array. Searching stackoverflow I saw
>> solutions using for-loops and assigning an arg for each time step. This is
>> counter productive and create a huge time calculation for long arrays.
>>
>> I created my own C-dll to deal with this for loop issue, but it’s super
>> counter productive.
>>
>> Can we get an option that the input args are arrays if same size of t,
>> and as the state is integrated, the index of the arg follows the states?
>>
>>
>> Hi,
>> As far as I understand, you want to use time-varying parameters (which
>> includes right-hand side terms of ODEs) specified as numpy array (i.e., at
>> discrete time values) while ODEs are defined in the continuous-time domain.
>> Specification of an extrapolation method is required for the well-posedness
>> of the problem: the most trivial is the "Sample-and-hold" process which
>> maintain values until next sample step.
>>
>> One simple solution (maybe one that you arleady tested) is to use the ode
>> class and its integrate method.
>> Adapting the example given in the docs
>>
>> https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.ode.html#scipy.integrate.ode
>>
>> from scipy.integrate import ode
>>
>>
>> def f(t, y, arg1):
>>
>>     return [1j*arg1*y[0] + y[1], -arg1*y[1]**2]
>>
>> def jac(t, y, arg1):
>>
>>     return [[1j*arg1, 1], [0, -arg1*2*y[1]]]
>>
>>
>> r = ode(f, jac).set_integrator('zvode', method='bdf')
>>
>>
>> t = np.arange(0, 10, 1)
>>
>> results = np.empty((len(t), 1 + len(y0)), dtype=float) + np.nan
>>
>>
>> r.set_initial_value([1.0j, 2.0], t[0])
>>
>> for ind in range(len(t) - 1):
>>
>>     r.set_f_params(param[ind]).set_jac_params(param[ind])
>>
>>     tmp_result = r.integrate(t[ind+1])
>>
>>     if not r.successful():
>>
>>         break
>>
>>     results[ind] = tmp_result
>>
>>
>> This introduced a reasonnable overhead in performance while begin quite
>> readable.
>>
>> Best regards
>>
>> Fabrice
>>
>>
>> _______________________________________________
>> SciPy-User mailing list
>> [email protected]
>> https://mail.python.org/mailman/listinfo/scipy-user
>>
> --
> "The greatest challenge to any thinker is stating the problem in a way
> that will allow a solution."
> - Bertrand Russell
> _______________________________________________
> SciPy-User mailing list
> [email protected]
> https://mail.python.org/mailman/listinfo/scipy-user
>


-- 
Sincerely Yours*,*
*Dr. Mansing V. Takale*,
Assistant Professor,
Department of Physics,
Shivaji University,
Kolhapur-416004
 India (M.S.)
Contact: +91-9673041222

_______________________________________________
SciPy-User mailing list
[email protected]
https://mail.python.org/mailman/listinfo/scipy-user