matlab数学规划模型,数学规划模型
发布日期:2021-06-24 11:14:42 浏览次数:5 分类:技术文章

本文共 5107 字,大约阅读时间需要 17 分钟。

1.线性规划的求解方法

线性规划问题的标准形式为:

math?formula=%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7B%5Cmin%20z%3Dc_%7B1%7D%20x_%7B1%7D%2Bc_%7B2%7D%20x_%7B2%7D%2B%5Ccdots%2Bc_%7Bn%7D%20x_%7Bn%7D%7D%20%5C%5C%20%7Ba_%7B11%7D%20x_%7B1%7D%2Ba_%7B12%7D%20x_%7B2%7D%2B%5Ccdots%2Ba_%7B1%20n%7D%20x_%7Bn%7D%3Db_%7B1%7D%7D%20%5C%5C%20%7Ba_%7B21%7D%20x_%7B1%7D%2Ba_%7B22%7D%20x_%7B2%7D%2B%5Ccdots%2Ba_%7B2%20n%7D%20x_%7Bn%7D%3Db_%7B2%7D%7D%20%5C%5C%20%7B%5Cdots%7D%20%5C%5C%20%7Ba_%7Bm%201%7D%20x_%7B1%7D%2Ba_%7Bm%202%7D%20x_%7B2%7D%2B%5Ccdots%2Ba_%7Bm%20n%7D%20x_%7Bn%7D%3Db_%7Bm%7D%7D%20%5C%5C%20%7Bx_%7B1%7D%2C%20x_%7B2%7D%2C%20%5Ccdots%2C%20x_%7Bn%7D%20%5Cgeqslant%200%7D%5Cend%7Barray%7D%5Cright.

或者写成矩阵形式:

math?formula=%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7B%5Cmin%20Z%3DC%20x%7D%20%5C%5C%20%7BA%20x%3Db%7D%20%5C%5C%20%7Bx%20%5Cgeqslant%200%7D%5Cend%7Barray%7D%5Cright.

一般来说线性规划包括单纯形规划和多目标规划

1.1单纯形线性规划

单纯形法时从所有基本的可行解的一个较小部分中通过迭代过程选出最优解

matlab中求解线性规划的函数时linprog,使用方法如下:

一般情况下,Linprog命令的参数形式为[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub,x0),下面分别介绍各参数的含义.

[x,fval,exitflag,output,lamnda]:返回值中x为最优解,fval为最优值,output包含优化信息的输出变量

f:表示目标函数中各个变量前面的系数向量,如果是求最小值问题,那么f就是各个变量的系数,如果是求最大值问题,那么f就是各个变量的系数的相反数.

A,b:表示不等式约束

math?formula=Ax%5Cleq%20b中的矩阵A和向量b,若不存在不等式关系

Aeq,beq:表示线性等式约束Aeq*x =beq中的矩阵Aeq和向量beq,若等式约束不存在则令Aeq=[ ],beq=[ ]

lb,ub :分别表示自变量的上下界组成的向量,如果没有上下界,该选项用[]表示,如果只有部分变量有上下界,其余的变量没有,那么可以把没有上下界的变量的上下界设为-inf或者inf使lb或者ub的长度符合要求.

x0:表示变量的初始值,可以缺省。

有如下例子:

math?formula=min%20f(x)%3D-5%20x_%7B1%7D-4%20x_%7B2%7D-6%20x_%7B3%7D

math?formula=%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7Bx_%7B1%7D-x_%7B2%7D%2Bx_%7B3%7D%20%5Cleqslant%2020%7D%20%5C%5C%20%7B3%20x_%7B1%7D%2B2%20x_%7B2%7D%2B4%20x_%7B3%7D%20%5Cleqslant%2042%7D%20%5C%5C%20%7B3%20x_%7B1%7D%2B2%20x_%7B2%7D%20%5Cleqslant%2030%7D%20%5C%5C%20%7B0%20%5Cleqslant%20x_%7B1%7D%2C%200%20%5Cleqslant%20x_%7B2%7D%2C%200%20%5Cleqslant%20x_%7B3%7D%7D%5Cend%7Barray%7D%5Cright.

