function [x,mu,lambda,output]=multphr(fun,hf,gf,dfun,dhf,dgf,x0)
% 功能 : 用乘子法解一般约束问题 : min f(x), s.t. h(x)=0, g(x).=0
%输入
:
x0 是初始点 , fun, dfun 分别是目标函数及其梯度;
% hf, dhf 分别是等式约束 ( 向量 ) 函数及其 Jacobi 矩阵的转置;
% gf, dgf 分别是不等式约束 ( 向量 ) 函数及其 Jacobi 矩阵的转置;
%输出 :x 是近似最优点, mu, lambda 分别是相应于等式约束和不
% 等式约束的乘子向量 ; output 是结构变量 , 输出近似极小值 f, 迭
% 代次数 , 内迭代次数等
maxk=500; % 最大迭代次数
sigma=2.0; % 罚因子
eta=2.0; theta=0.8; %PHR 算法中的实参数
k=0; ink=0; %k, ink 分别是外迭代和内迭代次数
epsilon=1e-5; % 终止误差值
x=x0; he=feval(hf,x); gi=feval(gf,x);
n=length(x); l=length(he); m=length(gi);
% 选取乘子向量的初始值
mu=0.1*ones(l,1); lambda=0.1*ones(m,1);
btak=10; btaold=10; % 用来检验终止条件的两个值
while(btak>epsilon & k<maxk)
%调用 BFGS算法程序求解无约束子问题