Turn off display for fsolve during a loop

7 vues (au cours des 30 derniers jours)
Hoskins Lab
Hoskins Lab le 30 Nov 2017
Commenté : Hoskins Lab le 1 Déc 2017
I am using a loop function to perform fsolve on a matrix. I am adapting a script provided by another person which would be applied to one condition at a time and looping it so I can apply it to a set of 1,000 results. Here is how I have it set up:
Ap=bts2(:,1);
A1=(1+Ap.^2).^-1;
short2longratio=A1./(1-A1);
for v = 1:1:1000
kin(v,:) = fsolve('sigma54_kinetics_fit_values_r12_weight_ratio',[.01 .01 .005],[],0,bts2(v,3),bts2(v,2),short2longratio(v));
end
This means that I end up seeing the text for "Equation solved. ..." x1,000 when I run this loop. I tried the previously recommended answer to change the settings (see below), but it didn't work.
for v = 1:1:1000
opts = optimset('Diagnostics','off', 'Display','off');
kin(v,:) = fsolve('sigma54_kinetics_fit_values_r12_weight_ratio',[.01 .01 .005],[],0,bts2(v,3),bts2(v,2),short2longratio(v), opts);
end
By changing the end of "fsolve('sigma54..." from "...ratio(v));" to "...ratio(v), opts);" the script/function breaks. If I just have the line for "opts = optimset..." and the regular ending of the fsolve function the display appears x1,000. Any solution?
  1 commentaire
dpb
dpb le 30 Nov 2017
Doc for fsolve and optimset says to use <optimoptions> instead for everything except fzero, fminbnd, fminsearch, and lsqnonneg. Whether that'll fix the issue I don't know, but I'd certainly start there.

Connectez-vous pour commenter.

Réponse acceptée

Alan Weiss
Alan Weiss le 1 Déc 2017
Modifié(e) : Alan Weiss le 1 Déc 2017
Your call uses an undocumented (but still supported) syntax for passing extra parameters.
Place your options into the third argument, the one that is currently [].
kin(v,:) = fsolve('sigma54_kinetics_fit_values_r12_weight_ratio',...
[.01 .01 .005],opts,0,bts2(v,3),bts2(v,2),short2longratio(v));
Also, don't set the options inside the loop, it is a time-consuming process. Set them before the loop.
Alan Weiss
MATLAB mathematical toolbox documentation
  2 commentaires
Hoskins Lab
Hoskins Lab le 1 Déc 2017
I tried your suggestion and ran the following:
Ap=bts2(:,1);
A1=(1+Ap.^2).^-1;
short2longratio=A1./(1-A1);
opts = optimset('Diagnostics','off', 'Display','off');
for v = 1:1:1000
kin(v,:) = fsolve('sigma54_kinetics_fit_values_r12_weight_ratio',[.01 .01 .005],opts,[],0,bts2(v,3),bts2(v,2),short2longratio(v));
end
I got the following error message:
Error using sigma54_kinetics_fit_values_r12_weight_ratio
Too many input arguments.
Error in fsolve (line 219)
fuser = feval(funfcn{3},x,varargin{:});
Error in LOOPTESTv3 (line 6)
kin(v,:) = fsolve('sigma54_kinetics_fit_values_r12_weight_ratio',[.01 .01
.005],[],0,bts2(v,3),bts2(v,2),short2longratio(v),opts);
Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.
Hoskins Lab
Hoskins Lab le 1 Déc 2017
I read you answer wrong! When I corrected it and took out the extra "[]," it worked! Thank you!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by