fmincon 目标函数与非线性约束nonlcon带参数

it2025-10-19  6

fmincon 目标函数与非线性约束(nonlcon)带参数

一、目标函数1.首先建立简单的目标函数(不带梯度)2.建立标准目标函数(带梯度) 二、非线性约束三、目标函数与非线性约束带参数1.参数仅在目标函数中:2.目标函数与非线性约束均带参数

一、目标函数

      算例: f = x 1 2 + x 2 2 f = {x_1}^2 + {x_2}^2 f=x12+x22       fmincon优化目标函数,梯度可带可不带,但是在(1)(2)情况下,最好带上:             ( 1 ) 梯 度 容 易 求 出 ( 2 ) 加 快 优 化 速 度 (1)梯度容易求出(2)加快优化速度 (1)(2)

1.首先建立简单的目标函数(不带梯度)

      1)简单函数形式

fun = @(x)x(1)^2 + x(2)^2;

      2)函数形式

function [f] = fun(x) f = x(1)^2 + x(2)^2; end 变量作用x待优化变量f:返回目标函数在x处的值

2.建立标准目标函数(带梯度)

function [f,gradf] = fun(x) f = x(1)^2 + x(2)^2; gradf = [2*x(1);2*x(2)]; end 变量作用x待优化变量f:返回目标函数在x处的值gradf:返回目标函数在x处的梯度

二、非线性约束

x 1 2 ≤ x 2 x 1 2 + 2 x 1 x 2 ≤ 5 x 1 = x 2 2 \begin{array}{l} {x_1}^2 \le {x_2}\\ {x_1}^2 + 2{x_1}{x_2} \le 5\\ {x_1}={x_2}^2 \end{array} x12x2x12+2x1x25x1=x22 改写 x 1 2 − x 2 ≤ 0 x 1 2 + 2 x 1 x 2 − 5 ≤ 0 x 1 − x 2 2 = 0 \begin{array}{l} {x_1}^2-{x_2} \le0 \\ {x_1}^2 + 2{x_1}{x_2} -5\le 0\\ {x_1}-{x_2}^2=0 \end{array} x12x20x12+2x1x250x1x22=0

function [c,ceq] = nonlcon(x) c(1) = x(1)^2-x2; c(2) = x(1)^2+2*x1*x2-5; ceq = x(1)-x(2)^2; end 变量作用x待优化变量c:返回非线性不等式约束ceq:返回非线性等式约束

三、目标函数与非线性约束带参数

      我们往往会遇到待优化函数或者非线性约束中带参数情况,有两种解决变法:

1.参数仅在目标函数中:

f = p 1 x 1 2 + p 2 x 2 2 x 1 2 + 2 x 1 x 2 ≤ 5 \begin{array}{l} f = {p_1}{x_1}^2 + {p_2}{x_2}^2\\ {x_1}^2 + 2{x_1}{x_2} \le 5 \end{array} f=p1x12+p2x22x12+2x1x25

function [f,gradf] = fun(x,p1,p2) f = p1*x(1)^2 + p2*x(2)^2; gradf = [2*p1*x(1);2*p2*x(2)]; end function [c,ceq] = nonlcon(x) c = x(1)^2+2*x1*x2-5; ceq = []; end x0 = [-1,2]; x = fmincon(@fun,x0,[],[],[],[],[],[],@nonlcon,options,p1,p2)%返回优化后变量

对于fmincon没有的项一定要用空格站位

2.目标函数与非线性约束均带参数

f = p 1 x 1 2 + p 2 x 2 2 c 1 x 1 2 + c 2 x 1 x 2 ≤ 5 \begin{array}{l} f = {p_1}{x_1}^2 + {p_2}{x_2}^2\\ {c_1}{x_1}^2 + {c_2}{x_1}{x_2} \le 5 \end{array} f=p1x12+p2x22c1x12+c2x1x25

function [f,gradf] = fun(x,p1,p2) f = p1*x(1)^2 + p2*x(2)^2; gradf = [2*p1*x(1);2*p2*x(2)]; end function [c,ceq] = nonlcon(x,c1,c2) c = c1*x(1)^2+c2*x1*x2-5; ceq = []; end x0 = [-1,2]; x = fmincon(@(x)fun(x,p1,p2),x0,[],[],[],[],[],[],... @(x)nonlcon(x,c1,c2),options)%返回优化后变量

这里"…"是指当前行未完,连接下一行

最新回复(0)