New answers tagged

3

I think DifferentialEquations.jl in Julia has a very comprehensive suite of ODE solvers, including the ones you mentioned (Adams-Bashfort and GBS) and many others. This Julia library is becoming more and more popular nowadays, is well documented, and has quite the coverage here. Note: Chris Rackauckas is a core contributor to this project and is pretty ...


10

DifferentialEquations.jl library is a library for a high level language (Julia) which has tools for automatically transforming the ODE system to an optimized version for parallel solution on GPUs. There are two forms of parallelism that can be employed: array-based parallelism for large ODE systems and parameter parallelism for parameter studies on ...


3

I think you have a problem due to a misunderstanding of how ODE45 works. If I'm understanding your problem correctly, you want to plot the behavior at certain times, but you are concerned that you can't do this with ODE45. This is a misunderstanding of how ODE45 works. ODE45 uses adaptive time-stepping, and will never use the time array you give it. It will ...


2

Every model is only as good as the approximations that are made in deriving it. Sometimes the approximations that reduce a PDE model to an ODE model are so good that the resulting ODE model is accurate enough to describe everything we want to know about the object. Here's an example: Think about a spacecraft traveling through the solar system. A complete ...


2

What about avoiding to construct the matrix by using its structure? def odefunc(t,u): dotu = zeros_like(u) T1 = T1func(t) T2 = T2func(t) dotu[0::2] += T1*u[1::2] dotu[1::2] += T1*u[0::2] dotu[1:-1:2] += T2*u[2::2] dotu[2::2] += T2*u[1:-1:2] return dotu This only works if the matrix size is even and not divisible by 4, like ...


0

Of course you can hack something together that might work. logger = [] # visible in odefunc def odefunc(P,t): if logger: # if the list is not empty if logger[-1]: # then read the last values pass # and do something based on them **your complex math here*** some_calculated_value = 0.123 logger.append([t, ...


1

It is possible that since you are exactly at equilibrium, your integrator is taking step sizes too large to resolve your forcing function. This is especially bad for your problem because the forcing function is discontinuous with little support, so the chances that the integrator time steps line up with the discontinuities is pretty low. This is typically ...


Top 50 recent answers are included