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)最小化目标函数。
求解非线性程序
最小phi(x)x
约束条件为
g(x)=0h(x)>=0lb<=x<=ub
使用序列二次规划方法。
第一个参数是向量的初始猜测x0.
第二个自变量是指向目标函数的函数句柄phi。目标函数必须接受一个向量参数,然后返回一个标量。
第二个自变量也可以是函数句柄的2元素或3元素元胞数组。第一个元素应该指向目标函数,第二个应该指向计算目标函数梯度的函数,第三个应该指向一个计算目标函数Hessian的函数。如果没有提供梯度函数,则通过有限差来计算梯度。如果未提供Hessian函数,则使用BFGS更新公式来近似Hessian。
提供时,梯度函数phi2.
必须接受onevector参数并返回一个向量。提供后,Hessian函数phi3.
必须接受一个向量参数并返回一个矩阵。
第三和第四个参数g和h是函数句柄,分别指向计算相等约束和相等约束的函数。如果问题没有等式(或不等式)约束,则使用空矩阵([])g或h). 当提供时,这些等式和不等式约束函数必须接受一个向量参数并返回一个向量。
第三个和第四个自变量也可以是函数句柄的2元素元胞数组。第一个元素应指向约束函数,第二个元素应指计算约束函数基数的函数:
[df(x)dfd(x)df(x)]转置([-------…------])[dx_1dx_2dx_N]
第五和第六参数,lb和ub,包含的下限和上限x。这些必须与相等和相等约束一致g和h。如果参数是向量,则x(i) 受约束lb(i) 以及ub(i) 。边界也可以是标量,在这种情况下,的所有元素x将共享同一绑定。
第七个参数maxiter指定重复的最大次数。默认值为100。
第八个参数tolerance指定停止标准的公差。默认值为sqrt(eps)
.
中返回的值信息可以是以下其中之一:
算法正常终止。所有约束都符合指定的公差。
BFGS更新失败。
已达到最大迭代次数。
步长变得太小,即deltax,小于tol*范数(x)
.
调用的示例sqp
:
函数r=g(x)r=[sumsq(x)-10;x(2)*x(3)-5*x(4)*x;端函数obj=phi(x)obj=exp(prod(x))-0.5*(x(1)^3+x(2)^3+1)^2;端函数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.76364obj=0.053950info=101iter=8nf=10lambda=-0.0401627 0.0379578-0.0052227
详见: qp.
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号