求matlab程序(线性规划问题)
目标函数:f=x1y1+x2y2+x3y3+x4y4约束条件:4y1+80y2+35y3+25y4<=6009y1+2y2+30y3+40y4<=700y1=-6.49*...
目标函数:f=x1y1+x2y2+x3y3+x4y4
约束条件:4y1+80y2+35y3+25y4<=600
9y1+2y2+30y3+40y4<=700
y1=-6.49*x1+6748
y2=-1.2*x2+1184
y3=-0.22x3+0.026x4+420
y4=-0.034x4+0.027x3+70
所有变量均〉=0
求:目标函数最大值
另:添加约束条件:x1y1+x2y2+x3y3+x4y4<=1779110后,再求目标函数最大值 展开
约束条件:4y1+80y2+35y3+25y4<=600
9y1+2y2+30y3+40y4<=700
y1=-6.49*x1+6748
y2=-1.2*x2+1184
y3=-0.22x3+0.026x4+420
y4=-0.034x4+0.027x3+70
所有变量均〉=0
求:目标函数最大值
另:添加约束条件:x1y1+x2y2+x3y3+x4y4<=1779110后,再求目标函数最大值 展开
3个回答
展开全部
你这个不是线性规划,
因为f是关于x1的二次方,这个应当是二次型规划(非线性规划的一种)
下面是用非线性规划求解的。
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function f=zhidao_theendoflife(x)
%目标函数构造
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
y1=-6.49*x1+6748;
y2=-1.2*x2+1184;
y3=-0.22*x3+0.026*x4+420;
y4=-0.034*x4+0.027*x3+70;
f=x1*y1+x2*y2+x3*y3+x4*y4;
f=-f;%你要求最大值,这里加负,然后计算最小值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [y,yeq]=zhidao_theendoflife_cond(x)
%约束条件
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
y1=-6.49*x1+6748;
y2=-1.2*x2+1184;
y3=-0.22*x3+0.026*x4+420;
y4=-0.034*x4+0.027*x3+70;
y=[4*y1+80*y2+35*y3+25*y4-600;9*y1+2*y2+30*y3+40*y4-700]; %加约束的话,在这里加
yeq=[];%等式约束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
返回Matlab输入:
x0=[0;0;0;0]; xm=[0;0;0;0]; xM=inf*[1;1;1;1]; A=[]; B=[]; Aeq=[]; Beq=[];
[x,f_min,flag,c]=fmincon('zhidao_theendoflife',x0,A,B,Aeq,Beq,xm,xM,'zhidao_theendoflife_cond');
f_max=-f_min;
x,f_max
得到结果
x =
1.0e+003 *
0.9840
0.9619
2.8354
4.0759
f_max =
1.3974e+005
===========
另加条件时,将zhidao_theendoflife_cond文件中的
y=[4*y1+80*y2+35*y3+25*y4-600;9*y1+2*y2+30*y3+40*y4-700]; %加约束的话,在这里加
===>
y=[4*y1+80*y2+35*y3+25*y4-600;9*y1+2*y2+30*y3+40*y4-700;x1*y1+x2*y2+x3*y3+x4*y4-1779110];
改完结果也是一样的.因为第一次不加时,求出的f_max = 1.3974e+005(目标),它自然满足你的新添加的约束.
因为f是关于x1的二次方,这个应当是二次型规划(非线性规划的一种)
下面是用非线性规划求解的。
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function f=zhidao_theendoflife(x)
%目标函数构造
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
y1=-6.49*x1+6748;
y2=-1.2*x2+1184;
y3=-0.22*x3+0.026*x4+420;
y4=-0.034*x4+0.027*x3+70;
f=x1*y1+x2*y2+x3*y3+x4*y4;
f=-f;%你要求最大值,这里加负,然后计算最小值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [y,yeq]=zhidao_theendoflife_cond(x)
%约束条件
x1=x(1);
x2=x(2);
x3=x(3);
x4=x(4);
y1=-6.49*x1+6748;
y2=-1.2*x2+1184;
y3=-0.22*x3+0.026*x4+420;
y4=-0.034*x4+0.027*x3+70;
y=[4*y1+80*y2+35*y3+25*y4-600;9*y1+2*y2+30*y3+40*y4-700]; %加约束的话,在这里加
yeq=[];%等式约束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
返回Matlab输入:
x0=[0;0;0;0]; xm=[0;0;0;0]; xM=inf*[1;1;1;1]; A=[]; B=[]; Aeq=[]; Beq=[];
[x,f_min,flag,c]=fmincon('zhidao_theendoflife',x0,A,B,Aeq,Beq,xm,xM,'zhidao_theendoflife_cond');
f_max=-f_min;
x,f_max
得到结果
x =
1.0e+003 *
0.9840
0.9619
2.8354
4.0759
f_max =
1.3974e+005
===========
另加条件时,将zhidao_theendoflife_cond文件中的
y=[4*y1+80*y2+35*y3+25*y4-600;9*y1+2*y2+30*y3+40*y4-700]; %加约束的话,在这里加
===>
y=[4*y1+80*y2+35*y3+25*y4-600;9*y1+2*y2+30*y3+40*y4-700;x1*y1+x2*y2+x3*y3+x4*y4-1779110];
改完结果也是一样的.因为第一次不加时,求出的f_max = 1.3974e+005(目标),它自然满足你的新添加的约束.
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
你这个问题需要转化一下,把y相关的变成x相关的,然后解法如下http://gyzx.szpt.edu.cn/lei/wskt1/shangce/files/book/5_4.htm
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接使用:linprog 函数
例子:
f = [-5; -4; -6]
A = [1 -1 1
3 2 4
3 2 0];
b = [20; 42; 30];
lb = zeros(3,1);
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb);
把参数改成你的就可以了。
不过想问一下,你确定是线性规划么?
例子:
f = [-5; -4; -6]
A = [1 -1 1
3 2 4
3 2 0];
b = [20; 42; 30];
lb = zeros(3,1);
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb);
把参数改成你的就可以了。
不过想问一下,你确定是线性规划么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |