Votre fonction fun
attend exactement trois entrées, c'est-à-dire que le vecteur x
sera toujours 3x1. Donc, votre point de départ doit être un vecteur 3x1, pas 4x1. La fonction fmincon
vous permet de spécifier tout nombre de contraintes linéaires de la forme Ax ≤ b
. Ici, le Ax
est un matrix multiplication: chaque colonne A
correspond à l'une des dimensions de x
, donc A
doit avoir exactement trois colonnes. Le nombre de lignes peut être n'importe quel nombre arbitraire - bien sûr, b
devra avoir la même dimension!
Petit exemple: si vous avez l'inégalité 3*x + 4*y - z ≤ 1
, la première ligne de A
est [3, 4, -1]
. Et la première entrée de b
est 1
. Maintenant, créons une contrainte supplémentaire, par ex. y ≤ 4
, donc vous devez ajouter une ligne [0, 1, 0]
à A
et 4
à b
. Vos matrices sont
A = [3, 4, -1;
0, 1, 0];
b = [1; 4];
Dans votre cas, vous voulez plus de conditions que de variables. Vous pouvez le faire en appelant eye
avec deux paramètres: nombre de lignes et le nombre de colonnes:
>> A = eye(4, 3);
A =
1 0 0
0 1 0
0 0 1
0 0 0
et ajouter manuellement la dernière contrainte:
A(4,:) = [0, 0, -1];
Pour mettre en œuvre la contrainte, que tous les paramètres doivent être supérieur à 0, et z
doit être inférieur à 1, vous pouvez créer vos matrices comme suit:
A = -eye(4, 3);
A(4,:) = [0, 0, 1];
b = [zeros(3,1); 1];
-à-direles équations sont:
-1 * x ≤ 0
, ce qui équivaut à x ≥ 0
-1 * y ≤ 0
, ce qui équivaut à y ≥ 0
-1 * z ≤ 0
, ce qui équivaut à z ≥ 0
z ≤ 1
maintenant, vous pouvez utiliser fmincon
:
>>fmincon(fun, zeros(3,1), A, b);
ans =
1.0000
1.0000
0.0000
S'il vous plaît nous donner le message d'erreur exact que vous obtenez et aussi la «taille» des paramètres vous passez à 'fmincon'. – Lumen
J'ai ajouté un exemple simple –
YNotre estimation de départ a trois éléments, mais la matrice A s'attend à fonctionner sur un 4 elt. Vous avez peut-être voulu créer une matrice 4x3 (qui sera 4 contraintes d'inégalité) –