您的位置:首页 > 编程语言 > MATLAB

matlab_非线性优化

2015-08-19 11:44 381 查看
求解非线性问题:

min z = f(x)

s.t. c(x)≤0,

ceqx=0,

Ax≤b,

Aeqx=beq,

lb≤x≤ub.

【fmincon函数】

[x, fval, exitflag, output, lambda, grad, hessian] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options, P1, P2, …)

其中,x, b, beq, lb,和ub为线性不等式约束的上、下界向量, A 和 Aeq 为线性不等式约束和等式约束的系数矩阵矩阵,fun为目标函数,nonlcon为非线性约束函数。

函数f的定义:

function[c,ceq] = mycon(x)

c= … % 计算x处的非线性不等式。

ceq= … % 计算x处的非线性等式。

非线性约束条件的定义:

function[c,ceq,GC,GCeq] = mycon(x)

c = … % 解x处的非线性不等式。

ceq = … % 解x处的非线性等式。

if nargout > 2 % 被调用的nonlcon函数,要求有4个输出变量。

GC = … % 不等式的梯度。

GCeq = … % 等式的梯度。

【例题】

min f = -x1 - 2x2 + 0.5x12 + 0.5x22

s.t. 2x1 + 3x2 ≤ 6,

x1 + 4x2 ≤ 5,

2x1 + 3x22 ≤ 6,

0 ≤ x1,x2.

【代码】

function Example()
A = [2 3; 1 4];
b = [6; 5];
vlb = [0; 0];
x0 = [0; 0];
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon('myfun',x0,A,b,[],[],vlb,[],'nonlia');
end

function f = myfun(x)
f = -x(1) - 2 * x(2) + 0.5 * (x(1).^2 + x(2).^2);
end

function [c, ceq] = nonlia(x)
c = 2 * x(1) + 3 * x(2).^2 - 6;
ceq = [];
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab