Hello Everyone,
I'm simulating a system of stiff differential equations of the form using ode15s
Y'= (1./Vector1).*(Matrix1*Y+Matrix2*Y)
Z'= (1./Vector1).*(Matrix1*Z+Matrix2*Z) % the matrix diff eqn for each variable Y, Z is created in a for loop
The vector Y,Z is of size ~1200 and the number of differential equations is ~2400
The total simulation time takes around 570s when
odeset('abstol', 1e-10, 'reltol', 1e-9)
is used for error settings and it reduces by 5 times when the default error settings are used.
I tried to use the profiler and the ode solver takes around 508 s (snapshot ).
I'd like to know if I can speed up the compute time taken by the ode solver. Could someone clarify if the ode solver calls BLAS functions for Matrix operations? I'm using version 2019b
I would be happy to share addional details if the problem explained above isn't clear enough.

2 Kommentare

Ameer Hamza
Ameer Hamza am 14 Nov. 2020
Have you tried ode45()?
Deepa Maheshvare
Deepa Maheshvare am 14 Nov. 2020
Hi, my equations are stiff so I tried using ode15s.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Kiran Felix Robert
Kiran Felix Robert am 16 Dez. 2020

0 Stimmen

Hi Deepa,
The ode15 solver is slow for your specific error tolerances when compared to the default setting because the constraints set by you (1e-10 & 1e-9) are more strict when compared to the default values(1e-3 & 1e-6) .
Please check the odeset documentation for the default values.
To improve the solver speed you can try the following
  1. Increase the error tolerances ( say increase the tolerances to 1e-2 & 1e-3).
  2. Provide the Jacobian explicitly using the ‘Jacobian’ parameter of the ‘odeset’
Kiran Felix Robert

Produkte

Version

R2019b

Tags

Gefragt:

am 14 Nov. 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by