Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 27-08-2016 15: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 09:02:48

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

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...

En ligne

#3 10-10-2016 14: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 14:31:10)

Hors ligne

#4 10-10-2016 14:58:49

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

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...

En ligne

#5 10-10-2016 18: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

Pied de page des forums