25.3非线性规划

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.必须接受一个向量参数并返回一个矩阵。

第三和第四个参数gh是函数句柄,分别指向计算相等约束和相等约束的函数。如果问题没有等式(或不等式)约束,则使用空矩阵([])gh). 当提供时,这些等式和不等式约束函数必须接受一个向量参数并返回一个向量。

第三个和第四个自变量也可以是函数句柄的2元素元胞数组。第一个元素应指向约束函数,第二个元素应指计算约束函数基数的函数:

[df(x)dfd(x)df(x)]转置([-------…------])[dx_1dx_2dx_N]

第五和第六参数,lbub,包含的下限和上限x。这些必须与相等和相等约束一致gh。如果参数是向量,则x(i) 受约束lb(i) 以及ub(i) 。边界也可以是标量,在这种情况下,的所有元素x将共享同一绑定。

第七个参数maxiter指定重复的最大次数。默认值为100。

第八个参数tolerance指定停止标准的公差。默认值为sqrt(eps).

中返回的值信息可以是以下其中之一:

101

算法正常终止。所有约束都符合指定的公差。

102

BFGS更新失败。

103

已达到最大迭代次数。

104

步长变得太小,即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号