求解变分不等式算例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档