首页/文章/ 详情

Matlab数值优化应用在化工中

3年前浏览3865

image.png

 过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,qq:927550334 

QQ图片20210424105303.png

    在实际工程应用过程中经常碰到从多个可能方案中选出最合理、能实现预定最优目标方案,这个方案就称为最优方案。通常最优方案获得需要在多个相互约束的变量中取得平衡。例如,化学反应的速率随着温度的升高而增加,提高反应器温度有利于增加产量,但是提高温度可能会增加不必要的副产物,同时也增加过程能耗,因此反应器的最优操作温度就要综合考虑这些因素的影响寻找最优方案的方法称为最优化方法。

最优化问题的基本形式与分类

一个最优化问题可以定义如下。

目标函数:             image.png

约束条件:         image.png

    式中,x是由n个变量组成的向量,称为决策变量或自变量;h(x)是一组维数为m1的等式向量,称为等式约束;g(x)是一组维数为m2的不等式向量,称为不等式约束

    某化肥集团公司有两个化肥厂,其产能分别为aii = 1,2现需将其分别配送到10个分销点, 两个工厂到分销点的运输价格为Cij,, i= 1,2; j = 1,2,…,10,运输量.xij,i=l,2; j =l,2,…,10必须保证每个分销店的销售量dj;,j=1,2,…,10,求运输费用达到最少时的运输量。根据以上描述,写出该最优化问题的目标函数和约束条件。

目标函数:              image.png 

约束条件:

image.png

    根据目标函数和约束条件方程和自变量x类型不同可以将最优化分为不同类型。如果最优化问题没有约束条件,则称为无约束优化问题,反之则称为有约束优化问题。如果目标函数和约束条件都是线性关系,则称为线性规划问题,在生产计划安排、生产调度、资源分配等常可遇见这类问题。如果目标函数为非线性函数,则该问题为非线性优化问题,特别地,如果目标函数具有平方和的形式,则称为最小二乘问题,最小二乘问题在模型参数回归中应用十分广泛,过冷水在实际应用中就经常使用最小二乘法回归化工模型参数。

数值最优化算法的基本思路

数值最优化通常采用迭代方法,即从一个初始的猜测解x0出发,通过优化算法产生一个迭代数列.xk, ,使xk在迭代过程中逐渐减小,当迭代至xk无法再减小时,求解完成.迭代时,从任意x。出发寻找下一个迭代点工w1需要确定搜索方向和搜索步长,这可以表示为

image.png

pk表示搜索方向;ak表示搜索步长,根据确定搜索方向和步长基本思想不同,可分为两种策略:线搜索策略和信赖域策略。过冷水在此不打算讲两种算法的详细思路,而是给比较实用的如何应用Matlab解决优化问题。

给出Matlab最优化常用函数

Matlab最优化工具箱函数

非线性最小二乘问题

非线性最小二乘问题

lsqcurvefit

非线性最小二乘法曲线拟合

lsqcurvefit

非线性最小二乘法曲线拟合

lsqnonlin

非线性最小二乘法

lsqnonlin

非线性最小二乘法

非线性多目标极小值问题

线性最小二乘

fgoalattain

多变量多目标达到

lsqlin

线性约束最小二乘法

fminimax

多变量最大值最小值

lsqnonneg

非负线性最小二乘法

非线性最小值函数

线性规划问题

fminbnd

单目标最小值

bintprog

0-1整数规划

fmincon

有约束多变量最小值

linprog

线性规划

fminsearch

无约束多变量极值

quadprog

二次规划

fminunc

无约束多变量极值



fseminf

半无穷多变量极值



 利用以上 MATLAB优化工具箱函数求解最优化问题的步骤如下。

(1)分析数学模型,选择恰当优化函数。

(2)根据选择的最优化函数,进行必要编程求解问题,包括以下步骤

编写目标函数;

编写约束条件(等式,不等式,边界,非线性约束条件);

设置求解函数的输入输出,进行求解﹔

观察结果是否合理。

以下结合具体实例介绍部分函数的使用。

线性规划问题

线性规划研究的问题主要有两类:确定一项任务,如何统筹安排,以尽量少的资源完成任务如何用一定量的资源来完成最多的任务。在化工厂的排产过程中经常使用线性规划

线性规划问题数学模型为

目标函数:              image.png 

约束条件:image.png

用于求解线性规划问题主要使用linprog函数,

[x,fval]= linprog(f,A,b,Aeq,beq,lb,ub,xo,options)

某工厂生产甲、乙两种产品,已知生产1 kg甲产品需要原料A 2 kg,原料B 5 kg;生产l kg乙产品需要原料A 3 kg,原料B 7 kg,原料C 6 kg。如果l kg产品甲和乙的销售价格分别为5万元和15万元,三种原料限用量分别为150 kg、200 kg和 120 kg。试确定应分别生产这两种产品各多少公斤才能使总销售价格最高?


令生产甲数量为x,生产乙数量为x,根据题意可以建立如下模型。

目标函数:              image.png 

约束条件:            image.png

程序如下

 f=[ -5 -15];
A=[2 3;5 7;0 6];
b= [150;200;120];
lb=[0;0];
[x,fval]=linprog(f,A,b,[],[],lb)
Optimal solution found.
x =
   12.0000
   20.0000
fval =
  -360

当生产甲乙两种产品12kg和20kg时,可以实现360万元销售额.

无约束非线性规划

当目标函数或约束条件中有一个或多个为非线性函数,就称这样的规划问题为非线性规划。根据模型中约束条件的有无,非线性规划分为无约束非线性规划和有约束非线性规划两大类问题。

