内点罚函数算法
算法
算例
matlab程序
function [x,val]=neidian(x0,epsilon)
m(1)=1;
c=10;% c为递增系数
for k=1:100
e=m(k);
x0=bfgs('ndfz','dndfz',x0);
f1=zzzz(x0,e);
if(norm(f1)<=epsilon)
break
else
m(k+1)=c*m(k);
end
end
x=x0;
val=mbf(x0);
function f=ndfz(x,mu)
f=log(1+x(1)^2)-x(2)+mu^(-1)*(log((1+x(1)^2)^2+x(2)^2-4));\
function df=dndfz(x,mu)
df=[2*x(1)/(1+x(1)^2)+mu^(-1)*4*x(1)*(1+x(1)^2)/((1+x(1)^2)^2+x(2)^2-4)
-1+mu^(-1)*2*x(2)/((1+x(1)^2)^2+x(2)^2-4)];
function f1=zzzz(x,mu)%终止准则
f1=mu^(-1)*(log((1+x(1)^2)^2+x(2)^2-4));
测试文件
clear;
clc;
x0=[2,2];
epsilon=1e-4;
[x,val]=neidian(x0,epsilon)
输出结果
这个结果问题同外点法,表示暂时不想排错了…哎