fzero system of non linear equations
2 views (last 30 days)
Show older comments
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.
0 Comments
Answers (1)
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.
0 Comments
See Also
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!