Matlab非线性规划

1.非线性规划函数

fmincon函数用于寻找约束非线性多变量函数的最小值。这个函数怎么用?

这是语法格式:

x = fmincon(fun,x0,A,b) 从 x0 开始,尝试在满足线性不等式 A*x ≤ b 的情况下寻找 fun 中所述的函数的最小值点 x。x0 可以是标量、向量或矩阵。
x = fmincon(fun,x0,A,b,Aeq,beq) 在满足线性等式 Aeq*x = beq 以及不等式 A*x ≤ b 的情况下最小化 fun。如果不存在不等式,则设置 A = [] 和 b = []。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 对 x 中的设计变量定义一组下界和上界,使解始终在 lb ≤ x ≤ ub 范围内。如果不存在等式,请设置 Aeq = [] 和 beq = []。如果 x(i) 无下界,请设置 lb(i) = -Inf,如果 x(i) 无上界,请设置 ub(i) = Inf。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。如果没有非线性不等式或等式约束,请设置 nonlcon = []。
 

参数的相关含义为:

b 和 beq 是向量,A 和 Aeq 是矩阵,c(x) 和 ceq(x) 是返回向量的函数,f(x) 是返回标量的函数。f(x)、c(x) 和 ceq(x) 可以是非线性函数。
x、lb 和 ub 可以作为向量或矩阵传递

2.线性不等式约束

目标函数为:

约束条件为从点[-1,2]为起点求最小值,约束方程为 

最后的Matlab代码为:

m=@(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;%匿名函数
x0=[-1,2];
a=[1,2];
b=1;
[x,y]=fmincon(m,x0,a,b)

 运行结果为:

 3.线性不等式与等式约束

Matlab代码为:

clc
clear all
m=@(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;%匿名函数
x0=[1,1];%初始点数据自行不同
a=[1,-2];
b=1;
Aeq=[2,1];
Beq=1;
[x,y]=fmincon(m,x0,a,b,Aeq,Beq)

运行结果为:

 4.带有非线性约束的求最值

目标函数与约束条件为:

Matlab代码为:

clc
clear all
%%主函数
options=optimset('largescale','off');
[x,y]=fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[],@nonlcon,options)

%%目标函数
function f=fun(x)
f=sum(x.^2)+8;
end

%%非线性约束条件
function [c,ceq]=nonlcon(x)
c=[-x(1)^2+x(2)-x(3)^2
    x(1)+x(2)^2+x(3)^3-20];
ceq=[-x(1)-x(2)^2+2
    x(2)+2*x(3)^2-3];
end

运行结果为:

其中,目标函数为最小化函数,fun是一个函数,fun接受向量或数组x,并返回实数标量f,即在x处计算的目标函数值。
非线性约束条件,nonlcon是一个函数,接受向量或数组x,并返回两个数组c(x)和ceq(x)。
 5.非线性约束

在边界约束下求目标函数在圆内最小的点。​目标函数与约束条件为:

同时在以[1/3,1/3]为圆心、半径为1/3的圆内对结果进行寻找,从而得出Matlab代码为:

clc
clear all
%%主函数
m=@(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;%匿名函数
lb=[0,0.2];
ub=[0.5,0.8];
A=[];
b=[];
Aeq=[];
beq=[];
x0=[1/4,1/4];
nonlcon=@circle;
[x,y]=fmincon(m,x0,A,b,Aeq,beq,lb,ub,nonlcon)

%%非线性约束条件
function [c,ceq]=circle(x)
c=(x(1)-1/3)^2+(x(2)-1/3)^2-(1/3)^2;
ceq=[];
end

运行结果为:

  • 13
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值