1.利用fmincon函数求解有约束的NLP问题

如果MATLAB中的非线性规划问题可以写成如下形式:

min f(x) Ax<=B A'·x=B' C(x)<=0 C'(x)=0

其中f(x)是标量函数,A,B,A’,B’是相应维数的矩阵和向量,C(x)和C’(x)是非线性向量函数。
x=fmincon(fun,x~0~,a,b,a',b',min,max,nonlcon,options)
它是返回值是向量x,fun是m文件定义的函数 f(x),a,b,a’,b’是线性约束,如果没有则令a,b,a’,b’=[];min和max是x的下界和上界,nonlcon是m文件的约束函数,options定义优化参数。

求解下列非线性规划问题:
min f(x)=x12+x2+8
x12-x2>=0
-x1-x22+2=0
x1,x2>=0

fun1.m:
function f=fun1(x)
f=x(1)^2+x(2)^2+8;
fun2.m
function [g,h]=fun2(x)
g=-x(1)^2+x(2);
h=-x(1)-x(2)^2+2;
test.m
clc;
options=optimset('LargeScale','off','display','iter');
[x,y]=fmincon(@fun1,[1,1],[],[],[],[],[0,0],[],@fun2,options)

求得x1=1,x2=1时,最小值为10.

2.梯度法(最速下降法)

顾名思义,梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。
基本步骤是:对于函数f(x),给定了一个初始值x0,以及精度ε>0,通过迭代直到 ||∇f(xk)||2<ε,求步长λ,令xk+1=xk+λ∇f(xk),再判别此时梯度的范数是否大于ε,求最佳步长的方法:微分法,将带有λ表达式的xk+1代入到f(x),令f(x)的导数等于0,求出的λ为最佳步长。
最佳步长表达式一般为(f为一阶偏导数,H为二阶偏导):

用梯度法求f(x)=4x1+6x2-2x12-2x1x2-2x22的极大点,选取初值[1,1],精度0.01;

方法1,间接法求λ:

fun1.m
function [f,df]=fun1(x)
f=4*x(1)+6*x(2)-2*x(1)^2-2*x(1)*x(2)-2*x(2)^2;
df(1)=4-4*x(1)-2*x(2);
df(2)=6-2*x(1)-4*x(2);
test.m
clc;
x=[1,1];
[f,df]=fun1(x);
while norm(df)^2>0.01syms kx1=x+k*df;[f1,df1]=fun1(x1);s=diff(f1);k=solve(s==0);x=x+k*df[f,df]=fun1(x)
end

求得x= [ 11/32, 21/16 ],f = 2389/512,

方法2,直接法求λ:

fun1.m
function [f,df,d2f]=fun1(x)
f=4*x(1)+6*x(2)-2*x(1)^2-2*x(1)*x(2)-2*x(2)^2;
df=[4-4*x(1)-2*x(2);6-2*x(1)-4*x(2)];
d2f=[-4 -2;-2 -4];
test.m
clc;
x=[1;1];
[f,df,d2f]=fun1(x);
while norm(df)^2>0.01k=df'*df/(df'*d2f*df)    %k是负的x=x-k*df[f,df,d2f]=fun1(x)
end

方法3,不求λ:

fun1.m
function [f,df]=fun1(x)
f=4*x(1)+6*x(2)-2*x(1)^2-2*x(1)*x(2)-2*x(2)^2;
df=[4-4*x(1)-2*x(2);6-2*x(1)-4*x(2)];
test.m
clc;
x=[1;1];
[f0,df]=fun1(x);
while norm(df)^2>0.01p=df/norm(df);t=1.0;f=fun1(x+t*p);while f<f0t=t/2;f=fun1(x+t*p);endx=x+t*p[f0,df]=fun1(x)
end

3.牛顿法

原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) = f(x0)+(x-x0)f’(x0)
求解方程f(x)=0,即f(x0)+(x-x0)f’(x0)=0,求解x = x1=x0-f(x0)/f’(x0),因为这是利用泰勒公式的一阶展开,f(x) = f(x0)+(x-x0)f’(x0)处并不是完全相等,而是近似相等,这里求得的x1并不能让f(x)=0,只能说f(x1)的值比f(x0)更接近f(x)=0,于是乎,迭代求解的想法就很自然了,可以进而推出x(n+1)=x(n)-f(x(n))/f’(x(n)),通过迭代,这个式子必然在f(x)=0的时候收敛。

在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f’=0的问题,这样求可以把优化问题看成方程求解问题(f’=0)。剩下的问题就和上面提到的牛顿法求解很相似了。

这次为了求解f’=0的根,把f(x)的泰勒展开,展开到2阶形式:

这个式子是成立的,当且仅当 Δx 无线趋近于0。此时上式等价于:

求解:

得出迭代公式:

特别注意:牛顿法对于二次函数极为有效,因为二次函数的二阶偏导矩阵都为常数,一步就可以算出极小值,就不需要选定步长,否则,就按梯度法选择步长的方法。

以2中问题为例

fun1.m
function [f,df,d2f]=fun1(x)
f=4*x(1)+6*x(2)-2*x(1)^2-2*x(1)*x(2)-2*x(2)^2;
df=[4-4*x(1)-2*x(2);6-2*x(1)-4*x(2)];
d2f=[-4 -2;-2 -4];
test.m
clc;
x0=[1;1];
[f,df,d2f]=fun1(x0);
x=x0-d2f\df
f=fun1(x)

