201-2014 (1) 专业课程实践论文
内点法
一、算法理论
内点法总是从可行域的内点出发,并保持在可行域内进行搜索,因此这种方法适用于只有不等式约束条件的问题
内点法据图计算步骤:
1.给定初x(0)∈intD,允许误差ε〉0,初始参数r1〉0缩小系数β∈(0,1),k=1;
(k-1)2.以x为初始点,求解问题
Min f(x)+rkB(x)
S.t. x∈int D
3.若rkB(x(k))〈ε则停,得近似解x(k);否则令rk+1=βrk,k=k+1回2.
三、算法程序
clc
m=zeros(1,50);
a=zeros(1,50);
b=zeros(1,50);
f0=zeros(1,50);
syms x1 x2 e;
m(1)=1;c=0.2;a(1)=2;b(1)=-3;
f=x1^2+x2^2-e*(1/(2*x1+x2-2)+1/(1-x1));
f0(1)=15; fx1=diff(f,'x1'); fx2=diff(f,'x2');
fx1x1=diff(fx1,'x1');
fx1x2=diff(fx1,'x2');
fx2x1=diff(fx2,'x1');
fx2x2=diff(fx2,'x2');
for k=1:100
x1=a(k);x2=b(k);e=m(k);
for n=1:100
f1=subs(fx1);
f2=subs(fx2);
f11=subs(fx1x1);
f12=subs(fx1x2);
f21=subs(fx2x1);
f22=subs(fx2x2);
if(double(sqrt(f1^2+f2^2))
a(k+1)=double(x1);b(k+1)=double(x2);f0(k+1)=double(subs(f)); break;
else
X=[x1 x2]'-inv([f11 f12;f21 f22])*[f1 f2]';
x1=X(1,1);x2=X(2,1);
end
end
if(double(sqrt((a(k+1)-a(k))^2+(b(k+1)-b(k))^2))
a(k+1)
b(k+1)
k
f0(k+1)
break;
else
m(k+1)=c*m(k);
end
end
四、算法实现 例1. 利用内点法求解minx1+x2
s.t 2x1
-x122 +x2-2≤0
+1≤0
解:改变算法中f=x1^2+x2^2-e*(1/(2*x1+x2-2)+1/(1-x1)); 回车完成结果 复制粘贴代码,回车出现结果
min x1-x2
22s.t x1+x2-3≤0
-x1≤0
解:改变算法中f=x1^2-x2^2-e*(1/(x1+x2-3)+1/(-x1)); 回车完成结果
min 2x1-x2
22s.t x1+4x2≤0
x2-x1≤0
解:改变算法中f=2*x1^2-x2^2-e*(1/(x1+4*x2)+1/(x2-x1)); 回车完成结果
min 3x1+x2
22s.t 2x1+x2≤0
x2-x1≤0
解:改变算法中f=3*x1^2+x2^2-e*(1/(2*x1+x2)+1/(x2-x1)); 回车完成结果
201-2014 (1) 专业课程实践论文
内点法
一、算法理论
内点法总是从可行域的内点出发,并保持在可行域内进行搜索,因此这种方法适用于只有不等式约束条件的问题
内点法据图计算步骤:
1.给定初x(0)∈intD,允许误差ε〉0,初始参数r1〉0缩小系数β∈(0,1),k=1;
(k-1)2.以x为初始点,求解问题
Min f(x)+rkB(x)
S.t. x∈int D
3.若rkB(x(k))〈ε则停,得近似解x(k);否则令rk+1=βrk,k=k+1回2.
三、算法程序
clc
m=zeros(1,50);
a=zeros(1,50);
b=zeros(1,50);
f0=zeros(1,50);
syms x1 x2 e;
m(1)=1;c=0.2;a(1)=2;b(1)=-3;
f=x1^2+x2^2-e*(1/(2*x1+x2-2)+1/(1-x1));
f0(1)=15; fx1=diff(f,'x1'); fx2=diff(f,'x2');
fx1x1=diff(fx1,'x1');
fx1x2=diff(fx1,'x2');
fx2x1=diff(fx2,'x1');
fx2x2=diff(fx2,'x2');
for k=1:100
x1=a(k);x2=b(k);e=m(k);
for n=1:100
f1=subs(fx1);
f2=subs(fx2);
f11=subs(fx1x1);
f12=subs(fx1x2);
f21=subs(fx2x1);
f22=subs(fx2x2);
if(double(sqrt(f1^2+f2^2))
a(k+1)=double(x1);b(k+1)=double(x2);f0(k+1)=double(subs(f)); break;
else
X=[x1 x2]'-inv([f11 f12;f21 f22])*[f1 f2]';
x1=X(1,1);x2=X(2,1);
end
end
if(double(sqrt((a(k+1)-a(k))^2+(b(k+1)-b(k))^2))
a(k+1)
b(k+1)
k
f0(k+1)
break;
else
m(k+1)=c*m(k);
end
end
四、算法实现 例1. 利用内点法求解minx1+x2
s.t 2x1
-x122 +x2-2≤0
+1≤0
解:改变算法中f=x1^2+x2^2-e*(1/(2*x1+x2-2)+1/(1-x1)); 回车完成结果 复制粘贴代码,回车出现结果
min x1-x2
22s.t x1+x2-3≤0
-x1≤0
解:改变算法中f=x1^2-x2^2-e*(1/(x1+x2-3)+1/(-x1)); 回车完成结果
min 2x1-x2
22s.t x1+4x2≤0
x2-x1≤0
解:改变算法中f=2*x1^2-x2^2-e*(1/(x1+4*x2)+1/(x2-x1)); 回车完成结果
min 3x1+x2
22s.t 2x1+x2≤0
x2-x1≤0
解:改变算法中f=3*x1^2+x2^2-e*(1/(2*x1+x2)+1/(x2-x1)); 回车完成结果