Optimize Function with two sums using fmincon

조회 수: 6 (최근 30일)
Meikel Vollmers
Meikel Vollmers 2021년 5월 11일
편집: Matt J 2021년 5월 17일
Hey everybody,
i have to calculate the a(i) to optimize the following function
k = [5,7,11,13]
p = [1:6]
the a(i) have to be between [0,pi/4]. I want to use the fmincon function, but i dont know how to programm the function d. My first try was the following:
k = [5,7,11,13];
p = [1:4];
a0 = [pi/10, pi/8, pi/7, pi/5];
f1 = sum(1./k.^4)*(1.+2.*sum((-1).^p.*cos(k.*a(p)))).^2;
f2 = sum(1./k.^4);
obj = sqrt(f1./f2);
A = [];
B = [];
Aeq = [];
Beq = [];
lb = [0,0,0,0];
ub = [pi/4,pi/4,pi/4,pi/4];
x = fmincon(Sum, a0, A, B, Aeq, Beq, lb, ub);
But this is not working at all. "Error using optimfcnchk (line 117) FUN must be a function, a valid character vector expression, or an inline function object."
Furthermore the code does not provide an overall combination of the parameters, so i tried it this way
Sum = 0;
a = [pi/8, pi/7, pi/6, pi/5];
for k = [5,7,11]
for p = [1:4]
Sum = Sum + sqrt(((1/k.^4) * (1+2*(-1).^p .*cos(k*a(p)).^2) / (1/k^4)));
end
end
A = [];
B = [];
Aeq = [];
Beq = [];
lb = [0,0,0,0];
ub = [pi/4,pi/4,pi/4,pi/4];
x = fmincon(Sum, a, A, B, Aeq, Beq, lb, ub);
But now the function cant be used in fmincon.
Can somebody help me how i can implement the desired funnktion to be optimized with fmincon?
Regards

채택된 답변

Matt J
Matt J 2021년 5월 11일
편집: Matt J 2021년 5월 12일
k = [5,7,11,13];
p = [1:4];
a0 = [pi/10, pi/8, pi/7, pi/5];
weights=(1./k.^4);
weights=weights/sum(weights);
fun = @(a) sum( weights(:).*( 1 + 2*sum( (-1).^p.*cos(k(:).*a) ,2) ).^2 );
A = [];
B = [];
Aeq = [];
Beq = [];
lb = [0,0,0,0];
ub = [pi/4,pi/4,pi/4,pi/4];
x = fmincon(fun, a0, A, B, Aeq, Beq, lb, ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×4
0.1841 0.2809 0.5394 0.5736
  댓글 수: 4
Meikel Vollmers
Meikel Vollmers 2021년 5월 17일
Hey Matt, the fix seems to be working. Now i want to implement a constraint into my function.
and m will be chosen to i.e. 0.7.
I tried the nonlinear constraint this way:
function [c,ceq] = modindex(a,p)
c = [];
ceq = 4/pi.*( 1 + 2*sum( (-1).^p.*cos(a(p)) ,2 ))-0.7;
end
nlcon = @modindex;
x = fmincon(fun, a0, A, B, Aeq, Beq, lb, ub, nlcon)
But the error is "Not enough input arguments." What am i doing wrong?
Matt J
Matt J 2021년 5월 17일
편집: Matt J 2021년 5월 17일
It needs to be,
nlcon = @(a) modindex(a,p);

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Surrogate Optimization에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by