什么是非线性规划
非线性规划,指约束条件中有非线性约束。
非线性约束,即约束的不等式中含有高次幂项,如 \(x_1^2+x_2^2\leq 1\)就是一个非线性约束。
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)=x_1^2+x_2^2+x_3^2+8\)
s.t
\(x_1-x_2+x_3\geq0\\ x_1+x_2^2+x_3^3\leq20\\ -x_1-x_2^2+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
标签:函数,非线性,约束,nonlfun,ceq,x0,规划
From: https://www.cnblogs.com/cxy1114blog/p/18459112