fmincon implementing nonlinear constraints

조회 수: 2 (최근 30일)
Reed
Reed 2022년 7월 5일
편집: Torsten 2022년 7월 6일
I am trying to fit my objective function (ogden_funct) to the following constraints and am running into errors.
For constraint 1) I get an error of 'Error using fmincon
Supplied objective function must return a scalar value'
For constraint 2) I am not sure where/how to implement this.
My ideal solution will implement constraint 1) and 2)
Any ideas help.
%objective
ogden_funct = @(c) c(1)*(xdata.^(c(4)-1)-xdata.^((-1)/2*c(4)-1)) + ...
c(2)*(xdata.^(c(5)-1)-xdata.^(-1/2*c(5)-1)) + ...
c(3)*(xdata.^(c(6)-1)-xdata.^((-1)/2*c(6)-1))- ydata;
% Constraint 1)
c(1)*c(4) + c(2)*c(5) + c(3)*c(6) = 2;
% my attempt, writing a function nlcon(c) in a new file
function [z, zeq] = nlcon(c)
z = 2 - (c(1)*c(4) + c(2)*c(5) + c(3)*c(6));
zeq = [];
end
% then calling fmincon
x = fmincon(ogden_funct, Initial_Guess,A,b,Aeq,beq,[],[],nonlincon); % Where Initial_Guess...[] in this case dont matter
% Constraint 2)
c(1)*c(4)>0; c(2)*c(5)>0; c(3)*c(6)>0; % no ideas on how to implement this
  댓글 수: 5
Matt J
Matt J 2022년 7월 6일
편집: Matt J 2022년 7월 6일
Objective for fmincon must be ogden_funct = @(c) sum(c(1)*(xdata.^(c(4)-1)....).^2;
mean() would be better:
ogden_funct = @(c) mean(c(1)*(xdata.^(c(4)-1)-xdata.^((-1)/2*c(4)-1)) + ...
c(2)*(xdata.^(c(5)-1)-xdata.^(-1/2*c(5)-1)) + ...
c(3)*(xdata.^(c(6)-1)-xdata.^((-1)/2*c(6)-1))- ydata).^2;
That way, your optimoptions needn't depend so much on the size of xdata.
Torsten
Torsten 2022년 7월 6일
편집: Torsten 2022년 7월 6일
Could you describe to me, in the function script, what the z = [.....] is achieving?
It's an attempt to implement your constraints
-c(1)*c(4) <= 0
-c(2)*c(5) <= 0
-c(3)*c(6) <= 0

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

답변 (0개)

카테고리

Help CenterFile Exchange에서 Get Started with Optimization Toolbox에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by