求解变分不等式算例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求解变分不等式:
例2:.]5,5[,0)(,0),(**n w w g v w v F -∈∀≤≥-(n 可以是维数,在我们计算的过程中,可以取100,200,……1000维)
⎪⎪⎪⎭
⎫ ⎝⎛++=n v n v e v e v v F 11)(,w Aw w g ,)(=,A 是一个n n ⨯对称矩阵,可随机生成。 例 1:.]5,5[,0)(,0),(**n w w g v w v F -∈∀≤≥-
其中⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛---+⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛---=34680211220210421224)(4321v v v v x F ,w w w g ,)(-=. 其解为(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*barv0(i))>=b(i)
v0(i)=b(i);
else
v0(i)=v0(i)-mu*(F(i)+barp0*barv0(i));
end