📄 gong_e1.m
字号:
function [ output_args ] = Gong_E1( input_args )
%GONG_E Summary of this function goes here
% Detailed explanation goes here
times=1;
circles=1;
x1=input('请输入初始点[x1,x2]=');
s=input('请输入精度s=');
xk=x1;
xk_1=x1;
d_x1=D_F(x1);%求出初始点导数
d_xk=d_x1;
d_xk_1=d_x1;
H1=eye(2);
Hk=eye(2);
Hk_1=eye(2);
if(norm(d_x1,2)<s)%求出向量d_x1的范数
fprintf('最小值为\n:') ;
disp(x1);
fprintf('迭代步数:\n');
disp(circles);
return;
else
while(norm(d_xk_1)>s)
d_x1=D_F(x1);
d_x1=d_x1.';
z_1=-H1*d_x1;%求出搜索方向
z_k=z_1;
z_k=z_k.';
while(times<2)
circles=circles+1;
p=min_f3(xk,z_k);
xk_1=xk+p.*z_k;
d_xk_1=D_F(xk_1);
if(norm(d_xk_1)<s)
fprintf('最小值为\n:') ;
disp(xk_1);
fprintf('迭代步数:\n');
disp(circles);
return;
else
times=times+1;
Sub_x=xk_1-xk; %Sub_x为行向量;
T_subx=Sub_x.';
Sub_d=d_xk_1-d_xk;
T_subd=Sub_d.'; %转为列向量;
Yk=Hk*T_subd;
T_Yk=Yk.'; %转为行向量;
Hk_1=Hk+(T_subx*Sub_x)./(Sub_x*T_subd)-(Yk*T_Yk)./(Sub_d*Yk);
z_k=-Hk*(d_xk.');
z_k=z_k.';
xk=xk_1;
d_xk=d_xk_1;
Hk=Hk_1;
end
end
times=1;
x1=xk_1;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -