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

dpb
dpb 2017년 11월 30일
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.

댓글을 달려면 로그인하십시오.

 채택된 답변

Alan Weiss
Alan Weiss 2017년 12월 1일
편집: Alan Weiss 2017년 12월 1일

0 개 추천

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

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 2017년 12월 1일
I read you answer wrong! When I corrected it and took out the extra "[]," it worked! Thank you!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Surrogate Optimization에 대해 자세히 알아보기

질문:

2017년 11월 30일

댓글:

2017년 12월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by