[Python] pypol 0.4

Stato
Discussione chiusa ad ulteriori risposte.

Pythoner

Utente Silver
25 Dicembre 2009
0
0
0
52
Non è un programma, solo una libreria per gestire i polinomi.

Versione: 0.1
Autore: Michele Lacchia alias (rubik, Python, python, Pythoner, x-reynik-x)
In breve: pypol è una semplice libreria per manipolare polinomi.
Piattaforma: Tutte, basta avere Python installato.
Changelog: ¬¬¬
Licenza: GNU GPL 3
Documentazione: http://pypol.altervista.org/
I sorgenti: qui

Ed ecco qualche esempio:
Codice:
In [1]: import pypol

In [2]: a = pypol.polynomial('3xy - 3a^2 + 2b')

In [3]: a
Out[3]: - 3a² + 3xy + 2b

In [4]: a.append('-2')

In [5]: a.right_hand_side
Out[5]: -2

In [6]: del a[-1]

In [7]: a.right_hand_side
Out[7]: False

In [8]: a.append('-2')

In [9]: a.letters
Out[9]: ('a', 'b', 'x', 'y')

In [10]: a.powers
Out[10]: <bound method Polynomial.powers of - 3a² + 3xy + 2b - 2>

In [11]: a.powers()
Out[11]: {'a': [2, 0], 'b': [1, 0], 'x': [1, 0], 'y': [1, 0]}

In [12]: a.iscomplete('x')
Out[12]: True

In [13]: a.iscomplete('a')
Out[13]: False

In [14]: a._make_complete('a')
Out[14]: True

In [15]: a.iscomplete('a')
Out[15]: True

In [16]: a.monomials
Out[16]: ((-3, {'a': 2}), (0, {'a': 1}), (3, {'x': 1, 'y': 1}), (2, {'b': 1}), (-2, {}))

In [17]: a
Out[17]: - 3a²  + 3xy + 2b - 2

In [18]: a.max_power('a')
Out[18]: 2

In [19]: a.min_power('a')
Out[19]: 0

In [20]: a.isordered('a')
Out[20]: True

In [21]: b = pypol.polynomial('3a - 1')

In [22]: b.zeros
Out[22]: ()

In [23]: b.print_format = False

In [24]: b
Out[24]: + 3a - 1

In [25]: b.append('2x2')

In [26]: b
Out[26]: + 2x^2 + 3a - 1

In [27]: b.print_format = True

In [28]: b
Out[28]: + 2x² + 3a - 1

In [47]: p = pypol.Polynomial(((3, {'a': 2}), (-2, {'a': 1}), (2, {})))

In [48]: p
Out[48]: + 3a² - 2a + 2

In [49]: a
Out[49]: - 3a²  + 3xy + 2b - 2

In [50]: p
Out[50]: + 3a² - 2a + 2

In [51]: a + p
Out[51]: + 3xy + 2b - 2a

In [52]: a - p
Out[52]: - 6a² + 3xy + 2b + 2a - 4

In [53]: a * p
Out[53]: - 9aⴠ+ 6a³ + 9a²xy + 6a²b - 12a² - 6axy + 6xy - 4ab + 4b + 4a - 4

In [55]: p(2)
Out[55]: 10

In [60]: pp = pypol.polynomial('3x4 - 2x3 + x - 4')

In [61]: ppp = pypol.polynomial('x - 2')

In [62]: divmod(pp, ppp)
Out[62]: (+ 3x³ + 4x² + 8x + 17, + 30)

In [63]: c, d = divmod(pp, ppp) # Quoziente e resto

In [65]: c * ppp + d
Out[65]: + 3xⴠ- 2x³  + x - 4

In [66]: c * ppp + d == pp  # La prova
Out[66]: True

Purtroppo non sono riuscito a implementare bene __call__ . Come faccio a trovare p di [numero] quando ci sono più variabili?
 
RE: [Python] pypol 0.1

devo dire che nn ho letto proprio tutto approfonditamente, ma noto con piacere che hai fatto molti progressi dai tuoi precedenti source, usando features importantissime ma spesso dimenticate

cmq, nn mi è esattamente chiaro cosa dovrebbe fare __call__, sai scritto tutto così compresso nn risulta molto chiaro
 
RE: [Python] pypol 0.1

Grazie!
__call__ deve sostituire l'unica lettera che c'è con il valore passato. Ad esempio:

2a^2 - 3a + 4

se chiami __call__(2) diventa:

2*2**2 -3*2 + 4, calcola e ritorna il risultato.
 
RE: [Python] pypol 0.1

Grazie anche a te! Pero' mancano ancora tante cose importanti, come la scomposizione, ecc.
 
RE: [Python] pypol 0.1

ammazza che mattone lol, 800 righe

comunque ti consiglerei per __call__ di fare una cosa di manica larga:
def __call__(self, *args, **kwargs)
la variabile è detta esplicitamente ( pol(a=3) )
oppure è scelta in ordine alfabetico, quindi a,b,c ... x,y,z

e se non vengono date tutte le variabili, ritorna il polinomio con le variabili incognite.
 
RE: [Python] pypol 0.1

Dopo un immenso lavoro sono riuscito a implementare la semplificazione delle frazioni algebriche. Si può solo a patto che a numeratore e a denominatore ci siano solo polinomi (se c'è una frazione algebrica moltiplico e fatto).

Ora però c'è tanta doc da aggiungere/aggiornare ci vorrà un po'.
 
RE: [Python] pypol 0.1

Rilasciata la versione 0.2
Il changelog:
0.2:
+ monomial
+ Polynomial.sort
+ Polynomial.coeff_gcd
+ Polynomial.coeff_lcm
+ Polynomial.gcd
+ Polynomial.lcm
+ Polynomial.joint_letters
+ Polynomial.max_letter
+ Polynomial.is_square_diff
+ Polynomial._key
+ Polynomial.div_all
+ testpypol.run
- Polynomial._cmp

0.1:
Initial release

EDIT: Non me lo indenta!! Vabè
 
RE: [Python] pypol 0.1

Rilasciata versione 0.4 (mi sono dimenticato di segnalarvi la 0.3 lol): aggiunti 2 nuovi moduli pypol.series e pypol.roots. Per il CHANGELOG completo:
http://pypol.altervista.org/changelog.html#release-0-4-23-01-2011
 
Stato
Discussione chiusa ad ulteriori risposte.