slp method to minimize function
8 views (last 30 days)
Show older comments
Error:
Error using SLP>f_SLPclass (line 26)
x should be 5 elements long, but instead it is length 2
Error in SLP (line 6)
[f,g]=f_SLPclass(x);
clear;
clc;
x=[0;10];
Tolx=0.01;
TolCon=0.01;
[f,g]=f_SLPclass(x);
[gradf,gradg]=g_SLPclass(x);
coverged=false;
iter=0;
while converged
c=gradf';
a=gradg';
b=-g;
dx=linprog(c,a,b,[],[]);
x=x+dx;
[f,g]=f_SLPclass(x);
[gradf,gradg]=g_SLPclass(x);
iter=iter+1;
converged=max(abs(dx)<Tolx)&& max(g)<TolCon;
end
fprintf('\n number of iteration %f\n',iter);
fprintf('\n Optimum Point: (%f,%f,%f,%f,%f)\n',x1,x2,x3,x4,x5);
function [f,g]=f_SLPclass(x) %return outputs
assert(length(x)==5, "x should be 5 elements long, but instead it is length " + length(x));
xcell=num2cell(x);
[x1,x2,x3,x4,x5]= deal(xcell{:});
f=0.0624*(x1+x2+x3+x4+x5);
g=-1+61/x1^3 +37/x2^3 +19/x3^3 +7/x4^3 +1/x5^3;
end
function [gradf,gradg]=g_SLPclass(x)
assert(length(x)==5, "x should be 5 elements long, but it is only length " + length(x));
xcell=num2cell(x);
[x1,x2,x3,x4,x5]= deal(xcell{:});
gradf=0.312;
gradg=-183/x1^4 - 111/x2^4 -57/x3^4 -21/x4^4 -3/x5^4;
end
Answers (1)
Catalytic
on 8 Mar 2021
Edited: Catalytic
on 8 Mar 2021
The error message was generated by your own code, in this line
assert(length(x)==5, "x should be 5 elements long, but instead it is length " + length(x));
Surely you put it there for a reason. Why aren't you passing a 5-element vector when your function clearly requires it?
See Also
Categories
Find more on Whos in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!