MATLAB用于求解无约束非线性规划问题函数为fminbnd、fminsearch和 fminunc。其中 fminbnd 函数只可以求解单变量无约束非线性规划问题; fminsearch 函数和fminunc函数则可用于求解单变量或多变量无约束非线性规划问题。

1. fminbnd 函数 利用该函数可以求解区间[x1, x2]内单变量函数的最小值,常用的调用格式如下。

[x,fval,exitflag] = fminbnd(fun,xl,x2,options),在区间[x1, x2]内,用options指定的优化参数对目标函数fun进行最小化;并返回最小解x及x处的目标函数值fval。

2. fminunc函数﹑利用该函数可以求解单变量或多变量函数的最小值,常用的调用格式如下。

[x,fval,exitflag] = fminunc(fun,x0,options),以给定的初值x0,用options 指定的优化参数对目标函数fun进行最小化,如果省略options则按默认参数进行最小化,最后返回最小解x及x处的目标函数值fval。

3. fminsearch函数﹑利用该函数可以求解单变量或多变量函数的最小值,常用的调用格式如下。

[x,fval,exitflag] =fminsearch(fun,x0,options),以给定的初值x0,用options指定的优化参数对目标函数fun进行最小化;如果省略options则按默认参数进行最小化,最后返回最小解x及x处的目标函数值fval, fminsearch使用算法与fminunc不同。

求函数f(x)在[-5,5]上最小值。

image.png

fun='(x^3 x^2-1)/(exp(x) exp(-x))';
[x,fval,exitflag]=fminbnd(fun,-5,5)
x =
   -3.3112
fval =
   -0.9594
exitflag =
     1
函数在x=-3.3112处取最小值-0.9594
目标函数也可以采用匿名函数
f=@(x)((x^3 x^2-1)/(exp(x) exp(-x)))
[x,fval,exitflag]=fminbnd(f,-5,5)
f =
  包含以下值的 function_handle:
    @(x)((x^3 x^2-1)/(exp(x) exp(-x)))
x =
   -3.3112
fval =
   -0.9594
exitflag =
          1

最小二乘法

    最小二乘优化问题也是一类最优化问题,在科学研究与工程设计中经常会遇到这类问题。例如,系统辨识中的参数估计问题,BP神经网络中权值训练问题,根据大量实验数据去构造某种形式函数的数据拟合问题等,过冷水在最优化问题上最常用的就是最小二乘法。非线性最小二乘优化问题的数学模型为

image.png

在MATLAB优化工具箱中求解非负最小二乘问题的函数为

[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin ( fun,x0,lb,ub,options)

其中:

(1) fun和x0是不可缺省的输人变量;

( 2) fun函数句柄,对于指定的x返回目标函数的计算值;

在研究一些具体问题时,常需根据数学理论和问题的实际特征用一个某种形式的函数 y = f(x,a1,a2,...,am)作为未知函数近似表达式,其中,a1,a2,...,am为待定常数,为了使这个函数所确定的关系能接近已有数据,可要求参数a1,a2,...,am取极小值。这是一种特殊的最小二乘问题,称为最小二乘拟合问题,其数学模型为

image.png

在MATLAB优化工具箱中求解非负最小二乘问题的函数为

[a,resn,resid,exitflag]= lsqcurvefit( fun,a0,xdata,ydata,lb,ub,options)

输入变量规定:

( l) fun、a0、xdata和 ydata是不可缺省的输入变量;

( 2) fun函数句柄,对于指定的x返回目标函数的计算值;

(3) a0是向量,为待拟合参数a,ag,…,am的初始值;

(4)  xdata和 ydata分别是已知的自变量数据和因变量数据﹔

(5) 其他参数说明参见前面的函数。

输出变量:

a为最小二乘拟合获得参数值, resnorm为拟合残差平方和, residual为残差, exitflag为程序退出标志。

求解非线性最小二乘问题

image.png

x0=[1 1];
[x,resn,resid,exit] = lsqnonlin(@objfun,x0,lb)
Local minimum possible.
lsqnonlin stopped because the final change in the sum of squares relative to 
its initial value is less than the value of the function tolerance.
<stopping criteria details>
x =
    1.4142    0.0000
resn =
   30.0000
resid =
    1.0000    5.0000   -2.0000
exit =
     3


已知数据

x

1

2

3

4

5

6

7

8

y

15.3

20.5

27.4

36.6

49.1

65.6

87.8

117.6

 试用y=a1exp(a2x)函数拟合

image.png 

x=1:8;
y=[15.3 20.5    27.4    36.6    49.1    65.6    87.8    117.6];
a0=[1 1];
fun=@(a,x)(a(1)*exp(a(2)*x))
[a,resn,resid]= lsqcurvefit(fun,a0,x,y)
xcal=1:0.1:8;
ycal=fun(a,xcal);
plot(x,y,'bo',xcal,ycal,'k-')
legend('Original Data','Fitted Curve')

    本期过冷水和大家分享了数值优化的问题概括,同时给出了线性规划,无约束规划,最小二乘优化这三类问题的具体解决办法,灵活应用本文给出的案例函数,基本就可以解决工作遇到的常见优化问题,希望大家能够快速学会应用到实践中去。

图片

        过冷水发表于 仿真秀 平台原创文章,未经授权禁止私自转载,如需转载请需要和作者沟通表明授权声明,未授权文章皆视为侵权行为,必将追责。如果您希望加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载均可加群:927550334。

精品回顾

 matlab绘制农夫过河动态图

分子动力学的原子空间运动轨迹演示编程

过冷水带你用matlab制作演示动画

python批量移动文件&重命名代码分享

过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享

image.png

MATLAB
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-11-02
最近编辑:3年前
过冷水
博士 | 讲师 讨论号:927550334
获赞 360粉丝 184文章 107课程 11
点赞
收藏
作者推荐

免费 5.0
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