slp method to minimize function

3 ビュー (過去 30 日間)
Ous Chkiri
Ous Chkiri 2021 年 3 月 8 日
コメント済み: Rena Berman 2021 年 5 月 6 日
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
  1 件のコメント
Rena Berman
Rena Berman 2021 年 5 月 6 日
(Answers Dev) Restored edit

サインインしてコメントする。

回答 (1 件)

Catalytic
Catalytic 2021 年 3 月 8 日
編集済み: Catalytic 2021 年 3 月 8 日
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?
  1 件のコメント
Ous Chkiri
Ous Chkiri 2021 年 3 月 8 日
Because I have x1,x2.x3,x4 and x5

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeElectrical Block Libraries についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by