Save/use intermediate values on ode solver

4 views (last 30 days)
Thales
Thales on 5 Apr 2019
Commented: Pan Zhao on 17 Aug 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.

Answers (1)

Pan Zhao
Pan Zhao on 10 Aug 2021
I have a similar problem. Did you manage to solve your problem?
  2 Comments
Thales
Thales on 13 Aug 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.

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!