roots and start tbl_sgn

This commit is contained in:
Lafrite 2015-02-25 09:18:18 +01:00
parent 6053f9ba94
commit 324dfab817

View File

@ -10,11 +10,15 @@ from math import sqrt
class Polynom_deg2(Polynom): class Polynom_deg2(Polynom):
""" Degree 2 polynoms """ Degree 2 polynoms
Child of Polynom with some extro tools Child of Polynom with some extra tools
""" """
def __init__(self, coefs = [0, 0, 1], letter = "x"): def __init__(self, coefs = [0, 0, 1], letter = "x"):
"""@todo: to be defined1. """ """@todo: to be defined1. """
if len(coefs) < 3 or len(coefs) > 4:
raise ValueError("Polynom_deg2 have to be degree 2 polynoms, they need 3 coefficients, {} are given".format(len(coefs)))
if coefs[2] == 0:
raise ValueError("Polynom_deg2 have to be degree 2 polynoms, coefficient of x^2 can't be 0")
Polynom.__init__(self, coefs, letter) Polynom.__init__(self, coefs, letter)
@property @property
@ -34,27 +38,101 @@ class Polynom_deg2(Polynom):
"""Compute the discriminant expression """Compute the discriminant expression
:returns: discriminant expression :returns: discriminant expression
>>> P = Polynom_deg2([1,2,3])
>>> P.delta
< Expression [2, 2, '^', 4, 3, 1, '*', '*', '-']>
>>> for i in P.delta.simplify():
print(i)
2^{ 2 } - 4 \times 3 \times 1
4 - 4 \times 3
4 - 12
-8
>>> P.delta.simplified()
-8
""" """
return Expression([self.b, 2, op.pw, 4, self.a, self.c, op.mul, op.mul, op.sub]) return Expression([self.b, 2, op.pw, 4, self.a, self.c, op.mul, op.mul, op.sub])
def roots(self): def roots(self):
""" Compute roots of the polynom """ Compute roots of the polynom
/!\ Can't manage exact solution because of pymath does not handle sqare root yet
# TODO: Pymath has to know how to compute with sqare root |mar. févr. 24 18:40:04 CET 2015
>>> P = Polynom_deg2([1, 1, 1])
>>> P.roots()
[]
>>> P = Polynom_deg2([1, 2, 1])
>>> P.roots()
[-1.0]
>>> P = Polynom_deg2([-1, 0, 1])
>>> P.roots()
[-1.0, 1.0]
""" """
if self.delta > 0: if self.delta.simplified() > 0:
roots = [(-self.b - sqrt(self.delta) self.roots = [(-self.b - sqrt(self.delta.simplified()))/(2*self.a), (-self.b + sqrt(self.delta.simplified()))/(2*self.a)]
elif self.delta.simplified() == 0:
self.roots = [-self.b /(2*self.a)]
else:
self.roots = []
return self.roots
def tbl_sgn(self):
""" Return the sign line for tkzTabLine
>>> P = Polynom_deg2([2, 5, 2])
>>> P.tbl_sgn()
'\\tkzTabLine{, +, z, -, z , +,}'
>>> P = Polynom_deg2([2, 1, -2])
>>> P.tbl_sgn()
'\\tkzTabLine{, -, z, +, z , -,}'
>>> P = Polynom_deg2([1, 2, 1])
>>> P.tbl_sgn()
'\\tkzTabLine{, +, z, +,}'
>>> P = Polynom_deg2([0, 0, -2])
>>> P.tbl_sgn()
'\\tkzTabLine{, -, z, -,}'
>>> P = Polynom_deg2([1, 0, 1])
>>> P.tbl_sgn()
'\\tkzTabLine{, +,}'
>>> P = Polynom_deg2([-1, 0, -1])
>>> P.tbl_sgn()
'\\tkzTabLine{, -,}'
"""
if self.delta.simplified() > 0:
if self.a > 0:
return "\\tkzTabLine{, +, z, -, z , +,}"
else:
return "\\tkzTabLine{, -, z, +, z , -,}"
elif self.delta.simplified() == 0:
if self.a > 0:
return "\\tkzTabLine{, +, z, +,}"
else:
return "\\tkzTabLine{, -, z, -,}"
else:
if self.a > 0:
return "\\tkzTabLine{, +,}"
else:
return "\\tkzTabLine{, -,}"
if __name__ == '__main__': if __name__ == '__main__':
from .render import txt # from .render import txt
with Expression.tmp_render(txt): # with Expression.tmp_render(txt):
P = Polynom_deg2([2, 3, 4]) # P = Polynom_deg2([2, 3, 4])
print(P) # print(P)
print("Delta") # print("Delta")
for i in P.delta.simplify(): # for i in P.delta.simplify():
print(i) # print(i)
import doctest
doctest.testmod()