Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 27-08-2016 16:24:50
- Damien
- Invité
algorithme réactions diffusion/reaction
Bonjour à tous. Dans le cadre de mon TIPE je cherche à coder un algorithme python pour modéliser la création des motifs sur les pelages des animaux. J’ai essayé de coder par moi-même, soit avec des fonctions python, soit avec un schéma numérique… mais cela ne donne pas grand-chose (mon « pelage » reste uni sans motif). J’ai donc trouvé cet algorithme en MAPLE (je n’y connais rien du tout) qui normalement fonctionne mais je n’ai pas réussi à le traduire correctement. Quelqu’un saurait-il me le transcrire en python ? merci beaucoup
> with(linalg) ;
Les fonctions de reaction :
> f :=(u,v,a) -> a-u+u^2*v ;
> g :=(u,v,b)->b-u^2*v ;
La solution homogene stationnaire (u_eq,v_eq) :
> s :=solve({f(u,v,a)=0,g(u,v,b)=0},{u,v}) ;
> u_eq :=(a,b)->a+b ;
> v_eq :=(a,b)->b/((a+b)^2) ;
La matrice jacobienne au point d’équilibre : (on la définit d’abord comme une liste de listes)
> AA :=(a,b,gamma,d,lambda)->[[gamma*D[1](f)(u_eq(a,b),v_eq(a,b),a,b) –lambda, gamma*D[2](f)(u_eq(a,b),v_eq(a,b),a,b)], [gamma*D[1](g)(u_eq(a,b),v_eq(a,b)),gamma*D[2](g)(u_eq(a,b),v_eq(a,b)-lambda*d]] ;
Pour obtenir une matrice on utilise convert
> A :=(a,b,gamma,d,lambda)->convert(AA(a,b,gamma,d,lambda),matrix) ;
La valeur critique d_c est solution de l’equation quadratique
> q :=(a,b,d)->d^2*(D[1](f)(u_eq(a,b),a,b))^2+2*(2*D[2](f)(u_eq(a,b),v_eq(a,b),a,b)*D[1](g)(u_eq(a,b),v_eq(a,b))-D[1](f)(u_eq(a,b),v_eq(a,b),a,b)*D[2](g)(u_eq(a,b),v_eq(a,b)))*d+(D[2](g)(u_eq(a,b),v_eq(a,b)))^2 ;
> solve(q(0.25,0.75,d) ;
> eigenvects(A(0.25,0.75,8,20,(1*Pi^2)/1)) ;
On choisit des valeurs des parameters a, b, gamma et d, puis on fait le graphe du determinant en function de lambda
> plot(det(A(0.25,0.75,8,20,lambda)),lambda=0.4..2.5) ;
On trouve les valeurs pour les different modes sur un domaine rectangulaire
> tableau :=proc(m_min,m_max,n_min,n_max,p,q)
local h,i,j,k ;
h :=i->[seq(evalf(Pi^2*(k^2/(p^2)+i^2/(q^2)),3),k=m_min..m_max)] ;
array([seq(h(j),j=n_min..n_max)]) ;
end :
> tableau(0,10,0,10,5,2) ;
#2 29-08-2016 10:02:48
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : algorithme réactions diffusion/reaction
Salut,
Je comprends que tu n'aies pas réussi à traduire ce code en Python.
D'abord es-tu sûr que ce code Maple te fournira du graphisme ?
Vu qu'il y a de de la résolution d'équation à faire, en Python, il te faut utiliser, en les installant, les extensions numpy, voire scipy
Ensuite si tu écris
cela ne donne pas grand-chose (mon « pelage » reste uni sans motif
, c'est que tu veux du graphisme, pour cela il te faut utiliser un GUi de Python : il y a Tkinter en standard - peut-être un peu limité- ou installer WxPython ou Qt.
Autant dire que c'est un boulot "monstrueux" et que tu as peu de chance ici d'avoir une réponse...
Je te conseille d'aller voir ici : http://www.developpez.net/forums/f96/au … thon-zope/
et de leur fournie ton code Python (il aurait été mieux de commencer par là) qui ne marche pas : ils t'aideront sûrement à le corriger, mais je serais étonné que quelqu'un traduise ton code Maple en Python, mais on ne sait jamais...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#3 10-10-2016 15:27:02
- Milos
- Membre
- Inscription : 11-07-2013
- Messages : 94
Re : algorithme réactions diffusion/reaction
Bonjour,
Je ne garantis évidemment absolument rien, mais Maple 2016 par exemple a un utilitaire de génération de code vers un autre langage (dont Python).
Mais cet utilitaire semble assez fruste.
Quand j'essaye par exemple avec ce qui suit :
tableau :=proc(m_min,m_max,n_min,n_max,p,q)
local h,i,j,k ;
h :=i->[seq(evalf(Pi^2*(k^2/(p^2)+i^2/(q^2)),3),k=m_min..m_max)] ;
array([seq(h(j),j=n_min..n_max)]) ;
end :
l'utilitaire me signale une erreur, il ne peut générer une fonction comprenant la définition d'une autre fonction. Je ne vois pas de quoi il s'agit ici, mais de toute façon Maple n'utilise pas d'expression du genre p^2 (quand on tape cette succession de touches, on a p avec 2 en exposant).
Ça risque fortement de ne pas marcher, mais si vous voulez que j'essaye, déjà de voir si votre source Maple (au format Maple..) tourne toujours avec les versions 2015 ou 2016, et si oui d'en traduire ce que je peux, au moins par fragments, je suis à votre disposition.
Dernière modification par Milos (10-10-2016 15:31:10)
Hors ligne
#4 10-10-2016 15:58:49
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : algorithme réactions diffusion/reaction
Salut,
Les fonctions de fonctions existent en Python.
Si tu nous disais ce qu'est censée faire ton script, je pourrais essayer de le faire fonctionner après l'avoir écrit directement en Python.
Le seul sur ce forum, à ma connaissance, à utiliser Maple est leon1789, attends qu'il repasse...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#5 10-10-2016 19:30:52
- Milos
- Membre
- Inscription : 11-07-2013
- Messages : 94
Re : algorithme réactions diffusion/reaction
Bonsoir,
Euh.. Je n'oserais pas dire que j'"utilise" Maple comme je suis nul, mais enfin j'ai ce programme et dans ses deux dernières versions, 2015 et 2016.
Cordialement,
Milos
Hors ligne
Pages : 1
Discussion fermée