算例: 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)简单函数形式
fun = @(x)x(1)^2 + x(2)^2;2)函数形式
function [f] = fun(x) f = x(1)^2 + x(2)^2; end 变量作用x待优化变量f:返回目标函数在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} x12≤x2x12+2x1x2≤5x1=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} x12−x2≤0x12+2x1x2−5≤0x1−x22=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:返回非线性等式约束我们往往会遇到待优化函数或者非线性约束中带参数情况,有两种解决变法:
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+2x1x2≤5
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没有的项一定要用空格站位
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+c2x1x2≤5
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)%返回优化后变量这里"…"是指当前行未完,连接下一行
