Chaos is a ladder.|

West11

园龄:11个月粉丝:1关注:1

非线性规划

什么是非线性规划

非线性规划,指约束条件中有非线性约束。

非线性约束,即约束的不等式中含有高次幂项,如 x12+x221就是一个非线性约束。

matlab标准型,只能求解最小值问题,且约束条件要是小于等于的不等式

matlab函数求解非线性规划

[x, value] = fmincon(@f, x0, A, b, Aeq, beq, lb, ub, @nonlfun, option);
%f为外部目标函数,@f为取函数句柄,类似取地址。 此外,偷懒的话可以用匿名函数,如f=@(x)x^2;
%x0为初始值,是一个向量,非线性规划必须有初始值,该函数只能求局部最优解。
%A, b, Aeq, beq, lb, ub为约束
%option为不同求解方法,共五种。可以用它们都算一遍会有不同结果
%@nonlfun为定义在外部的非线性部分约束,分为等式约束和不等式约束 function [c,ceq] = nonlfun1(x) c为不等式约束,ceq为等式约束

关于option的问题详见:寻找约束非线性多变量函数的最小值 - MATLAB fmincon - MathWorks 中国

Ex:

minf(x)=x12+x22+x32+8

s.t

x1x2+x30x1+x22+x3320x1x22+2=0

 %设目标函数: min f(x)=x(1)^2+x(2)^2+x(3)^2+8
x0 = [0;0;0];%初值0 0 0
A = [-1;1;-1];
b=[0];
[x, value] = fmincon(@f, x0, A, b, [], [], [], [], @nonlfun);

%目标函数
function y = f(x)
    y = x(1)^2+x(2)^2+x(3)^2+8
end

%约束函数
function [c,ceq] = nonlfun(x)
    c = x(1)+x(2)^2+x(3)^3-20;
    ceq = -x(1)-x(2)^2+2;
end

本文作者:cxy1114blog

本文链接:https://www.cnblogs.com/cxy1114blog/p/18459112

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   West11  阅读(11)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起