9

In sympy ho un integrale che restituisce un oggetto a tratti, ad es.Gestione delle equazioni a tratti restituite da sympy integrate

In [2]: from sympy.abc import x,y,z 

In [3]: test = exp(-x**2/z**2) 

In [4]: itest = integrate(test,(x,0,oo)) 

In [5]: itest 
Out[5]: 
⎧ ___             
⎪ ╲╱ π ⋅z  │     ⎛  1   ⎞│ π 
⎪ ─────── for │periodic_argument⎜──────────────, ∞⎟│ ≤ ─ 
⎪ 2   │     ⎜   2  ⎟│ 2 
⎪    │     ⎝polar_lift (z) ⎠│  
⎪               
⎪∞               
⎪⌠               
⎨⎮ 2             
⎪⎮ -x              
⎪⎮ ───             
⎪⎮ 2             
⎪⎮ z              
⎪⎮ ℯ dx     otherwise     
⎪⌡               
⎪0               
⎩  

vorrei estrarre solo il primo ramo di questa equazione a tratti, in altre parole, vorrei essere in grado di fare qualcosa di simile itest.parts(0) per estrarre semplicemente sqrt(pi)*z/2. Non riesco a trovare alcun modo per farlo, ma forse sto usando i termini di ricerca sbagliati nella documentazione. Qualche idea?

Modifica

Rovistando un po ', sono riuscito a scoprire che se lo faccio itest.args[0][0] posso estrarre questa espressione. Questo sembra un po 'un trucco, comunque. C'è un approccio migliore?

risposta

10

In generale, l'utilizzo di .args è il modo corretto per accedere a parti di un'espressione.

In questo caso, però, c'è la possibilità di integrate che vi permetterà di ignorare le condizioni di convergenza

In [39]: integrate(test, (x, 0, oo), conds='none') 
Out[39]: 
    ___ 
╲╱ π ⋅z 
─────── 
    2 

Inoltre, se si imposta in modo esplicito le ipotesi che si conosce sulle variabili, spesso la determinazione condizioni di convergenza loro stessi (non sembra accadere in questo caso per ipotesi semplici su z, comunque). Ad esempio, se sapessi che z era reale, utilizza z = Symbol('z', real=True). Di solito partendo dal presupposto che le cose siano reali, o addirittura migliori, quando si sa che ciò aiuterà molto a garantire la convergenza.

Problemi correlati