matlab 里 编写 外点法约束优化问题程序 修改程序 200
题目:minf(x)=-x1*x2条件-x1^2-x2^2+1>=0;x1+x2>=0我编的程序functiony=fun(x1,x2,r)y=-x1*x2+r*[(x1...
题目:min f(x)=-x1*x2 条件 -x1^2-x2^2+1>=0;x1+x2>=0
我编的程序
function y=fun(x1,x2,r)
y=-x1*x2+r*[(x1^2+x2^2-1)^2+(x1+x2)^2];%定义fun函数
r=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);f1=zeros(1,50);f2=zeros(1,50); %主要是想将r a b f0 f1 f2都定义为数组
syms d x1 x2;
r(1)=1;c=10;a(1)=1;b(1)=1;
for k=1:100 % 外点法 r迭代循环
f=fun(x1,x2,r(k));
fx1=diff(f,'x1');fx2=diff(f,'x2'); x1=a(k);x2=b(k);
for n=1:100 %梯度法最优化
f0(k)=subs(f);
f1(k)=subs(fx1);
f2(k)=subs(fx2);
if(double(sqrt(f1(k)^2+f2(k)^2))<=0.002)
a(k)=vpa(x1,4);b(k)=vpa(x2,4);f0(k)=vpa(f0(k),4)
else
x1=x1-d*f1(k);x2=x2-d*f2(k);
D=fun(x1,x2,r(k));
Dd=diff(D,'d'); dd=solve(Dd); x1=x1-dd*f1(k); x2=x2-dd*f2(k);
end
end
if(double(sqrt((a(k)-a(k-1))^2+(b(k)-b(k-1))^2))<=0.001&&double(abs((f(k)-f(k-1))/f(k-1)))<=0.001) %r迭代收敛条件
a(k)
b(k)
f(k)
else
r(k)=c*r(k-1)
a(k+1)=a(k);b(k+1)=b(k);
end
end 展开
我编的程序
function y=fun(x1,x2,r)
y=-x1*x2+r*[(x1^2+x2^2-1)^2+(x1+x2)^2];%定义fun函数
r=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);f1=zeros(1,50);f2=zeros(1,50); %主要是想将r a b f0 f1 f2都定义为数组
syms d x1 x2;
r(1)=1;c=10;a(1)=1;b(1)=1;
for k=1:100 % 外点法 r迭代循环
f=fun(x1,x2,r(k));
fx1=diff(f,'x1');fx2=diff(f,'x2'); x1=a(k);x2=b(k);
for n=1:100 %梯度法最优化
f0(k)=subs(f);
f1(k)=subs(fx1);
f2(k)=subs(fx2);
if(double(sqrt(f1(k)^2+f2(k)^2))<=0.002)
a(k)=vpa(x1,4);b(k)=vpa(x2,4);f0(k)=vpa(f0(k),4)
else
x1=x1-d*f1(k);x2=x2-d*f2(k);
D=fun(x1,x2,r(k));
Dd=diff(D,'d'); dd=solve(Dd); x1=x1-dd*f1(k); x2=x2-dd*f2(k);
end
end
if(double(sqrt((a(k)-a(k-1))^2+(b(k)-b(k-1))^2))<=0.001&&double(abs((f(k)-f(k-1))/f(k-1)))<=0.001) %r迭代收敛条件
a(k)
b(k)
f(k)
else
r(k)=c*r(k-1)
a(k+1)=a(k);b(k+1)=b(k);
end
end 展开
展开全部
找出问题所在了.
你看一下你的dd
由于你的Dd是一个三次方程,有三个解.也就是说dd有三个值.才出现上述问题.
想办法看一下怎么弄吧。
我记得梯度法求d是有公式,不要我们人工去求导的。
找找书看看吧。
另外
if(double(sqrt((a(k)-a(k-1))^2+(b(k)-b(k-1))^2))<=0.001&&double(abs((f(k)-f(k-1))/f(k-1)))<=0.001)
如果k=1的话,a(k-1)会有问题的。
你看一下你的dd
由于你的Dd是一个三次方程,有三个解.也就是说dd有三个值.才出现上述问题.
想办法看一下怎么弄吧。
我记得梯度法求d是有公式,不要我们人工去求导的。
找找书看看吧。
另外
if(double(sqrt((a(k)-a(k-1))^2+(b(k)-b(k-1))^2))<=0.001&&double(abs((f(k)-f(k-1))/f(k-1)))<=0.001)
如果k=1的话,a(k-1)会有问题的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
ZESTRON
2024-09-04 广告
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸...
点击进入详情页
本回答由ZESTRON提供
2008-12-01
展开全部
function y=fun(x1,x2,r)
y=-x1*x2+r*[(x1^2+x2^2-1)^2+(x1+x2)^2];%定义fun函数
r=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);f1=zeros(1,50);f2=zeros(1,50); %主要是想将r a b f0 f1 f2都定义为数组
syms d x1 x2;
r(1)=1;c=10;a(1)=1;b(1)=1;
for k=1:100 % 外点法 r迭代循环
f=fun(x1,x2,r(k));
fx1=diff(f,'x1');fx2=diff(f,'x2'); x1=a(k);x2=b(k);
for n=1:100 %梯度法最优化
f0(k)=subs(f);
f1(k)=subs(fx1);
f2(k)=subs(fx2);
if(double(sqrt(f1(k)^2+f2(k)^2))<=0.002)
a(k)=vpa(x1,4);b(k)=vpa(x2,4);f0(k)=vpa(f0(k),4)
else
x1=x1-d*f1(k);x2=x2-d*f2(k);
D=fun(x1,x2,r(k));
Dd=diff(D,'d'); dd=solve(Dd); x1=x1-dd*f1(k); x2=x2-dd*f2(k);
end
end
if(double(sqrt((a(k)-a(k-1))^2+(b(k)-b(k-1))^2))<=0.001&&double(abs((f(k)-f(k-1))/f(k-1)))<=0.001) %r迭代收敛条件
a(k)
b(k)
f(k)
else
r(k)=c*r(k-1)
a(k+1)=a(k);b(k+1)=b(k);
end
end
晕了~
y=-x1*x2+r*[(x1^2+x2^2-1)^2+(x1+x2)^2];%定义fun函数
r=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);f1=zeros(1,50);f2=zeros(1,50); %主要是想将r a b f0 f1 f2都定义为数组
syms d x1 x2;
r(1)=1;c=10;a(1)=1;b(1)=1;
for k=1:100 % 外点法 r迭代循环
f=fun(x1,x2,r(k));
fx1=diff(f,'x1');fx2=diff(f,'x2'); x1=a(k);x2=b(k);
for n=1:100 %梯度法最优化
f0(k)=subs(f);
f1(k)=subs(fx1);
f2(k)=subs(fx2);
if(double(sqrt(f1(k)^2+f2(k)^2))<=0.002)
a(k)=vpa(x1,4);b(k)=vpa(x2,4);f0(k)=vpa(f0(k),4)
else
x1=x1-d*f1(k);x2=x2-d*f2(k);
D=fun(x1,x2,r(k));
Dd=diff(D,'d'); dd=solve(Dd); x1=x1-dd*f1(k); x2=x2-dd*f2(k);
end
end
if(double(sqrt((a(k)-a(k-1))^2+(b(k)-b(k-1))^2))<=0.001&&double(abs((f(k)-f(k-1))/f(k-1)))<=0.001) %r迭代收敛条件
a(k)
b(k)
f(k)
else
r(k)=c*r(k-1)
a(k+1)=a(k);b(k+1)=b(k);
end
end
晕了~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序什么地方有问题。
运行之后, 提示是什么?
运行之后, 提示是什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询