createExitMsg - Fsolve execution Time
5 ビュー (過去 30 日間)
古いコメントを表示
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.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/146192/image.png)
0 件のコメント
回答 (2 件)
Matt J
2014 年 11 月 23 日
編集済み: Matt J
2014 年 11 月 23 日
Try turning the 'Display' option to 'off'.
1 件のコメント
Matt J
2014 年 11 月 24 日
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.
Matt J
2014 年 11 月 23 日
編集済み: Matt J
2014 年 11 月 23 日
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 件のコメント
Matt J
2014 年 11 月 24 日
編集済み: Matt J
2014 年 11 月 24 日
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.
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!