Save/use intermediate values on ode solver

4 visualizzazioni (ultimi 30 giorni)
Thales
Thales il 5 Apr 2019
Commentato: Pan Zhao il 17 Ago 2021
I am doing a time integration of a system of ODEs using a stiff solver (ode15s). It is working, but I want to speed things up.
The system of equations is given in state space form:
function [dx] = fun(t,x,M,C,K,other_parameters)
% Mx'' + Cx' + Kx = F(t)
% BUNCH OF CALCULATIONS
F = myfun(x,t);
A = [zeros(n) eye(n) ; -M\K -M\C];
b = M\F;
dx = A*x + b
end
The trick part here is the forcing function F. It is highly nonlinear and depends on the x and t parameters. It uses the x parameters to solve a Poisson-type 2D equation (by the Finite Volume method). The force F is proportional to the Poisson equation solution.
function [F] = solveP()
% initialize solution
Phi = zeros(Ni,Nj);
% solve iteratively
% ...
% calculate F
F = sum(Phi(:)); % discrete integration over domain
end
Solving the Poisson equation by a iterative method requires an initial condition, which I set to zero (Phi=zeros(Ni,Nj)). I thought I could improve the speed of calculations by providing a better initial estimative of the ϕ field (a better initial condition would take faster to reach the sought answer). The optimal initial condition I can think (besides ) is the value of the ϕ field obtained in the previous iteration (the last step) of the ode solver (.
Bottom line is: how do I use/save intermediate values in the ode solution?
PS: I tried using the persistent variables, but that is not a good solution. The ode solver calculates the function in several points before advancing in time. The persistent variable saves the converged ϕ field every time the ode calls the odefun fun. That is not exactly what I want.

Risposte (1)

Pan Zhao
Pan Zhao il 10 Ago 2021
I have a similar problem. Did you manage to solve your problem?
  2 Commenti
Thales
Thales il 13 Ago 2021
Unfortunately, no.
The best I could come up with was to write my own integrator. Clearly, it is not as good as MATLAB's built-in ode, but I can return other variables in the function fun being integrated and use them in the time marching scheme.
Pan Zhao
Pan Zhao il 17 Ago 2021
@Thales Thank you for the update.

Accedi per commentare.

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by