考虑非二次函数:
用Newton法求解无约束非线性规划问题:
min f(x)=x14+25x24+x12x22
选取x0=[2;2],ε=10-6.

fun1.m
function [f,df,d2f]=fun1(x)
f=x(1)^4+25*x(2)^4+x(1)^2*x(2)^2;
df=[4*x(1)^3+2*x(1)*x(2)^2;4*x(1)*x(2)];
d2f=[12*x(1)^2+2*x(2)^2 4*x(1)*x(2);4*x(1)*x(2) 300*x(2)^2+4*x(1)^2];
test.m
clc;
x=[2;2];
[f,df,d2f]=fun1(x);
while norm(df)^2>0.000001k=df'*df/(df'*d2f*df)x=x-k*inv(d2f)*df[f,df,d2f]=fun1(x)
end

注意:如果求极大值,则x=x0+∆;极小值,x=x0-∆

利用MATLAB解决非线性规划(NLP)问题相关推荐

  1. 利用Matlab 解决二维矩阵问题

    写在前面 Matlab是一款非常强大的数学计算工具,学习并使用它进行处理一些数据运算,将会非常之高效. 今天有同学问我了一道关于利用Matlab 解决二维矩阵问题,利用空闲时间给他解答,希望能帮助到他 ...

  2. 利用Matlab解决线性规划问题并绘制特定形状的空间曲面(约束区域的绘图)

    今天女朋友给我发了一个问题 让我帮忙把这个空间平面y给画出来 我寻思着正好前段时间学了一些matlab的绘制曲面的方法,说不定刚好可以用上 那么就开始分析吧! 这应该就是一个高中常见的二元优化问题,但 ...

  3. 利用matlab求解非线性规划问题

    一.无约束最优化问题 用于无约束最优化模型求解                                  函数:可以调用 matlab的的函数, fminsearch.fminunc. 调用格 ...

  4. 电力系统 matlab,利用matlab解决电力系统规划问题

    问题 设计思路 先用传统的基荷.腰荷.峰荷策略解决第一问,然后借助第一问的结果解决第二问.最后后将第一问的策略用代码实现,解决第三问. 一. 1. 划分负荷 明显,无论在任何负载率下,A.B.C发电的 ...

  5. 热传递 matlab,利用matlab程序解决热传导问题

    利用matlab程序解决热传导问题 1哈佛大学能源与环境学院课程作业报告作业名称:传热学大作业--利用 matlab 程序解决热传导问题院系:能源与环境学院专业:建筑环境与设备工程学号:5201314 ...

  6. matlab整数型规优化箱,matlab解决整数规划问题(蒙特卡洛法)

    整数规划: clc,clear; c = [-40;-90]; A = [9 7;7 20]; b = [56;70]; lb = zeros(2,1); [x,fval]= intlinprog(c ...

  7. 弹簧压缩 时间 matlab,用matlab解决弹簧振子摆动与时间的关系

    用matlab解决弹簧振子摆动与时间的关系 用 matlab 解决弹簧振子摆动与时间的关系 学 院:光电信息 班 级:应用物理(111160102) 姓 名:王梅 学 号:11116010224201 ...

  8. 利用Matlab优化工具箱求解旅行商最短路径问题

    前面介绍了利用Matlab二元整数规划求解数独问题,对于另一个问题-旅行商问题也可以用它来求解. 旅行商问题就是找到经过所有站点的最短闭合路径,如下图为在美国地图框架内产生的200个旅行站点,而旅行商 ...

  9. matlab生产计划问题,用MATLAB解决综合生产计划编制过程中的优化问题

    第 18卷第 3期 2005年 6月 常 州 工 学 院 学 报 Journal of Changzhou Institute of Technology Vol. 18 No. 3 Jun. 200 ...

最新文章

  1. (C++)自定义链表并写入
  2. TCP之三次握手四次挥手
  3. 提取变异的转录组序列
  4. Sun Solaris 10 bind 9.x DNS 配置
  5. asp.net core系列 59 Ocelot 构建基础项目示例
  6. 25个非常棒的jQuery滑块插件和教程
  7. How does setModel and getModel work in Fiori
  8. java this 三种用法
  9. 序列生成_Excel中最快速地生成数字序列的方法
  10. 基于VC的扫雷游戏开发
  11. 网件RAX120刷机教程
  12. Android—传感器-距离传感器(ProximitySensor)
  13. 网络编程close与shutdown的区别
  14. ie上直接打开服务器word文档,win7 ie11直接打开word
  15. 外派公司或者外包公司,真的适合选择吗?
  16. P1287 盒子与球
  17. mac如何查看IP地址,mac怎么查看IP地址
  18. Opengl绘制地图
  19. BAPI_GOODSMVT_CREATE MIGO预留成本中心201发货实例
  20. Gitlab和Crowd共享账户集成登入

热门文章

  1. ERP信息化管理软件的财务应用价值
  2. 基于STM32设计的老人防摔倒报警设备(OneNet)
  3. 协会福利|世界区块链大会(乌镇)门票免费领啦!
  4. 微服务配置组件变色龙Archaius
  5. linux 第1个参数时在不兼容的指针类型间转换,警告:从不兼容的指针类型传递参数[默认启用]...
  6. 冰河常逛的23大学习网站,收藏后悄悄努力,然后惊艳所有人
  7. jdbc mysql api_JDBC常用API和使用
  8. python大佬教你爬虫反爬:破解雪碧图反爬
  9. Java生成PDF417二维码
  10. 从零搭建一个基于React+Nextjs的SSR网站(四):如何搭建服务器并部署Nextjs项目