急问:如何用matlab求这个函数的最大值啊?

如何用matlab的二次规划求这个函数的最大值啊? max x1+x2+x3+x4-0.5x2^2+2x2x3-2x3^2-2x4^2 st. x1+x2-x3-x4=0 x1,x2,x3,x4>=0 谢谢了 如何写程序啊

第1个回答  2019-07-20
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
y=zhidao_mzhxpxliu(x)
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
%最大化成最小值求解,方法是加负号
y=-(x1+x2+x3+x4-0.5*x2^2+2*x2*x3-2*x3^2-2*x4^2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
[y,yeq]=zhidao_mzhxpxliu_cond(x)
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
y=[];%不等式约束
yeq=[x1+x2-x3-x4];%等式约束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
返回Matlab输入:
x0=zeros(4,1);
xm=zeros(4,1);
xM=inf*ones(4,1);
A=[];
B=[];
Aeq=[];
Beq=[];
[x,f_result,flag,c]=fmincon('zhidao_mzhxpxliu',x0,A,B,Aeq,Beq,xm,xM,
'zhidao_mzhxpxliu_cond');
x,-f_result
得到结果
x
=
0.0000
4.0000
3.0000
1.0000
ans
=
4.0000
第2个回答  2020-08-04

题主给出的实数a,b满足1≤b≤a≤√3,则(a^2+b^2-1)/(ab)的最大值问题。可以通过matlab的fmincon最优化函数求解。求解方法:

1、自定义目标函数,fmincon_fun(x),这里x=[a,b],其内容

y=-((a.^2+b.^2-1)./(a*b)); %负号的意思求最大值即最小值的相反数

2、自定义约束条件函数,fmincon_con(x),这里x=[a,b],其内容

条件1(1≤b):c(1)=1-b

条件2(b≤a):c(2)=b-a

条件3(a≤√3):c(3)=a-sqrt(3)

3、确定初值,x0=[0.8,0.8];

4、确定[a,b]的上下限,lb=[0.8,0.8]; ub=[sqrt(3),sqrt(3)];

5、使用fmincon函数求求解a,b值

6、验证,所求的a,b值是否满足约束条件

运行结果及代码如下。

相似回答