由于没有等式约束,所以Aeq=[ ],beq=[ ]

不等式的条件系数为:

math?formula=A%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Brrr%7D%7B1%7D%20%26%20%7B-1%7D%20%26%20%7B1%7D%20%5C%5C%20%7B3%7D%20%26%20%7B2%7D%20%26%20%7B4%7D%20%5C%5C%20%7B3%7D%20%26%20%7B2%7D%20%26%20%7B0%7D%5Cend%7Barray%7D%5Cright%5D%2C%20%5Cquad%20b%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bl%7D%7B20%7D%20%5C%5C%20%7B42%7D%20%5C%5C%20%7B30%7D%5Cend%7Barray%7D%5Cright%5D

由于没有上界要求:

math?formula=l%20b%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bl%7D%7B0%7D%20%5C%5C%20%7B0%7D%20%5C%5C%20%7B0%7D%5Cend%7Barray%7D%5Cright%5D%2C%20%5Cquad%20u%20b%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bl%7D%7B%5Ctext%20%7B%20inf%20%7D%7D%20%5C%5C%20%7B%5Ctext%20%7B%20inf%20%7D%7D%20%5C%5C%20%7B%5Ctext%20%7B%20inf%20%7D%7D%5Cend%7Barray%7D%5Cright%5D

clear all

clc

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)

>>

x =

0.0000

15.0000

3.0000

fval =

-78.0000

exitflag =

1

exitflag =1表示正常收敛于解x处。

1.2 多目标线性规划

多目标线性规划有着两个或两个以上的目标函数

math?formula=%5Cmax%20%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bc%7D%7Bz_%7B1%7D%3Dc_%7B11%7D%20x_%7B1%7D%2Bc_%7B12%7D%20x_%7B2%7D%2B%5Ccdots%2Bc_%7B1%20n%7D%20x_%7Bn%7D%7D%20%5C%5C%20%7Bz_%7B2%7D%3Dc_%7B21%7D%20x_%7B1%7D%2Bc_%7B22%7D%20x_%7B2%7D%2B%5Ccdots%2Bc_%7B2%20n%7D%20x_%7Bn%7D%7D%20%5C%5C%20%7B%5Cvdots%20%5Cquad%20%5Cvdots%7D%20%5C%5C%20%7Bz_%7Br%7D%3Dc_%7Br%201%7D%20x_%7B1%7D%2Bc_%7Br%202%7D%20x_%7B2%7D%2B%5Ccdots%2Bc_%7Bm%7D%20x_%7Bn%7D%7D%5Cend%7Barray%7D%5Cright.

约束条件为:

math?formula=%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7Ba_%7B11%7D%20x_%7B1%7D%2Ba_%7B12%7D%20x_%7B2%7D%2B%5Ccdots%2Ba_%7B1%20n%7D%20x_%7Bn%7D%20%5Cleqslant%20b_%7B1%7D%7D%20%5C%5C%20%7Ba_%7B21%7D%20x_%7B1%7D%2Ba_%7B22%7D%20x_%7B2%7D%2B%5Ccdots%2Ba_%7B2%20n%7D%20x_%7Bn%7D%20%5Cleqslant%20b_%7B2%7D%7D%20%5C%5C%20%7B%5Cvdots%20%5Cquad%20%5Cvdots%7D%20%5C%5C%20%7Ba_%7Bm%201%7D%20x_%7B1%7D%2Ba_%7Bm%202%7D%20x_%7B2%7D%2B%5Ccdots%2Ba_%7Bm%20n%7D%20x_%7Bn%7D%20%5Cleqslant%20b_%7Bm%7D%7D%20%5C%5C%20%7Bx_%7B1%7D%2C%20x_%7B2%7D%2C%20%5Ccdots%2C%20x_%7Bn%7D%20%5Cgeqslant%200%7D%5Cend%7Barray%7D%5Cright.

给出如下例子:

