%阻尼牛顿法求解minf(x)=(1-x1)^2+2*(x2-x1^2)^2初始点x=(0,0)精度为0.01
%初始化,给定初始点和精度
clc;
clear all
x=[0 0]';
c=0.01;
k=0;
%阻尼牛顿法迭代
while gradval(x(1),x(2))>c
k=k+1;
syms v
%求出点x处的hessen矩阵
hessinv=inv(hessen(x(1),x(2)));
%确定搜索方向
p=-hessinv*grad(x(1),x(2))';
%确定minf(x+vp)的最优解v0
x0=sym(x+v*p);
x1=x0(1);
x2=x0(2);
% funval=sym((1-x1)^2+2*(x2-x1^2)^2);
funval=sym(60-10*x1-4*x2+x1^2+x2^2-x1*x2);
dv=diff(funval,'v');
v0=subs(solve(dv));
%保留v的实数根
for i=1:length(v0)
if isreal(v0(i))==1
v0_real(i)=v0(i);
end
end
%确定最小函数值对应的v实数根
%min为确定最小函数值对应的驻点的函数
if length(v0_real)>1
v0=minval(v0_real,p,x);
else
v0=v0_real;
end
x=x+v0*p;
end
min=x(1)^3+x(2)^3-3*(x(1)+x(2));
x
min
- 1
- 2
- 3
前往页