matlab非线性规划--简单入门

非线性规划


1.非线性规划问题


如果目标函数或者约束条件中包含非线性函数,就称这种问题为非线性规划问题。


2.非线性规划的Matlab标准形式及问题求解


在这里插入图片描述
式中:
f(x) 为标量函数;
A,b,Aeq,beq,lb,ub为相应维数的矩阵和向量;
**c(x),ceq(x)**为非线性向量函数。
Matlab中的命令是:

[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
式中:
x的返回值是决策向量x的取值;fval返回的是目标函数的取值,其中fun是用M文件定义的函数f(x);x0x的初始值;
A,b,Aeq,beq定义了线性约束A*x<=b,Aeq*x=beq;
如果没有线性约束,则A=[ ],b=[ ],Aeq=[ ],beq=[ ];lbub是变量x的下界和上界,如果上界和下界没有约束,即x无下界也无上界,则lb=[ ],ub=[ ],也可以写成lb的各变量都为 -infub的各变量都为inf
nonlcon是用M文件定义的非线性向量函数c(x),ceq(x);
options定义了优化参数,可以使用Matlab默认的参数设置。
fmincon的初始值x0可以任意取,只要保证为实数就行。
具体解释:《MATLAB fmincon 的初值x0的选取问题》
链接: https://blog.csdn.net/lcp201281095/article/details/79801822.


3.非线性规划例题


例1:求下列非线性规划:
在这里插入图片描述
解:(1)编写M函数fun1.m定义目标函数:

function f =fun1(x);
f=sum(x.^2)+8

(2)编写M函数fun2.m定义非线性约束条件:

function [g,h]=fun2(x);
g=[-x(1)^2+x(2)-x(3)^2
	x(1)+x(2)^2+x(3)^3-20];%非线性不等式约束
h=[-x(1)-x(2)^2+2
	x(2)+2*x(3)^2-3];%非线性等式约束

(3)编写主程序文件如下:

[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')

其中fmincon中的 rand(n,m) 是产生由在(0, 1)之间均匀分布的随机数组成的数组。用法:1.rand(2,3),则会得到一个2行3列的在1以内的随机矩阵。2.rand(3),则会得到一个3行3列的随机方阵。3.rand(size(A)) 返回一个和A矩阵有相同尺寸的随机矩阵。

程序运行结果:
在这里插入图片描述

求得当x1=0.5522,x2=1.2033,x3=0.9478时,最小值y=10.6511


例2:求下列非线性规划问题。

在这里插入图片描述
解:(1)编写m文件,定义目标函数:

function f=fun44(x)
f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));

(2)编写m文件,定义约束条件:

function [g,ceq]=myconl(x)
g(1)=x(1)-400;
g(2)=1.1*x(1)+x(2)-440;
g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;
g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;
ceq=0;

(3)编写主程序,即可编写m文件也可以在命令窗口直接输入命令:

x0=[1,1,1,1];
lb=[0,0,0,0];
ub=[];A=[];b=[];Aeq=[];beq=[];
[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,lb,ub,'myconl');
x,fval=-fval

程序运行结果:
在这里插入图片描述
求得的最优解为x1=86.1883,x2=104.2878,x3=126.1883,x4=152.6879,对应的最优值为z=43.0860


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值