math?formula=%5Cbegin%7Bequation%7D%20%5Cbegin%7Barray%7D%7Bl%7D%7B%5Cmax%20f_%7B1%7D(x)%3D3%20x_%7B1%7D-2%20x_%7B2%7D%7D%20%5C%5C%20%7B%5Cmax%20f_%7B2%7D(x)%3D-4%20x_%7B1%7D-3%20x_%7B2%7D%7D%5Cend%7Barray%7D%20%5Cend%7Bequation%7D

math?formula=s.t.%5Cbegin%7Bequation%7D%20%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7B2%20x_%7B1%7D%2B3%20x_%7B2%7D%20%5Cleq%2018%7D%20%5C%5C%20%7B2%20x_%7B1%7D%2Bx_%7B2%7D%20%5Cleq%2010%7D%20%5C%5C%20%7Bx_%7B1%7D%2C%20x_%7B2%7D%20%5Cgeqslant%200%7D%5Cend%7Barray%7D%5Cright.%20%5Cend%7Bequation%7D

1.2.1 理想点法

math?formula=max%20Z%20%3D%20Cx

先求解r个单目标问题,设其最优值分别为

math?formula=Z%5E*_j,称为值域中的一个理想点,寻求距离

math?formula=Z%5E*_j最近的Z作为近似值,最直接的方法就是构造最短距离理想点法,构造评价函数:

math?formula=%5Cphi(Z)%20%3D%20%5Cleft(%5Csum_%7Bi%3D1%7D%5Er%5BZi-Z%5E*_j%5D%5E2%5Cright)%5E%7B%5Cfrac%7B1%7D%7B2%7D%7D

然后最小化评价函数,将他的最优解

math?formula=x%5E*作为最优解.

在matlab中流程如下,先单个求解

clear all

clc

f=[3;-2];

A=[2,3;2,1];

b=[18;10];

lb=[0;0];

[x,fval]=linprog(f,A,b,[],[],lb)

>>

fval =

-12.0000

clear all

clc

f=[-4;-3];

A=[2,3;2,1];

b=[18;10];

lb=[0;0];

[x,fval]=linprog(f,A,b,[],[],lb)

>>

fval =

-24.0000

于是得到理想点(12,24)

然后求解如下模型:

math?formula=min%5Cphi%5Bf(x)%5D%20%3D%20%5Cleft(%5Bf_1(x)-12%5D%5E2%2B%5Bf_2(x)-24%5D%5E2%5Cright)%5E%7B%5Cfrac%7B1%7D%7B2%7D%7D

math?formula=s.t.%5Cbegin%7Bequation%7D%20%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7B2%20x_%7B1%7D%2B3%20x_%7B2%7D%20%5Cleq%2018%7D%20%5C%5C%20%7B2%20x_%7B1%7D%2Bx_%7B2%7D%20%5Cleq%2010%7D%20%5C%5C%20%7Bx_%7B1%7D%2C%20x_%7B2%7D%20%5Cgeqslant%200%7D%5Cend%7Barray%7D%5Cright.%20%5Cend%7Bequation%7D

clear all

clc

A = [2,3;2,1];

b = [18,10];

x0 = [1,1];

lb = [0,0];

x = fmincon('((-3*x(1)+2*x(2)-12)^2+(4*x(1)+3*x(2)-24)^2)^(1/2)',x0,A,b,[],[],lb,[])

>>

x =

0.5268 5.6488

得到最优的x

1.2.2 线性加权和方法

人们总希望给重要的指标较大的权重,将多目标问题转化为了所有目标加权求和的单目标问题

构造评价函数如下:

math?formula=minZ(x)%20%3D%20%5Csum_%7Bi%3D1%7D%5Erw_iZ_i(x)

math?formula=maxZ%20%3D%20Cx

对于前面例子权重系数分别取0.5和0.5,进行求解

math?formula=min%5B0.5%5Ctimes(3x_1-2x_2)%2B0.5%5Ctimes(-4x_1-3x_2)%5D

clear all

clc

f=[-0.5;-2.5];

A=[2,3;2,1];

b=[18;10];

lb=[0;0];

[x,fval]=linprog(f,A,b,[],[],lb)

>>

x =

0.0000

6.0000

fval =

-15.0000

1.2.3 最大最小法

