📄 bfgs_u2_alg.m
字号:
% Algorytm BFGS
% Algorytm obszaru wiarygodnosci, metody newtona
% funkcja celu: Q:R^n -> R
% optymalizuje sterowania u2 w zadaniu
% dane wejsciowe:
% main_tau - wektor tau (poziomy wektor)
% main_h0 - krok metody rk4
% main_x0 - punkt startowy Ziemi
% main_u2 - poczatkowe rozwiazanie (pionowy wektor)
% dane wyjsciowe:
% wynik_u2 - znalezione rozwiazanie optymalne dla sterowan u2
function [wynik_u2,q_wyniku_u2] = bfgs_u2_alg(main_x0,main_tau,main_h0,main_u2)
u2 = main_u2;
E0 = 1e-5; % zadana dokladnosc optymalizacji
r = 1; % parametr odnowy
nr_u2_iteracji = 0;
q_u2 = bfgs_f_celu2((main_tau'),main_x0,main_h0,(u2'));
while (nr_u2_iteracji<5)
% display ('U2 iteracja nr');
nr_u2_iteracji = nr_u2_iteracji + 1;
% wyliczanie gradientu:
grad_akt = bfgs_u2_f_celu_grad(u2,main_x0,main_h0,main_tau);
% grad_akt = bfgs_u2_f_celu_gradSE(u2,main_x0,main_h0,main_tau);
if (norm(grad_akt)<E0)
break;
end
if r==1
W = eye(length(u2));
elseif r==0
r = grad_akt-gs;
s = u2 - u2s;
W = W + (r*(r'))/((s')*r) - (W*s*(s')*W)/((s')*W*s);
end
d = (-1)*(W^(-1))*grad_akt;
u2s = u2;
gs = grad_akt;
% display ('U2 po kierunku:');
[u2_nowe,q_u2_nowe] = bfgs_u2_min_kier(u2,d,main_x0,main_h0,main_tau,q_u2);
if q_u2_nowe<q_u2
u2 = u2_nowe;
q_u2 = q_u2_nowe;
r = 0;
else
if r==1
disp ('U2 nastapilo zapetlenie');
break;
else
r = 1;
continue;
end
end
end
wynik_u2 = u2;
q_wyniku_u2 = q_u2;
end % koniec funkcji
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -