Rozwiązywanie zadań optymalizacji 113
fgrad=[2 *x(1) ; 3*x(2)~2; 4 *x(3)^3]; return
function [C,Ceq]=optnlcon(x)
^ograniczenia funkcyjne nierownosciowe C i równościowe Ceq %C (1)= 1.5 + x(l)*x(2)-x(3);
%C(2)= -10 - x(1)*x(2) ;
%Ceq (1) = -40 + x(l)~2 + x(2)~2 + x(3)A2;
C = [1.5 + x(l)*x(2)-x(3);
-10 - x(l)*x(2)];
Ceq = [-46 + x(l)~2 + x(2)''2 + x(3)~2]; return
W pliku sterującym obliczeniami optymalizacyjnymi należy uwzględnić fakt, że informacje o przebiegu procesu optymalizacyjnego są pamiętane w argumentach wyjściowych funkcji fmincon. Dotyczy to również wartości współczynników Lagrange'a, które są pamiętane w różnych zmiennych.
function [x,lambda] = optv6
% przykład wykorzystania funkcji fmincon() do optymalizacji
% nieliniowej funkcji celu
% z ograniczeniami równościowymi
% i ograniczeniami nierownosciowymi
fd=fopen('optv6out.m','wt');
x0 =[10 10 10]; x=x0;
Aneq = [234]; Bneq = [35];
Aeq =[111]; Beq = [10] ;
LB=[-10 -5 0]; UB=[1 5 inf];
% funkcja celu i jej gradient [f,fgrad] = optnlcfg(x);
^ograniczenia
[C,Ceq]=optnlcon(x);
% wybór opcji optymalizacyjnych
options = opt imset( 'display 1 , 'iter1 , 1gradobj ' , 'on 1) ;
% wywołanie funkcji fmincon()
% [X,FVAL,EXITFLAG,OUTPUT,LAMBDA]=
% FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)
[x,fval,exi t flag,output,lambda] = ...
fmincon('optnlcfg',x,Aneq,Bneq,Aeq,Beq,LB,UB,'optnlcon',...
options) ;
fprintf(fd,'\n min xl~2 + x2^3 + x3~41); fprintfffd,1\n przy ograniczeniach funkcyjnych:'); fprintf(fd,'\n - liniowych nierownosciowych'); fprint f(fd,'\n 2*xl + 3*x2 + 4*x3 <= 35'); fprintfffd,1\n - liniowych równościowych'); fprintf(fd, '\n xl + x2 + x3 = 10 ' ) ; fprintfffd,'\n - nieliniowych nierownosciowych'); fprintf(fd, '\n 1.5+xl*x2-x3 <= 0') ;