在决策时采用保守策略时最为稳妥的,在最坏的情况下,寻求最好的结果,可以构造如下的评价函数

math?formula=%5Cphi(x)%20%3D%20maxZ_i

math?formula=min%5Cphi%5BZ(x)%5D%20%3D%20min%20maxZ_i(x)

然后求解

math?formula=max%20Z%20%3D%20Cx

function f = ex1019(x)

f(1) = 3*x(1)-2*x(2);

f(2) = -4*x(1)-3*x(2);

clear all

clc

x0=[1;1];

A=[2,3;2,1];

b=[18;10];

lb=zeros(2,1);

[x,fval]=fminimax('ex1019',x0,A,b,[],[],lb,[]) %这里使用fminimax函数

1.3 整数规划

当在实际问题中,部分自变量取整数时可以使用整数规划的方法,通过调用matlab中的intlinprog()实现,调用格式如下:

[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,options):需要注意其中的intcon,intcon = [1,2,7] 表示 x(1), x(2), x(7) 只能取整数

给出例子如下:

math?formula=%5Cmin%20_%7Bx%7D%5Cleft(-3%20x_%7B1%7D-2%20x_%7B2%7D-x_%7B3%7D%5Cright)

math?formula=%5Cbegin%7Bequation%7D%20%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7Bx_%7B3%7D%20%2C%5Ctext%20%7B%20binary%20%7D%7D%20%5C%5C%20%7Bx_%7B1%7D%2C%20x_%7B2%7D%20%5Cgeq%200%7D%20%5C%5C%20%7Bx_%7B1%7D%2Bx_%7B2%7D%2Bx_%7B3%7D%20%5Cleq%207%7D%20%5C%5C%20%7B4%20x_%7B1%7D%2B2%20x_%7B2%7D%2Bx_%7B3%7D%3D12%7D%5Cend%7Barray%7D%5Cright.%20%5Cend%7Bequation%7D

clc

clear all

intcon = 3;

f = [-3;-2;-1];

A = [1,1,1];

b = 7;

Aeq = [4,2,1];

beq = 12;

lb = zeros(3,1);

ub = [Inf,Inf,1]; % x3的上界为1保证x3只能取0,1

[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);

x

fval

>>

x =

0

5.5000

1.0000

fval =

-12.0000

2.非线性规划

非线性规划安约束条件可以分为以下三类:

无约束非线性规划

等式约束非线性规划

不等式约束非线性规划

2.1 非线性规划的标准形式

2.2 二次规划

非线性规划的目标函数为自变量的二次函数,约束条件全是线性函数,这种规划称为二次规划。

其标准数学模型为:

math?formula=%5Cbegin%7Bequation%7D%20%5Cmin%20_%7Bx%7D%20%5Cfrac%7B1%7D%7B2%7D%20x%5E%7B%5Cmathrm%7BT%7D%7D%20%5Cboldsymbol%7BH%7D%20x%2Bf%5E%7B%5Cmathrm%7BT%7D%7D%20%5Cboldsymbol%7Bx%7D%20%5Cend%7Bequation%7D

math?formula=s.t.%5Cbegin%7Bequation%7D%20%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7BA%20%5Ccdot%20x%20%5Cleqslant%20b%7D%20%5C%5C%20%7BA%20e%20q%20%5Ccdot%20x%3Db%20e%20q%7D%20%5C%5C%20%7Bl%20b%20%5Cleqslant%20x%20%5Cleqslant%20u%20b%7D%5Cend%7Barray%7D%5Cright.%20%5Cend%7Bequation%7D

其中

math?formula=H%2CA%E5%92%8CAeq为矩阵,其余为列向量

matlab中利用quadprog求解二次规划问题,调用格式为:

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options): 其中lb,ub为上下界,options为指定优化方法。

[x,fval,exitflag,output,lambda] = quadprog(...): 基本与此前函数类似,其中lambda为拉格朗日函数的乘子。

【例】求解以下最优化问题

目标函数为:

math?formula=%5Cbegin%7Bequation%7D%20f(x)%3D%5Cfrac%7B1%7D%7B2%7D%20x_%7B1%7D%5E%7B2%7D%2Bx_%7B2%7D%5E%7B2%7D-x_%7B1%7D%20x_%7B2%7D-2%20x_%7B1%7D-6%20x_%7B2%7D%20%5Cend%7Bequation%7D

