roots and start tbl_sgn
This commit is contained in:
parent
6053f9ba94
commit
324dfab817
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user