IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] faire varier n variable


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Points : 97
    Points
    97
    Par défaut [Tableaux] faire varier n variable
    hello,

    Voici mon problème:
    J'ai n variable (x1,x2,...,xn) que je doit faire varier (de 0 a 1) mais la somme de ces variable doivent toujours etre =1
    exemple pour n=3:
    x1 ; x2 ; x3
    1 ; 0 ; 0
    0.9;0.1; 0
    0.9; 0 ;0.1
    0.8;0.2; 0
    0.8;0.1;0.1
    0.8; 0;0.2
    etc.
    jusqu'à
    0; 0; 1

    Je n'arrive pas a trouver comment faire ca. Si qqun saurai m'aider ca serai vraiment génial.
    D'avance un grand merci

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Bonjour,

    Tu peux faire une boucle qui va prendre une valeur aléatoire. Pour la première valeur, tu fais un rand(0,1000) pour avoir une valeur entre 0 et 1000 (que tu divises par 1000 pour rester entre 0 et 1. Pour la seconde tu fais un rand entre 0 et (1000 - valeur précédente), pour la suivante entre 0 et (1000 - somme des valeurs précédentes) etc. et pour la dernière tu utilises la différence entre 1000 et la somme de toutes tes valeurs.

    J'espère avoir été clair! bon courage.

    EDIT: Hum, désolé premier post de la journée, je n'avais pas bien compris ton probleme... donc j'ai répondu a coté...

  3. #3
    Membre régulier Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Points : 108
    Points
    108
    Par défaut
    Mets tes variables dans un tableau et fais une boucle.

  4. #4
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par NiHiL
    Mets tes variables dans un tableau et fais une boucle.
    Oui cela me parrai évidant d'utiliser un tableau et un boucle. Mais mon problème est justement que je ne sais pas comment faire cette boucle pour qu'elle fasse ce que je veux et surtout pour n variable!!

  5. #5
    Membre régulier Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Points : 108
    Points
    108
    Par défaut
    Ba c'est simple, si t'as n variables appellées X :

    • X1 comprise entre 0 et 1 / (n/2)
    • X2 comprise entre 0 et (1-X1) / ((n-1) / 2)
    • X3 comprise entre 0 et (1-X1-X2) / ((n-2) / 2)
    • X4 comprise entre 0 et (1-X1-X2-X3) / ((n-3) / 2)
    • ....
    • Xn = 1 - (1-X1-X2-X3...-X(n-1))

  6. #6
    Membre régulier Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Points : 108
    Points
    108
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?
     
    $n = 10; 
    $t = 0;   
    for ($i = 0; $i < $n; $i++) 
    {  
    	if ($i != $n - 1) :
    		$rand = rand(0, (1 - $t) * 10); 
    		$array["\$x$i"] = $rand / 10; 
    		$t += $rand / 10;
     
    	else :
    		$array["\$x$i"] = 1 - $t;
     
    	endif;
    }
     
    var_dump($array);
     
    ?>

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par NiHiL
    Ba c'est simple, si t'as n variables appellées X :

    • X1 comprise entre 0 et 1 / (n/2)
    • X2 comprise entre 0 et (1-X1) / ((n-1) / 2)
    • X3 comprise entre 0 et (1-X1-X2) / ((n-2) / 2)
    • X4 comprise entre 0 et (1-X1-X2-X3) / ((n-3) / 2)
    • ....
    • Xn = 1 - (1-X1-X2-X3...-X(n-1))
    alors j'ai essayé de faire ce que tu m'as dis et j'ai fait ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $n=3;
     For ($x1=1;$x1>=0;$x1-=0.1) 
     {
     	$x2=(1-$x1) / (($n-1) / 2);
    	$x3=(1-$x1-$x2) / (($n-2) / 2);	 
     
    echo "$x1 , $x2 , $x3,<br>";
     
     
     }
    mais ca me donne ca a l'affichage:
    1 , 0 , 0,
    0.9 , 0.1 , 0,
    0.8 , 0.2 , 0,
    0.7 , 0.3 , 0,
    0.6 , 0.4 , 0,
    0.5 , 0.5 , 0,
    0.4 , 0.6 , 0,
    0.3 , 0.7 , 0,
    0.2 , 0.8 , 0,
    0.1 , 0.9 , 0,
    1.3877787807814E-16 , 1 , 0,
    2 question:
    - comment faire pour que x3 varie aussi
    - et comment faire pour que l'utilisateur entre le n et puisse faire avec autant de variable qu'il désire?

    merci

  8. #8
    Membre régulier Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Points : 108
    Points
    108
    Par défaut
    Essaye le code que j'ai donné ensuite.

  9. #9
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Points : 97
    Points
    97
    Par défaut
    ok parfait pour pouvoir avoir n variable.
    Mais la pour les valeurs de xn tu faire un rand alors qu'il faut impérativement que j'ai toute les possibilité
    x1 ; x2 ; x3
    1 ; 0 ; 0
    0.9;0.1; 0
    0.9; 0 ;0.1
    0.8;0.2; 0
    0.8;0.1;0.1
    0.8; 0;0.2
    etc.
    jusqu'à
    0; 0; 1
    donc comme puis je faire ca?
    (merci encore)

  10. #10
    Membre régulier Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Points : 108
    Points
    108
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for ($i = 0; $i <= 1; $i = $i + 0.1) 
    	for ($j = 0; $j <= 1; $j = $j + 0.1)
    		for ($k = 0; $k <= 1; $k = $k + 0.1)
    			$array[] = array($i, $j, $k);
     
     
    var_dump($array);

  11. #11
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par NiHiL
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for ($i = 0; $i <= 1; $i = $i + 0.1) 
    	for ($j = 0; $j <= 1; $j = $j + 0.1)
    		for ($k = 0; $k <= 1; $k = $k + 0.1)
    			$array[] = array($i, $j, $k);
     
     
    var_dump($array);
    2 problème avec ca:
    1) les sommes ne sont pas tjrs =1
    2) comment faire si j'ai n variable.

    Donc il faudrai:
    1) que la somme des xn soit tjrs=1
    2) que ce soit faisable pour n variable (n étant défini par l'utilisateur) (et c est justement la que ca pose problème je pense)
    3) que les variable varie de 0 a 1 comme ca (exemple avec n=3)
    x1 ; x2 ; x3
    1 ; 0 ; 0
    0.9;0.1; 0
    0.9; 0 ;0.1
    0.8;0.2; 0
    0.8;0.1;0.1
    0.8; 0;0.2
    etc.
    jusqu'à
    0; 0; 1

    Merci de prendre du temps pour essayer de trouver une solution a ce problème plutot comptex.

  12. #12
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Pour trois variables tu peux adapter la solution de Nihil en modifiant les conditions d'arret (c'est pas $k <=1 mais plutot $k<= 1-$i-$j) .

    Pour n variables je pense qu'il va falloir quelquechose de récursif

  13. #13
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 198
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par koopajah
    Pour trois variables tu peux adapter la solution de Nihil en modifiant les conditions d'arret (c'est pas $k <=1 mais plutot $k<= 1-$i-$j) .

    Pour n variables je pense qu'il va falloir quelquechose de récursif
    Ok pour 3 mais il faut vraiment que ce soit faisable avec n variable...
    Je ne sais vraiment pas comment.

  14. #14
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par swissmade
    Ok pour 3 mais il faut vraiment que ce soit faisable avec n variable...
    Je ne sais vraiment pas comment.
    Je pense qu'il va te falloir passer par une fonction récursive qui va te construire le tableau de toutes les solutions. Je n'ai pas d'idée exacte en tête mais en voila certaines
    1/ en paramètre il va falloir donner la valeur minimum et la valeur maximum que peut prendre l'indice courant (entre 0 et 1 pour x1, entre 0 et 1-x1 pour x2 etc). Il faut aussi passer l'indice courant (1 pour x1, 2 pour x2), il faut passer le tableau des solutions courantes, le pas aussi (ici 0.1).

    2/ il faut faire une boucle du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for($i = $min ; $i <= $max ; $i += $pas)
       {
       mafonctionrecursive($indice+1, $min, 1-$max-$i, $pas, $solutions);
       }
    3/ ainsi qu'un teste pour savoir si tu en es à xN ou pas et si oui remplir la solution courante (ce qui implique un tableau de plus en paramètre contenant la solution courante).

    Je sais que je ne suis pas très clair mais ca ne sont que quelques idées.

  15. #15
    Membre régulier Avatar de NiHiL
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Points : 108
    Points
    108
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for ($i = 0; $i <= 1; $i = $i + 0.1) 
    	for ($j = 0; $j <= 1; $j = $j + 0.1)
    		for ($k = 0; $k <= 1; $k = $k + 0.1)
    			if ($i + $j + $k == 1)
    				$array[] = array($i, $j, $k);
     
     
    var_dump($array);

    après tu fais du cas aprticulier pour chaque nombre de variable. J'ai pas trouvé autre chose.

Discussions similaires

  1. [XL-2007] comment faire varier une variable
    Par lysander31 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/04/2014, 12h50
  2. [Débutant] Faire varier des variables d'une fonction
    Par nicolas.tran dans le forum MATLAB
    Réponses: 6
    Dernier message: 24/10/2012, 08h35
  3. faire varier 5 variables
    Par sellamelie dans le forum Mathématiques
    Réponses: 5
    Dernier message: 28/03/2011, 15h56
  4. faire varier les variables
    Par PAYASS59 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 16/03/2011, 19h56
  5. [Tableaux] Faire un tableau à cases variables
    Par Ludo75 dans le forum Langage
    Réponses: 2
    Dernier message: 19/11/2006, 19h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo