Bonjour
Je dois résoudre une équation différentielle de la forme dx/dt=vx avec vx=gradient(S(x,y)par rapport a x (idem pour y). S est la phase d'une fonction d'onde compliquée. Donc je commence par écrire la fonction, sa phase et la dérivée avec sympy.
Ensuite pour résoudre l'équation je dois créer une fonction python de vx car l'équa_diff est trop compliquée pour être résolue en symbolique. J'utilise donc lambdify. Le problème est qu'il reste des dérivées symbolique dans vx et donc lamdify ne marche pas, python me dit qu'il manque un argument (j'imagine que c'est la dérivée.
voilà vx:
- (re(sin(x)*sin(2*y)) + im(sin(2*x)*sin(y)))*|--(re(sin(2*x)*sin(y))) - --(im \dx dx ------------------------------------------------------------------------------ (re(sin(x)*sin(2*y)) + im( \ /d (sin(x)*sin(2*y)))| + (re(sin(2*x)*sin(y)) - im(sin(x)*sin(2*y)))*|--(re(sin(x / \dx ------------------------------------------------------------------------------ 2 2 sin(2*x)*sin(y))) + (re(sin(2*x)*sin(y)) - im(sin(x)*sin(2*y))) d \ )*sin(2*y))) + --(im(sin(2*x)*sin(y)))| dx / ---------------------------------------Quelqu'un aurait il une idée pour résoudre ce problème
Code : 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
21
22
23
24
25
26
27
28
29
30
31 from matplotlib import * from matplotlib.pyplot import * from numpy import * from sympy import * from sympy.plotting import plot3d init_printing() def part_2d (L,n,m,x,y): z=sin(n*pi*x/L)*sin(m*pi*y/L) return z x,y,t= symbols('x y t') X=Function('X') Y=Function('Y') L=pi psi=part_2d(L,2,1,x,y)+I*part_2d(L,1,2,x,y) S=arg(psi) mod_psi=abs(psi) plot3d(mod_psi, (x, -pi, pi), (y, -pi, pi)) vx=S.diff(x) vy=S.diff(y) Vx=vx.subs([(x,X(t)),(y,Y(t))]) Vy=vy.subs([(x,X(t)),(y,Y(t))]) Vx_n=lambdify([X(t),Y(t)],Vx) Vy_n=lambdify([X(t),Y(t)],Vy)
Merci d'avancd
Partager