📄 bfgs_min_kier.m
字号:
% gradient funkcji celu
function [wynik,q_wyniku] = min_kier(x,d,main_x0,main_h0,main_u2,tu2,wskaz)
alfa = 0.5; % wspolczynnik zwiekszania kroku
maxit = 20; % maksymalna ilosc iteracji
x0 = x;
df = d;
% warunek na maksymalny krok:
ilosc_ograniczen = 0;
for i = 1:(length(x0)-1)
if df(i)-df(i+1)>0
ilosc_ograniczen = ilosc_ograniczen + 1;
zbior_krokow(ilosc_ograniczen) = (x0(i+1)-x0(i))/(df(i)-df(i+1));
end
end
if df(1)<0
ilosc_ograniczen = ilosc_ograniczen + 1;
zbior_krokow(ilosc_ograniczen) = -(x0(1)/df(1));
end
if ilosc_ograniczen>0
max_krok = min(zbior_krokow);
zn = min(1,0.95*max_krok);
else
zn = 1;
end
if zn<(1e-8)
wynik = x0;
return
end
for i = 1:length(x0)
xf(i) = x0(i)+zn*df(i);
end
[pom_u2,pom_tu2] = zmien_u2((xf'),main_u2,tu2);
qn = bfgs_f_celu2((xf'),main_x0,main_h0,pom_u2);
for nr=1:maxit
xfs = xf;
qs = qn;
zn = alfa*zn;
for i = 1:length(x0)
xf(i) = x0(i)+zn*df(i);
end
[pom_u2,pom_tu2] = zmien_u2((xf'),pom_u2,tu2);
qn = bfgs_f_celu2((xf'),main_x0,main_h0,pom_u2);
if qn>=qs
if qs<wskaz
% disp ('wylaczenie dla nr rownego:');
% nr=nr
break;
else
% disp ('bez wylaczenia dla nr rownego:');
% nr=nr
;
end
end
end
wynik = xfs';
q_wyniku = qs;
end % koniec funkcji
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -