Use of "fsolve" when in the definition of function there is "sum"
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Hello everybody,
I have this code:
X0A=[L/2; (ei+es)/2; nt/2];
[x,fval,exitflag]=fsolve(@equilibriumA, X0A)
and my function is:
function F=equilibriumA(X)
F(1)= a*X(1)/X(2)+b*X(1)/X(2)*(X(2)-c)-d*X(2)/X(1)*sum(BR(1:floor(X(3)),1)-X(1))-N;
F(2)= (a*X(1)/X(2))*(L/2-(X(1)*(1-2/3*c/X(2))))+(b*X(1)/X(2)*(X(2)-c))*(L/2-(X(1)/2*(1-c/X(2))))+(d*X(2)/X(1)*sum(BR(1:floor(X(3)),1)-X(1)))*(((BR(1:floor(X(3)),1)-X(1))'*BR(1:floor(X(3)),1)/sum(BR(1:floor(X(3)),1)-X(1)))-L/2)-M;
F(3)=floor(X(3))-floor((L-X(1))/p)+1;
where:
X(1), X(2), X(3) are the unknowns and
X(1) belongs to real numbers and belongs to the interval [0, L]
X(2) belongs to real numbers and belongs to the interval [ei,es]
X(3) belongs to natural numbers belongs to the interval [0, nt]
a, b, c, d, L, N, M, p, are knowns and are the real numbers
BR is an array known nt x 2
I get the following error:
"Optimizer appears to be converging to a point which is not a root.
Norm of relative change in X is less than max(options.TolX^2,eps) but
sum-of-squares of function values is greater than or equal to sqrt(options.TolFun)
Try again with a new starting guess"
I think the problem is the use of sum in the F definition.
Any advice for my problem?
Furthermore, I have another problem:
I have a second similar case of system to resolve, the code is:
X0B=[L/2; ei/2; nt/2];
[x,fval,exitflag]=fsolve(@equilibriumB, X0B)
and the function is:
function F=equilibriumB(X)
F(1)= b*X(1)*X(2)/2 ...
-d*X(2)/X(1)*sum(BARRE(1:floor(X(3)),1)-X(1))...
-N;
F(2)= b*X(1)*X(2)/2*(L/2-X(1)/3) ...
+(d*X(2)/X(1)*sum(BR(1:floor(X(3)),1)-X(1)))*(((BR(1:floor(X(3)),1)-X(1))'*BR(1:floor(X(3)),1)/sum(BR(1:floor(X(3)),1)-X(1)))-L/2)...
-M;
F(3)=floor(X(3))-floor((L-X(1))/p)+1;
in this case:
X(1) belongs to the interval [0, L]
X(2) belongs to the interval [0,ei]
X(3) belongs to the interval [0, nt]
I get the following error:
"??? In an assignment A(I) = B, the number of elements in B and
I must be the same.
Error in ==> equilibriumB at 30
F(1)=b*X(1)*X(2)/2 ...
Error in ==> fsolve at 254
fuser = feval(funfcn{3},x,varargin{:});
Error in ==> VR_DT200 at 98
[x,fval,exitflag]=fsolve(@equilibriumB,X0B);
Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue."
Why?
Thank you!
1 comentario
Respuesta aceptada
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!