求解变分不等式的matlab程序
function x=Porjection()
clc
sigama=0.5;
gama=0.8;
x0=[10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 0 0 0 0 0 0 0 0];
x=x0;
fun(x)
z=max_fun(x);
r=(x-z);
t=1;
while norm(r)>1e-3
norm(r)
m=0;
f=fun(x);
xx=x-gama^m*r;
ff=fun(xx);
while sum((f-ff).*r)>sigama*norm(r)^2
m=m+1;
xx=x-gama^m*r;
ff=fun(xx);
if m>200
m;
break;
end
end
yita=gama^m;
y=(1-yita)*x+yita*z;
d=-(yita*r-yita*fun(x)+fun(y));
alfa=yita*sum(r.*(r-fun(x)+fun(y)))/(norm(d)^2);
x=max(0,x+alfa*d);
z=max_fun(x);
r=(x-z);
t=t+1;
end
function z&