登录论坛

查看完整版本 : 如何用matlab解决这样的非线性优化问题!


20052110
2008-07-24, 22:03
minf=-36962.04*cos(a)+15868.3*cos(a+b)-3385*cos(a+b+r)
s.t.
g1=762.5*cos(a+b+r)-1260*cos(a)-1182.5*cos(a+b)+511.5-h=0;
g2=1260*sin(a)-1182.5*sin(a+b)+762.5*sin(a+b+r)+1400=0;
g3=a-60>=0;
g4=a-180<=0;
g5=b-64>=0;
g6=b-180<=0;
g7=r-64>=0;
g8=r-180<=0;
a,b,r的初始值为:a=160.06,b=64.94,r=147.5.
h=150:50:3500,h每给一下值计算一次,以每次算出的解,即a,b,r,做为下次计算的初值,迭代计算。
关键是那个非线性等式约束中的h该如何处理,问了很多人都做不来,还望高手多多指点呀!!!!谢了先。

yfchenth2
2008-07-26, 10:25
主程序
clc
clear
p0=[160.06 64.94 147.5];
a=[];
b=[];
aeq=[];
beq=[];
xl=[60 64 64];
xu=[180 180 180];
i=1;
global h
for h=150:50:3500
[p,fmin]=fmincon(@obcon,p0,a,b,aeq,beq,xl,xu,@constraint);
c(i,1:3)=p;
p0=p;
i=i+1;
end
c



子程序
function [g u]=constraint(x)
global h
g=[];
u=762.5*cos(x(1)+x(2)+x(3))-1260*cos(x(1))-1182.5*cos(x(1)+x(2))+511.5-h+1260*sin(x(1))-1182.5*sin(x(1)+x(2))+762.5*sin(x(1)+x(2)+x(3))+1400;
end

function y=obcon(x)
y=-36962.04*cos(x(1))+15868.3*cos(x(1)+x(2))-3385*cos(x(1)+x(2)+x(3));

20052110
2008-07-28, 10:37
先谢谢这位哥们了,很高兴你能回帖
不过,为什么运行的时候前面会出现很多警告,而且用两个非线性等式约束为什么要加在一起,我看书上好像是用分号隔开的!