Création d'un matrice aléatoire avec la somme des lignes <=0.13

samir -  
 Utilisateur anonyme -
Bonjour,

J'ai un matrice. Par exemple x=rand(10 ,8). Mon question comment pose un condition tel que la somme de chaque ligne dans le matrice x ne dépasse pas 0.13

c'est à dire ;

comment crée un matrice aléatoire avec la somme de chaque ligne de ce matrice ne dépasse pas 0.13

merci merci....

A voir également:

1 réponse

Utilisateur anonyme
 
Salut,

Je pense que tu peux le faire via une fonction récursive.

Rappel : une fonction récursive est une fonction qui s'appelle elle-même. Pour éviter des appels infinis, il faut prévoir une condition d'arrêt qui correspond généralement au cas le plus simple (qui est la dernière étape de tout traitement avec cette fonction).

Imaginons que tu es une matrice 3x3 donc en particulier à chaque ligne, 3 colonnes. Il faut donc générer 3 nombres par ligne. Comme c'est la même chose pour les 3 lignes, on ne s'intéresse qu'à une des trois.

Dans un premier temps, tu vas appeler ta fonction pour générer un nombre entre 0 et 0.13.
Appel n°1 : Admettons que tu es obtenu 0.05. Après avoir généré 0.05, appelle la même fonction à l'intérieur d'elle même (appel récursif) mais pour générer un nombre entre 0 et 0.13-0.05=0.08.
Appel n°2 : Admettons que tu es obtenu 0.03. Comme tu appelles de nouveau ta fonction après avoir généré un nombre, tu l'appelle encore une fois avec 0.08-0.03=0.05 pour générer un nombre entre 0 et 0.05.
Appel n°3 : A ce niveau là, tu rentres dans ta condition de sortie de ton appel récursif. En effet, il fallait que tu génères 3 nombres donc il te reste plus qu'à générer un nombre entre 0 et 0.05. Admettons que ce soit 0.05 (pile poil 0.13 !), renvoie-le sous forme d'un tableau : [0.05]
La valeur est renvoyée à l'appel n°2. Il faut maintenant que tu stockes le nombre généré en 2 dans la liste renvoyée soit : [0.05,0.03] et que tu la renvoie.
La valeur est renvoyée à l'appel n°1. Comme c'est la même fonction, il faut aussi que tu stockes la valeur générée de l'appel n°1 dans cette liste puis que tu la renvoie.

Tu obtiens : [0.05,0.03,0.05] et 0.05 + 0.03 + 0.05 = 0.13 <= 0.13.

La fonction récursive prendra en entrée :
- la valeur maximum à générer (par exemple 0.13 donc générer entre 0 et 0.13)
- la profondeur d'exécution (pour savoir combien de fois on a appelé récursivement cette fonction). Initiallement, ce paramètre vaudra 0 car c'est la première fois que l'appelle.

En langage naturel :

SI la profondeur d'exécution vaut 2 (0,1,2 donc 3 appels) ALORS générer un nombre entre 0 et la valeur maximum à générer. Renvoyer cette valeur sous forme d'un tableau (qui ne contient qu'une valeur ici).

Générer un nombre entre 0 et la valeur maximum à générer (paramètre).

Appeler la fonction récursivement avec :
- nouvelle valeur maximum à générer = ancienne valeur maximum à générer - la valeur générée juste avant
- nouvelle profondeur d'exécution = ancienne profondeur d'exécution + 1

Ajouter la valeur renvoyée par l'appel précédent dans une liste et la renvoyer.



Aider est mon nindo
0