math?formula=%5Cbegin%7Bequation%7D%20%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7Bx_%7B1%7D%2Bx_%7B2%7D%20%5Cleqslant%202%7D%20%5C%5C%20%7B-x_%7B1%7D%2B2%20x_%7B2%7D%20%5Cleqslant%202%7D%20%5C%5C%20%7B2%20x_%7B1%7D%2Bx_%7B2%7D%20%5Cleqslant%203%7D%20%5C%5C%20%7Bx_%7B1%7D%20%5Cgeqslant%200%2C%20x_%7B2%7D%20%5Cgeqslant%200%7D%5Cend%7Barray%7D%5Cright.%20%5Cend%7Bequation%7D

目标函数可以修改为:

math?formula=%5Cbegin%7Bequation%7D%20%5Cbegin%7Baligned%7D%20f(x)%20%26%3D%5Cfrac%7B1%7D%7B2%7D%20x_%7B1%7D%5E%7B2%7D%2Bx_%7B2%7D%5E%7B2%7D-x_%7B1%7D%20x_%7B2%7D-2%20x_%7B1%7D-6%20x_%7B2%7D%20%5C%5C%20%26%3D%5Cfrac%7B1%7D%7B2%7D%5Cleft(x_%7B1%7D%5E%7B2%7D-2%20x_%7B1%7D%20x_%7B2%7D%2B2%20x_%7B2%7D%5E%7B2%7D%5Cright)-2%20x_%7B1%7D-6%20x_%7B2%7D%20%5Cend%7Baligned%7D%20%5Cend%7Bequation%7D

其中:

math?formula=%5Cbegin%7Bequation%7D%20H%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Brr%7D%7B1%7D%20%26%20%7B-1%7D%20%5C%5C%20%7B-1%7D%20%26%20%7B2%7D%5Cend%7Barray%7D%5Cright%5D%2C%20%5Cquad%20f%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bl%7D%7B-2%7D%20%5C%5C%20%7B-6%7D%5Cend%7Barray%7D%5Cright%5D%2C%20%5Cquad%20x%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%7Bx_%7B1%7D%7D%20%5C%5C%20%7Bx_%7B2%7D%7D%5Cend%7Barray%7D%5Cright%5D%2C%20%5Cquad%20A%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Brr%7D%7B1%7D%20%26%20%7B1%7D%20%5C%5C%20%7B-1%7D%20%26%20%7B2%7D%20%5C%5C%20%7B2%7D%20%26%20%7B1%7D%5Cend%7Barray%7D%5Cright%5D%2C%20%5Cquad%20b%3D%5Cleft%5B%20%5Cbegin%7Barray%7D%7Bc%7D%7B27%7D%20%5C%5C%20%7B2%7D%20%5C%5C%20%7B3%7D%5Cend%7Barray%7D%5Cright%5D%20%5Cend%7Bequation%7D

clc

clear all

H = [1,-1;-1,2];

f = [-2,-6];

A = [1,1;-1,2;2,1];

b = [27,2,3];

lb = [0,0];

[x,fval,exitflag] = quadprog(H,f,A,b,[],[],lb,[]);

x

fval

>>

x =

0.8000

1.4000

fval =

-8.8400

2.3 无约束规划

1. fminbnd函数

用来求固定区间内单变量函数的最小值

其调用格式如下:

x = fminbnd(fun,x1,x2,options,p1,p2...) : 其中x1,x2为区间,options为优化方法,如果没有options,令options = [ ].

[x,fval,exitflag,output] = fminbnd(...) :与之前函数类似

clc

clear all

[x,f_min] = fminbnd('sin(2*x)',0,2pi);

2. fminsearch函数

用于求多变量无约束的函数的最小值,格式为:

[x,fval,exitflag,options] = fminsearch(fun,x0,options): x0为初值

【注意】:

对于求解二次以上问题,fminunc更加有效,但对于高度非线性不连续问题则相反

