x = fmincon(fun, x0, A, b)
x = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options)
[x, fval, exitflag, output, lambda, grad, hessian] = fmincon(___)
x = fmincon(problem)
| Paramètre | Description |
|---|---|
| fun | fonction objectif retournant un scalaire réel. |
| x0 | point initial. |
| A, b | inégalités linéaires A*x <= b. |
| Aeq, beq | égalités linéaires Aeq*x = beq. |
| lb, ub | bornes inférieures et supérieures. |
| nonlcon | fonction de contraintes non linéaires retournant c et ceq. |
| options | options créées avec optimoptions ou optimset. |
| Paramètre | Description |
|---|---|
| x | minimiseur calculé. |
| fval | valeur de l'objectif en x. |
| exitflag | indicateur de terminaison. |
| output | structure de diagnostic. |
| lambda | structure des multiplicateurs de Lagrange. |
| grad | gradient de l'objectif en x. |
| hessian | hessien approché du Lagrangien. |
fmincon résout des problèmes de minimisation non linéaire avec contraintes linéaires, bornes et contraintes non linéaires.
Le chemin sqp résout des sous-problèmes quadratiques avec contraintes actives linéarisées, mises à jour BFGS du hessien et recherche linéaire sur une fonction de mérite. Les contraintes non linéaires sont traitées directement dans le sous-problème SQP avec des jacobiens par différences finies ou fournis par l'utilisateur.
Le chemin interior-point construit un point initial intérieur avec une continuation de barrière logarithmique avant d'entrer dans la phase SQP non linéaire. Le chemin active-set maintient un ensemble actif explicite et indique les lignes linéaires actives dans output.activeconstraints. Le chemin sqp-legacy utilise une boucle SQP conservatrice séparée avec sous-problèmes à ensemble actif et décroissance de mérite plus stricte.
Pour les problèmes mal mis à l'échelle, utiliser ScaleProblem avec la valeur obj-and-constr et fournir TypicalX. Nelson met les sous-problèmes SQP à l'échelle, initialise le hessien avec les échelles des variables et applique des tests de décroissance de mérite mis à l'échelle.
Si le SQP non linéaire ne peut pas restaurer la faisabilité, Nelson lance une phase de restauration par continuation pénalisée et renseigne output.restoration lorsque cette phase fournit le point retourné.
Le chemin trust-region-reflective prend en charge les problèmes avec bornes et égalités linéaires, gradients utilisateur, matrices de hessien, callbacks de hessien ou callbacks de multiplication par le hessien, gradients conjugués tronqués projetés, préconditionnement diagonal ou bande et mises à jour du rayon de région de confiance. La structure output inclut des diagnostics de gradients conjugués comme pcgflag, pcgresidual et trustregionradius.
Les modes d'affichage acceptés sont off, none, final, final-detailed, notify, notify-detailed, iter et iter-detailed. Avec Diagnostics à on, Nelson affiche un résumé des variables, fonctions, contraintes et de l'algorithme sélectionné avant la résolution.
Les options par défaut dépendent de l'algorithme : interior-point utilise MaxIterations 1000, MaxFunctionEvaluations 3000, StepTolerance 1e-10 et SubproblemAlgorithm 'factorization' ; les autres algorithmes utilisent MaxIterations 400, MaxFunctionEvaluations '100*numberOfVariables' et StepTolerance 1e-6.
La sortie exitflag vaut 1 (optimalité du premier ordre atteinte), 2 (pas inférieur à StepTolerance), 3 (variation de l'objectif inférieure à FunctionTolerance, trust-region-reflective), 0 (limite d'itérations ou d'évaluations), -1 (arrêt par la fonction de sortie), -2 (aucun point faisable trouvé) ou -3 (objectif sous ObjectiveLimit).
function [c, ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
end
fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
opts = optimoptions('fmincon', 'Display', 'off', 'Algorithm', 'sqp');
[x, fval] = fmincon(fun, [0; 0], [], [], [], [], [], [], @unitdisk, opts)
fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
A = [1 2];
b = 1;
[x, fval, exitflag] = fmincon(fun, [-1; 2], A, b)
function [f, g] = quadobj(x)
f = (x(1) - 1)^2 + (x(2) - 2)^2;
g = [2*(x(1) - 1); 2*(x(2) - 2)];
end
opts = optimoptions('fmincon', 'Display', 'off', 'Algorithm', 'trust-region-reflective', ...
'SpecifyObjectiveGradient', true, 'Hessian', 2*eye(2));
[x, fval] = fmincon(@quadobj, [0; 0], [], [], [], [], [0; 0], [3; 3], [], opts)
function [f, g] = quadobj(x)
f = (x(1) - 1)^2 + (x(2) - 2)^2;
g = [2*(x(1) - 1); 2*(x(2) - 2)];
end
function y = quadhessmult(x, v)
y = 2*v;
end
opts = optimoptions('fmincon', 'Display', 'off', 'Algorithm', 'trust-region-reflective', ...
'SpecifyObjectiveGradient', true, 'HessianMultiplyFcn', @quadhessmult);
[x, fval] = fmincon(@quadobj, [0; 0], [], [], [], [], [0; 0], [3; 3], [], opts)
| Version | Description |
|---|---|
| 2.0.0 | version initiale |