Optimisation sur scilab

Fermé
zozoooo - 9 sept. 2009 à 00:49
 Utilisateur anonyme - 10 sept. 2009 à 12:31
Bonjour,
je souhaiterai programmer sur scilab le problème suivant:
Si x un vecteur (à n coordonnees reelles), i=1 à n, x(i): i ème coordonnée d x
Je cherche à ecrire un programme qui resout: min x(i) sur {i=1,...,n telque x(i)<0}
merci d avance
A voir également:

3 réponses

Utilisateur anonyme
9 sept. 2009 à 06:02
Bonjour,

Le code général pour calculer un min d'un vecteur en Scilab est le suivant (pourtant la fonction existe déjà nativement, tape help min dans la console pour avoir de l'aide sur cette fonction) :

min=x(1);
for i=2:size(x,2)
  if x(i)<min then min = x(i);
  end;
end;


Ceci suppose que le vecteur x est déjà définit.

Le code précédent calcule le minimum peut importe les valeurs de x (positives ou négatives). Tu devrais faire une boucle de test sur ton vecteur x pour s'assurer que toutes les valeurs sont négatives (pour être conforme à ton message initial) :

for i=1:size(x,2)
  if x(i)>=0 then messagebox("Valeur non négative");break;
  end;
end;


@ +
0
merci vos responses, mais mon soucis c d optimiser sur i (je pense q c de l optimsation discree) et non sur x,
le prb est min x sur { i tel que x<0}
0
Utilisateur anonyme
10 sept. 2009 à 12:31
OK, si j'ai bien compris, ce que tu cherches c'est trouver, dans un premier temps, l'ensemble des i qui vérifie x(i)<0. On appelle cet ensemble S par exemple.

Soit N = [1,n]
S={ i Є N / x(i)<0 }

Voici le code pour trouver S
j=1;

for i=1:size(x,2)
  if x(i)<0 then
    s(j)=i;
    j=j+1;
  end;
end;

Les éléments de l'ensemble S sont enregistrés dans le vecteur s.

La suite sera de déterminer min(x(i)) sur S ? Si c'est ça, alors le minimum du vecteur X sur S et le même que sur N car le i correspondant au min(X) sur N appartient forcément à S.

Je crois que ta fonction objectif n'est pas bien définie. Pour que ça ait un sens, c'est l'un des deux possibilités :

max(X) sur { i tel que x(i)<0}
min(X) sur { i tel que x(i)>0}

Tu peux m'expliquer en utilisant les données que j'ai introduites avec plus de détails ton problème ?

@ +
0