求解变分不等式算例.doc
文本预览下载声明
求解变分不等式:
例2:(可以是维数,在我们计算的过程中,可以取100,200,……1000维)
,,是一个对称矩阵,可随机生成。
例 1:
其中,.
其解为(4/3,7/9,4/9,2/9)。(不变)
用迭代序列编程求解:
高维迭代
clc;
k=0;
k_inner=1000;
time0=cputime;
n=4;
v0=0*rand(n,1);
p0=1;
Q=eye(n);
b=5*diag(Q);%盒子的上界
a=-5*diag(Q)%盒子的下届
mu=0.03;
%F函数的输入如下
F=zeros(n,1)
for i=1:n
F(i,1)=v0(i)+exp(v0(i));
end
barp0=max(0,p0-mu*sum(v0.^2));
% barv0=zeros(4,1);
for i=1:n
if v0(i)-mu*(F(i)+barp0*v0(i))=a(i)
barv0(i)=a(i);
elseif v0(i)-mu*(F(i)+barp0*v0(i))=b(i)
barv0(i)=b(i);
else
barv0(i)=v0(i)-mu*(F(i)+barp0*v0(i));
end
end
while norm(v0-barv0)1e-5 | norm(p0-barp0)1e-5 k=k_inner
p0=max(p0-mu*sum(barv0.^2));
F=zeros(n,1)
for i=1:n
F(i,1)=barv0(i)+exp(barv0(i));
end
for i=1:4
if v0(i)-mu*(F(i)+barp0*barv0(i))=a(i)
v0(i)=a(i);
elseif v0(i)-mu*(F(i)+barp0*barv0(i))=b(i)
v0(i)=b(i);
else
v0(i)=v0(i)-mu*(F(i)+barp0*barv0(i));
end
end
F=zeros(n,1)
for i=1:n
F(i,1)=v0(i)+exp(v0(i));
end
barp0=max(0,p0-mu*sum(v0.^2));
% barv0=zeros(4,1);
for i=1:4
if v0(i)-mu*(F(i)+barp0*v0(i))=a(i)
barv0(i)=a(i);
elseif v0(i)-mu*(F(i)+barp0*v0(i))=b(i)
barv0(i)=b(i);
else
barv0(i)=v0(i)-mu*(F(i)+barp0*v0(i));
end
end
k=k+1;
end
fprintf(vk is:%d\n,v0);
fprintf(p is:%d\n,p0);
fprintf(time used is:%d\n,cputime-time0);
fprintf(k is:%d\n,k);
迭代程序有限维
clc;
k=0;
k_inner=1000;
time0=cputime;
v0=[0;0;0;0];
p0=1;
A=[4,2,2,1;2,4,0,1;2,0,2,2;-1,-1,-2,0];
b=[5;5;5;5];%盒子的上界
a=[-5;-5;-5;-5];%盒子的下届
mu=0.03;
q=[-8;-6;-4;3];
F=A*v0+q;
barp0=max(0,p0-mu*(v0(1)^2+v0(2)^2+v0(3)^2+v0(4)^2));
% barv0=zeros(4,1);
for i=1:4
if v0(i)-mu*(F(i)+barp0*v0(i))=a(i)
barv0(i)=a(i);
elseif v0(i)-mu*(F(i)+barp0*v0(i))=b(i)
barv0(i)=b(i);
else
barv0(i)=v0(i)-mu*(F(i)+barp0*v0(i));
end
end
while norm(v0-barv0)1e-5 | norm(p0-barp0)1e-5 k=k_inner
p0=max(p0-mu*(barv0(1)^2+barv0(2)^2+barv0(3)^2+barv0(4)^2));
F=A*barv0+q;
for i=1:4
if v0(i)-mu*(F(i)+barp0*barv0(i))=a(i)
v0(i)=a(i);
elseif v0(i)-mu*(F(i)+barp0*barv
显示全部