% 5) wprowadzenie gradientu w sposób analityczny % a- przygotowanie funkcji 'koszty_grad.ni' oraz 'ograniczenia_grad.nl'
% które zawierają gradient funkcje celu oraz gradientu funkcji ograniczeń % b- zmiana opcji
opcje = optimset(opcje,'GradObj','on','GradConstr','on');
% rozwiązanie
[P, wartF, flagwyj, wyj] = fmincon(@koszty_grad,PO,[],[],[l l],[1.5],[0.4;0.4],[1.0;1.0],@ograniczenia_grad,opcje) % obliczenie gradientu oraz Hessian
[P, wartF, flagwyj, wyj, lambda, grad, Hessian] = fmincon(@koszty_grad,PO,[],[],[l l],[1.5],[0.4;0.4],[1.0;1.0],@ograniczenia_g rad, opcje)
%----------------------------------------
% 6) programowanie liniowe - ubywanie funkcji 'linprog' ff(l:2)=koszty([l;l]);
P=linprog(ff,[],[],[1.0 1.0],[1.5],[0.4;0.4J,[1;1],[1.01.0])
% plik ograniczenia_grad.m | |||
% 7) Używanie funkcji 'fsolve' ('fzero' jest podobną funkcją, ale tylko |
% Definicja funkcji ograniczeń nieliniowych oraz ich gradienty | ||
% dla funkcji jednozmiennej) | |||
[xfval]=fsolve(@koszty, [11]) |
function (c ceq, cgrad, ceqgrad) = ogr(P) | ||
% plik koszty_grad.m |
% ograniczenia nieliniowe typu nierównościowe | ||
% Definicja funkcji celu oraz jej gradient w sposób |
c= [P(l)+0.1*P(l)A2-0.5; | ||
% analityczny |
P(2)+0.1*P(2)A2-0.3); | ||
%............................................................. |
cgrad = [1.0+0.2*P(1), 0; | ||
function [koszt gradkoszt]= funkcja(P) |
0,1.0+0.2*P(2)]; | ||
koszt = 1.0 + P(l) + P(2) + 0.1*P(1)A2 + 0.1*P(2)A2; |
% ograniczenia nieliniowe typu równościowe | ||
gradkoszt=[1.0 + 0.2*P(1), |
ceq = (]; | ||
1.0 + 0.2*P(2)]; |
ceqgrad = []; |
Podstawy teorii optymalizacji Oceanotechnika, II stop., sem. I 105