Save/use intermediate values on ode solver
4 views (last 30 days)
Show older comments
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.
0 Comments
Answers (1)
See Also
Categories
Find more on Ordinary Differential Equations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!