matlab最优化问题

2024-11-25 08:42:02
推荐回答(2个)
回答1:

很简单: 

func=inline('0.01506316*(18.6+4*x(1))/(3.14*x(2)^2)','x') 

x0=[1.5 0.15]; 

A=[];B=[]; 

Aeq=[]; Beq=[]; 

LB=[1;0.14]; LU=[1.8;0.18]; 

[X,FVAL,EXITFLAG] =fmincon(func,x0,A,B,Aeq,Beq,LB,LU) 

[x,y]=meshgrid(1:0.1:1.8,0.14:0.01:0.18); 

U=0.01506316*(18.6+4*x)./(3.14*y.^2); 

mesh(x,y,U) 

xlabel('x'),ylabel('y'),zlabel('U') 

view(30,-30) 

结果: 

X = 

1.0000 0.1800 

FVAL = 

3.3462 

EXITFLAG = 

1

回答2:

你这个函数形式简单,看就可以看出来什么情况下取最小值。
U随x增大而增大,
U随y增大而减小。
于是当x取最小,y取最大时,U最小。
即x=1,y=0.18时,U取最小值。

在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function U=zhidao_zzhrui(xy)
x=xy(1);
y=xy(2);
U=0.01506316*(18.6+4*x)/(3.14*y.^2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

返回Matlab输入:
xm=[1;0.14];
xM=[1.8;0.18];
x0=xm;
A=[];
B=[];
Aeq=[];
Beq=[];
[xy,Umin]=fmincon('zhidao_zzhrui',x0,A,B,Aeq,Beq,xm,xM);
x=xy(1)
y=xy(2)
Umin

得到结果
x =
1

y =
0.1800

Umin =
3.3462

至于你说的图,我不知道你想要什么图?