Octave还可以使用成功的二次规划解算器执行一般的非线性最小化。
[x, obj, info, iter, nf, lambda] =
sqp (x0, phi)
¶[…] =
sqp (x0, phi, g)
¶[…] =
sqp (x0, phi, g, h)
¶[…] =
sqp (x0, phi, g, h, lb, ub)
¶[…] =
sqp (x0, phi, g, h, lb, ub, maxiter)
¶[…] =
sqp (x0, phi, g, h, lb, ub, maxiter, tolerance)
¶使用序列二次规划(SQP)最小化目标函数。
求解非线性程序
min phi (x) x
约束条件为
g(x) = 0 h(x) >= 0 lb <= x <= ub
使用序列二次规划方法。
第一个参数是向量的初始猜测x0.
第二个自变量是指向目标函数的函数句柄phi。目标函数必须接受一个向量参数,然后返回一个标量。
第二个自变量也可以是函数句柄的2元素或3元素元胞数组。第一个元素应该指向目标函数,第二个应该指向计算目标函数梯度的函数,第三个应该指向一个计算目标函数Hessian的函数。如果没有提供梯度函数,则通过有限差来计算梯度。如果未提供Hessian函数,则使用BFGS更新公式来近似Hessian。
提供时,梯度函数phi{2}
必须接受onevector参数并返回一个向量。提供后,Hessian函数phi{3}
必须接受一个向量参数并返回一个矩阵。
第三和第四个参数g和h是函数句柄,分别指向计算相等约束和相等约束的函数。如果问题没有等式(或不等式)约束,则使用空矩阵([])g或h). 当提供时,这些等式和不等式约束函数必须接受一个向量参数并返回一个向量。
第三个和第四个自变量也可以是函数句柄的2元素元胞数组。第一个元素应指向约束函数,第二个元素应指计算约束函数基数的函数:
[ d f(x) d f(x) d f(x) ] transpose ( [ ------ ----- ... ------ ] ) [ dx_1 dx_2 dx_N ]
第五和第六参数,lb和ub,包含 x的下限和上限,如果给定则必须是和x0尺寸相同的向量. 边界必须满足相等和不相等约束 g 和 h.
第七个参数maxiter指定重复的最大次数。默认值为100。
第八个参数tolerance指定停止标准的误差范围。默认值为sqrt (eps)
.
中返回的值info可以是以下其中之一:
算法正常终止。所有约束都符合指定的误差范围。
BFGS更新失败。
已达到最大迭代次数。
步长变得太小,即deltax,小于tol * norm (x)
.
调用的示例sqp
:
function r = g (x) r = [ sumsq(x)-10; x(2)*x(3)-5*x(4)*x(5); x(1)^3+x(2)^3+1 ]; endfunction function obj = phi (x) obj = exp (prod (x)) - 0.5*(x(1)^3+x(2)^3+1)^2; endfunction x0 = [-1.8; 1.7; 1.9; -0.8; -0.8]; [x, obj, info, iter, nf, lambda] = sqp (x0, @phi, @g, []) x = -1.71714 1.59571 1.82725 -0.76364 -0.76364 obj = 0.053950 info = 101 iter = 8 nf = 10 lambda = -0.0401627 0.0379578 -0.0052227
详见: qp.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2