Logarithme pour un calcul sur matrice
Posted:
09 Jan 2013, 15:35
by fred fabry
Bonjour, pourriez vous m'aider sur un probleme de transcription en algo d'un probleme math : soit B une matrice 3 x 3
|0,8 0,1 0,05|
|0,3 1,2 0,1 |
|0,1 0,2 0,4 |
Je doit trouver un algo qui me permet de trouver la valeur n de la matrice B^n (B puissance n) telle que tout les termes de la matrice soit supérieur à k = 1.
c'est pour un langage TI
Je seche complètement, et vous remercie d'avance pour l'aide
Re: Logarithme pour un calcul sur matrice
Posted:
17 Jan 2013, 15:36
by Bisam
Euh, en fait, il n'y a pas besoin de logarithme mais d'un algorithme (notez l'anagramme !).
En pseudo-code :
- Code: Select all
B->A
1->n
Tant que (au moins un terme de la matrice A est strictement plus petit que 1) faire :
B*A->A
n+1->n
Fin tant que
Renvoyer n
Le problème (mathématique) est de savoir si cette boucle s'arrêtera un jour...
Show/Hide spoilerAfficher/Masquer le spoiler
On peut démontrer que cette matrice B est diagonalisable avec 3 racines réelles dont deux entre 0 et 1 et une supérieure à 1. Donc chaque coefficient de la matrice va s'écrire comme une combinaison linéaire des puissances n-èmes de ces 3 valeurs propres et puisque l'une d'elles est strictement plus grande que 1, au moins 1 des coefficients va tendre vers +oo ou -oo. De plus tous les coeffs vont rester positifs. Mais pour arriver à prouver que TOUS les coeffs vont dépasser 1, ce n'est pas encore gagné.
Show/Hide spoilerAfficher/Masquer le spoiler
Dans les faits, par l'algorithme proposé ci-dessus, on trouve que n=14 est la plus petite valeur de n qui convienne.
Re: Logarithme pour un calcul sur matrice
Posted:
23 Feb 2013, 18:20
by marseille
"au moins un terme de la matrice A est strictement plus petit que 1" se traduit dans le langage de la Nspire:
- Code: Select all
min(mat▶list(min(a))) < 1
Tant que j'y suis, je donne aussi la formule du max, (ça peut toujours servir ailleurs) :
- Code: Select all
max(mat▶list(max(a)))
Re: Logarithme pour un calcul sur matrice
Posted:
23 Feb 2013, 21:35
by Lionel Debroux
min(mat▶list(min(a))) < 1
Je trouve dommage que l'implémentation de TI oblige à passer par un mat▶list
En code natif, comme sur TI-68k (
http://debrouxl.github.com/gcc4ti/estack.html ), on utiliserait any_tail + un wrapper de compare_expressions qui rend une valeur du bon type, ou bien, pour le cas particulier de la comparaison avec 1, subtract1_from_top et is_negative. Mais TI ne veut pas qu'on fasse quoi que ce soit en code natif, pas même des programmes de maths...