fminsearch不适合求平方和问题,lsqnonlin更有效

3. fminunc函数(重要)

常用于求多变量无约束的函数的最小值

[x,fval,exitflag,output,grad,hessian] = fminunc(fun,x0,options): grad是解x处的梯度值,hessian将解x处的Hessian矩阵返回

clear all

clc

x0=[-1.2,1];

[x,fval]=fminunc('100*(x(2)-x(1)^2)^2+(1-x(1))^2',x0)

>>

x =

1.0000 1.0000

fval =

2.8336e-11

2.4 有约束规划

1. fmincon函数

求解多变量有约束的非线性函数的最小值,调用格式如下:

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,noncon,options) :其中noncon是计算非线性等式约束

math?formula=c(x)%5Cleq0和非线性不等式约束

math?formula=ceq%20%3D%200

给出丧心病狂的例子如下:

【例】

math?formula=%5Cbegin%7Bequation%7D%20%5Cmin%20f%5Cleft(x_%7B1%7D%2C%20x_%7B2%7D%2C%20x_%7B3%7D%5Cright)%3Dx_%7B1%7D%5E%7B2%7D%5Cleft(x_%7B2%7D%2B2%5Cright)%20x_%7B3%7D%20%5Cend%7Bequation%7D

math?formula=s.t.%5Cbegin%7Bequation%7D%20%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7B350-163%20x_%7B1%7D%5E%7B-2.86%7D%20x_%7B3%7D%5E%7B0.86%7D%20%5Cleqslant%200%7D%20%5C%5C%20%7B10-4%20%5Ctimes%2010%5E%7B-3%7D%20x_%7B1%7D%5E%7B-4%7D%20x_%7B2%7D%20x_%7B3%7D%5E%7B3%7D%20%5Cleqslant%200%7D%20%5C%5C%20%7Bx_%7B1%7D%5Cleft(x_%7B2%7D%2B1.5%5Cright)%2B4.4%20%5Ctimes%2010%5E%7B-3%7D%20x_%7B1%7D%5E%7B-4%7D%20x_%7B2%7D%20x_%7B3%7D%5E%7B3%7D-3.7%20x_%7B3%7D%20%5Cleqslant%200%7D%20%5C%5C%20%7B375-3.56%20%5Ctimes%2010%5E%7B5%7D%20x_%7B1%7D%20x_%7B2%7D%5E%7B-1%7D%20x_%7B3%7D%5E%7B-2%7D%20%5Cleqslant%200%7D%20%5C%5C%20%7B4-x_%7B3%7D%20%2F%20x_%7B1%7D%20%5Cleqslant%200%7D%20%5C%5C%20%7B1%20%5Cleqslant%20x_%7B1%7D%20%5Cleqslant%204%7D%20%5C%5C%20%7B4.5%20%5Cleqslant%20x_%7B2%7D%20%5Cleqslant%2050%7D%20%5C%5C%20%7B10%20%5Cleqslant%20x_%7B3%7D%20%5Cleqslant%2030%7D%5Cend%7Barray%7D%5Cright.%20%5Cend%7Bequation%7D

创建目标函数:

function f = ex10_6a(x)

f = x(1)*x(1)*(x(2)+2)*x(3);

创建非线性约束条件函数:

function[c,ceq] = ex10_6b(x)

c(1) = ...

c(2) = ...

c(3) = ...

c(4) = ...

c(5) = ...

ceq = 0;

求解程序如下:

clear all

clc

x0=[2 25 20]';

lb=[1 4.5 10]';

ub=[4 50 30]';

[x,fval,exitflag]=fmincon(@ex10_6a,x0,[],[],[],[],lb,ub,@ex10_6b)

2. fseminf 函数

math?formula=%5Cmin%20_%7Bx%7D%5C%7BF(x)%20%7C%20C(x)%20%5Cleq%200%2C%20%5Coperatorname%7BCeq%7D(x)%3D0%2C%20%5Coperatorname%7BPHI%7D(x%2C%20w)%20%5Cleq%200%5C%7D

