createExitMsg - Fsolve execution Time

3 visualizaciones (últimos 30 días)
Brandon
Brandon el 23 de Nov. de 2014
Comentada: Brandon el 25 de Nov. de 2014
There is a function being called by fsolve called "createExitMsg." I am not using the exit information for anything. Is there anyway I can prevent fsolve from calling this function to save time. My function DetermineSumAlpha is going to be called several thousands of times, so I would love to get my execution time down the best I can.
I've tried commenting out these lines of code in MATLAB, but since it is an internal function I am getting an access denied error.

Respuestas (2)

Matt J
Matt J el 23 de Nov. de 2014
Editada: Matt J el 23 de Nov. de 2014
Try turning the 'Display' option to 'off'.
  1 comentario
Matt J
Matt J el 24 de Nov. de 2014
Brandon Commented:
Display options are currently set to off:
persistent options
if isempty(options)
options=optimset('Display','off', 'Jacobian','on', 'TolFun', 1E-3, 'TolX', 1E-3);
else
% Already set, do nothing
end
% options=optimset('Display','on');
% Solve for Theta
Theata = fsolve(@FindTheta, Theta0(1:2), options);
When I turn the display options to "on" it takes approximately 0.7 seconds to createExitMsg. It appears that fsolve calls createExitMsg even if display is set to of and only displays the message when it is set to on.

Iniciar sesión para comentar.


Matt J
Matt J el 23 de Nov. de 2014
Editada: Matt J el 23 de Nov. de 2014
My function DetermineSumAlpha is going to be called several thousands of times
If you are calling fsolve several thousand times, you should try to combine the thousands of equations into a single system so that you only have to call fsolve once (or fewer times). That way, service and set-up operations like createExitMsg are only done once and don't dominate the execution time.
  3 comentarios
Matt J
Matt J el 24 de Nov. de 2014
Editada: Matt J el 24 de Nov. de 2014
Correct me if I am wrong, but my thoughts are that the convergence rate increase exponentially as the size of the system increases.
Not if there's no coupling between the systems. Since the Jacobian is then block diagonal, variables in each system get updated just the same as if you had solved each system separately. You can also use the JacobPattern option (if using the Trust-Region Reflective algorithm) to tell the code that the Jacobian is sparse and block diagonal, or supply your own sparse Jacobian calculation in whatever algorithm you're running.
Brandon
Brandon el 25 de Nov. de 2014
I am defining a custom jacobian matrix, so that is being determined analytically rather than through finite difference methods. I have already gone through several of the solvers and determined that the default solver is providing the best results in terms of time.
I am not able to solve all of the equations simultaneous for all 200 cases because each set of equations has the potential of up to 4 solutions. I am using the results of the previous iteration as an initial guess into the next solution to guarantee that I am converging on the correct one.
I've since switched to a more powerful computer with a newer version of MATLAB. I've gotten a considerable increase in speed just from that.
I guess that will do.
Thanks

Iniciar sesión para comentar.

Categorías

Más información sobre Solver Outputs and Iterative Display en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by