用fseminf函数求半无限约束多变量非线性函数的最小值,初值给定。目标是使f(x)最小化。因为不可能计算所有的可能值,所以必须选择一个区域,在它上面计算样本数据集。
fseminf函数的调用格式为:
x = fseminf(fun, x0, ntheta, seminfcon) 初值为x0,ntheta表示半无限约束的个数,半无限约束为seminfcon的fun函数的最小值。
x = fseminf(fun, x0, ntheta, seminfcon, A, b) 该函数试图满足线性不等式A*x <= b。
x = fseminf(fun, x0, ntheta, seminfcon, A, b, Aeq, beq) 在上面的基础上添加线性等式Aeq*x = beq。当没有不等式存在时,设置A=[ ]、b=[ ]。
x = fseminf(fun, x0, ntheta, seminfcon, A, b, Aeq, beq, lb, ub) 定义设计变量x的一系列下界lb和上界ub, 使得总有lb <= x <= ub。
x = fseminf(fun, x0, ntheta, seminfcon, A, b, Aeq, beq, lb, ub, options) 用options结构指定的优化参数进行最小化。
[x, fval] = fseminf(...) 返回解x处的目标函数值。
[x, fval, exitflag, output] = fseminf(...) 返回描述退出条件的exitflag参数和包含优化信息的输出参数output。
[x, fval, exitflag, output, lambda] = fseminf(...) 返回包含解x处拉格朗日乘子的lambda参数。
各调用格式中,ntheta参数为半无限约束的个数。options参数为优化参数选项,为一结构,有以下一些字段:
CheckGradients ——比较用户提供的导数(梯度)和有限差分导数。
Diagnostics ——显示待最小化或待求解函数的诊断信息。
DiffMaxChange ——变量有限差分的最大变化。
DiffMinChange ——变量有限差分的最小变化。
Display ——显示水平。设置为 'off' 时不显示输出;设置为 'iter' 时显示每一步迭代过程的输出;设置为 'final' 时显示最终的迭代结果。
MaxFunctionEvaluations ——函数评价的最大次数。
MaxIterations ——函数迭代的允许最大次数。
ConstraintTolerance ——约束超出值的终止容限。
FunctionTolerance ——函数值的终止容限。
StepTolerance ——解x处的终止容限。
seminfcon参数计算非线性不等式矢量c,非线性等式矢量ceq和ntheta,半无限约束(矢量或矩阵)K1, K2,..., Kntheta。seminfcon参数是一个包含函数名的字符串,该函数可以是M文件、内部文件或MEX文件。例如,若seminfcon='myinfcon',则M文件myinfcon.m有下面的形式:
function [c,ceq,K1,K2,...,Kntheta,S] = myinfcon(x,S)
% 初始化样本区间
if isnan(S(1,1)),
S = ... % S有ntheta行、2列
end
w1 = ... % 计算样本集
w2 = ... % 计算样本集
...
wntheta = ... % 计算样本集
K1 = ... % x和w处的一阶半无限约束
K2 = ... % x和w处的二阶半无限约束
...
Kntheta = ... % x和w处的最后一阶半无限约束
c = ... % 计算x处的非线性不等式
ceq = ... % 计算x处的非线性等式
S为建议的样本区间,可以用它也可以不用它。如果没有此约束存在,将为c和ceq返回空矩阵。
矢量或矩阵K1, K2, ..., Kntheta包含分别为样本集中的独立变量w1, w2, ... wntheta进行评价的半无限约束。两个列矩阵S包含w1, w2, ... wntheta值的建议的样本区间,它们用于评价K1, K2, ... , Kntheta。S矩阵的第i行包含评价Ki的样本区间。当Ki为一矢量时,只用S(i, j)(第2列可以都为零)。当Ki为一矩阵时,S(i, 2)用于对Ki中的行进行取样,S(i,1)被用作Ki中列的取样区间。第一次迭代,S为空值,所以有些初始取样区间必须由seminfcon参数来决定。