math?formula=s.t.%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bl%7D%7BA%5E%7B*%7D%20x%20%5Cleq%20B%7D%20%5C%5C%20%7BA%20e%20q%5E%7B*%7D%20x%3DB%20e%20q%7D%5Cend%7Barray%7D%5Cright.

上述问题的 Matlab 命令格式为:

X=FSEMINF(FUN,X0,NTHETA,SEMINFCON,A,B,Aeq,Beq)

其中 FUN 用于定义目标函数,X0 为 x 的初始值;NTHETA 是半无穷约束

math?formula=PHI(x%2Cw) 的个数;函数 SEMINFCON 用于定义非线性不等式约束

math?formula=C(x),非线性等

式约束

math?formula=Ceq(x) 和半无穷约束

math?formula=PHI(x) 的每一个分量函数,函数 SEMINFCON 有两个输入参量 X和S,S是推荐的取样步长,也许不被使用。

【例】

math?formula=min%20f(x)%20%3D%20%5Csum_%7Bi%3D1%7D%5E3(x_i-0.5)%5E2

约束为:

math?formula=K_%7B1%7D%5Cleft(x%2C%20w_%7B1%7D%5Cright)%3D%5Csin%20%5Cleft(w_%7B1%7D%20x_%7B1%7D%5Cright)%20%5Ccos%20%5Cleft(w_%7B1%7D%20x_%7B2%7D%5Cright)-%5Cfrac%7B1%7D%7B1000%7D%5Cleft(w_%7B1%7D-50%5Cright)%5E%7B2%7D-%5Csin%20%5Cleft(w_%7B1%7D%20x_%7B3%7D%5Cright)-x_%7B3%7D%20%5Cleq%201%5C%5C%20K_%7B2%7D%5Cleft(x%2C%20w_%7B2%7D%5Cright)%3D%5Csin%20%5Cleft(w_%7B2%7D%20x_%7B2%7D%5Cright)%20%5Ccos%20%5Cleft(w_%7B2%7D%20x_%7B1%7D%5Cright)-%5Cfrac%7B1%7D%7B1000%7D%5Cleft(w_%7B2%7D-50%5Cright)%5E%7B2%7D-%5Csin%20%5Cleft(w_%7B2%7D%20x_%7B3%7D%5Cright)-x_%7B3%7D%20%5Cleq%201%5C%5C1%20%5Cleq%20w_%7B1%7D%20%5Cleq%20100%2C1%20%5Cleq%20w_%7B2%7D%20%5Cleq%20100

function f = fun6(x)

f = sum((x-0.5).^2);

function [c,ceq,k1,k2,s]=fun8(x,s);

c=[];ceq=[];

if isnan(s(1,1))

s=[0.2,0;0.2 0];

end

%取样值

w1=1:s(1,1):100;

w2=1:s(2,1):100;

%半无穷约束

k1=sin(w1*x(1)).*cos(w1*x(2))-1/1000*(w1-50).^2-sin(w1*x(3))-x(3)-1;

k2=sin(w2*x(2)).*cos(w2*x(1))-1/1000*(w2-50).^2-sin(w2*x(3))-x(3)-1;

%画出半无穷约束的图形

plot(w1,k1,'-',w2,k2,'+');

[x,y] = fseminf(@fun6,rand(3,1),2,@fun7)

>>

x =

0.9525

0.8183

0.3714

y =

0.3227

3.fminimax()函数

9288884297ff

上述问题的 Matlab 命令为

X=FMINIMAX(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON)

【例】

求函数族取最大最小值时得x值

function f=fun9(x);

f=[2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304

-x(1)^2-3*x(2)^2

x(1)+3*x(2)-18

-x(1)-x(2)

x(1)+x(2)-8];

[x,y] = fminimax(@fun9,rand(2,1))

>>

x =

4.0000

4.0000

y =

0.0000

-64.0000

-2.0000

-8.0000

-0.0000

转载地址:https://blog.csdn.net/weixin_32424885/article/details/116036994 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:视频提取音频php,如何提取视频中的音频,从视频文件中提取出音频输出成MP3格式...
下一篇:php 模拟微博,PHP-redis 模拟 新浪微博redis应用框架的实例

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月14日 11时49分00秒