fzero system of non linear equations

5 views (last 30 days)
Bastian  Andersen
Bastian Andersen on 7 Jul 2017
Answered: Prashant Arora on 18 Jul 2017
Hi
I am trying to solve a system of non linear equations, which is embedded in a function run by a ODE solver. At the current point I am doing it by a for loop, however the computation time is really high (around real time of 10+ hour dynamic simulations), so I would like to bring it down. I've found this step to be very time consuming
For the current simulations par.NT = 13, size(ics) = [13,3], size(xn) = [13,2], size(par.Tb) = [1,2] and I do initialize the variables TB and y. yfun is a function which is called (which calls various other functions)
for n = 1:par.NT
TB(n)=fzero(@(T) sum(yfun(ics,T,par,n))-1,sum(xn(n,:).*par.Tb));
y(n,:) = yfun(ics,TB(n),par,n);
end
Do you have any tips on making this faster? I have been trying to vectorize the loop in various ways, use arrayfun, fsolve... but I can't seem to increase the speed. I do submit my code to HPC clusters. Using parfor decreases the speed drastically.

Answers (1)

Prashant Arora
Prashant Arora on 18 Jul 2017
Hi Bastian,
Which part of the for loop is more expensive? Have you tried profiling the yfun function? I believe it takes a structure argument, which can sometimes increase computation time to get fields.

Categories

Find more on Systems of Nonlinear 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!