MatLab5第五讲 数值计算(二)

更新时间:2023-10-13 17:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MatLab & 数学建模

第五讲 数值计算(二)

一、 线性优化

minCTnx,x?Rs.t.Ax?b vlb?x?vub用命令x=lp(C,A,b,vlb,vub)。 [例] 最小值线性优化 f(x)=-5x1-4x2-6x3 x1-x2+x3≦20 3x1+2x2+4x3≦42 3x1+2x2≦30

(0≦x1, 0≦x2,0≦x3)

First, enter the coefficients: f = [-5; -4; -6] A = [1 -1 1 3 2 4 3 2 0]; b = [20; 42; 30];

lb = [0,0,0]; % x的最小值 [0,0,0] ub = [inf,inf,inf];

Next, call a linear programming routine: x= lp(f,A,b,lb,ub);

Entering x x =

0.0000 15.0000 3.0000

1

实际此命令改为:

x = linprog(f,A,b,Aeq,beq)

x = linprog(f,A,b,Aeq,beq,lb,ub) 对以上的问题可做如下的操作: First, enter the coefficients:

f = [-5; -4; -6]; A = [1 -1 1 3 2 4 3 2 0]; b = [20; 42; 30]; lb = zeros(3,1);

Next, call a linear programming routine:

[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb); x =

0.0000 15.0000 3.0000

fval =

-78.0000

exitflag = 1

output =

iterations: 6 cgiterations: 0

algorithm: 'lipsol'

lambda =

ineqlin: [3x1 double] eqlin: [0x1 double] upper: [3x1 double] lower: [3x1 double]

2

[例] 线性优化

Min -400x1-1000x2-300x3+200x4 -2x2 + x3 + x4=0 2x1 +3x2 <=16 3x1 +4x2 <=24 x1, x2, x3, x4>=0; x3<=5

c=[-400,-1000,-300,200]; %目标函数系数 A=[0 -2 1 1; 2 3 0 0; 3 4 0 0]; %约束条件系数 b=[0; 16; 24];

xLB=[0,0,0,0]; % x取值范围的最小值 xUB=[inf,inf,5,inf]; % x取值范围的最大值 x0=[0,0,0,0]; % x取迭代初始值

nEq=1; % 约束条件中只有一个 = 号,其余为<= x=lp(c,A,b,xLB,xUB,x0,nEq) disp(['最优值为: ',num2str(c*x)])

结果: x =

3.4483 3.0345 5.0000 1.0690

最优值为 -5700

3

二、 非线性优化

minf(x),x?Rns.t.g(x)?0用命令x=constr('f ',x0)。

[例] 最小值非线性优化

Min f(x)=-x1x2x3, -x1-2x2-2x3≤0, x1+2x2+2x3≤72, 初值: x = [10; 10; 10]

第一步:编写M文件 myfun.m function [f,g]=myfun(x) f=-x(1)*x(2)*x(3);

g(1)=-x(1)-2*x(2)-2*x(3); g(2)=x(1)+2*x(2)+2*x(3)-72;

第二步:求解

在MATLAB工作窗中键入 x0=[10,10,10];

x=constr('myfun',x0)即可. x =

24.0000 12.0000 12.0000

4

[例] 非线性优化

Min f(x)=-x1x2 (x1+ x2)x3<=0; x1, x2>=0; x3>=2;

第一步:编写M文件 fxxgh.m

function [F,G]=fxxgh(x) F=-x(1)*x(2);

G(1)=(x(1)+x(2))*x(3)-120;

第二步:求解

在MATLAB工作窗中键入

x=[1,1,1]; % x取迭代初始值

options(13)=0; % 约束条件中有0个 = 号,其余为<= XL=[0,0,2]; % x取值范围的最小值 XU=[inf;inf;inf]; % x取值范围的最大值 [x,options]=constr('fxxgh',x,options,XL,XU); options(8) %输出最小值 x

ans =

-900.0000 x =

30.0000 30.0000 2.0000

5

本文来源:https://www.bwwdw.com/article/dy1f.html

Top