def calcular(self, n, norm=False, k_factor=1): # Atencion: Norm = calcular normalizada if n % 2 == 1: k = int((n - 1) / 2) arr = [] for i in range(k + 1): arr.append(get_a(i, n)) poly = legendre.leg2poly(legendre.legint(legendre.legmul(arr, arr))) else: k = int((n - 2) / 2) arr = [] for i in range(k + 1): arr.append(get_a(i, n)) leg_b = legendre.legmul(legendre.legmul(arr, arr), legendre.poly2leg([1, 1])) poly = legendre.leg2poly(legendre.legint(leg_b)) exp = 0 wn, sn, s, sa = sp.symbols("wn sn sa s") for i in range(len(poly)): exp += poly[i] * ((2 * (wn**2) - 1)**i) exp -= poly[i] * ((-1)**i) if n % 2 == 1: exp = exp * 1 / (2 * (k + 1)**2) else: exp = exp * 1 / ((k + 1) * (k + 2)) exp = 1 / (1 + self.getXi(0, n)**2 * exp) exp = exp.subs(wn, sn / 1j) roots = algebra.getRoots(exp, sn) roots[1] = algebra.filterRealNegativeRoots(roots[1]) poles = [] for i in roots[1]: poles.append({"value": i}) exp = algebra.armarPolinomino(poles, [], sn, 1) self.tf_normalized = algebra.conseguir_tf(exp, sn, poles) if not norm: exp = self.plantilla.denormalizarFrecuencias(exp, sa, sn) self.getGainPoints() factor = (self.k1 - self.k2) * norm / 100 + self.k2 exp = self.plantilla.denormalizarAmplitud(exp, s, sa, factor) self.tf = algebra.conseguir_tf(exp, s, []) return self.tf else: return self.tf_normalized
def poly2leg(pol): from numpy.polynomial.legendre import poly2leg return poly2leg(pol)
def test_poly2leg(self) : for i in range(10) : assert_almost_equal(leg.poly2leg(Llist[i]), [0]*i + [1])
def test_legint(self) : # check exceptions assert_raises(ValueError, leg.legint, [0], .5) assert_raises(ValueError, leg.legint, [0], -1) assert_raises(ValueError, leg.legint, [0], 1, [0,0]) # test integration of zero polynomial for i in range(2, 5): k = [0]*(i - 2) + [1] res = leg.legint([0], m=i, k=k) assert_almost_equal(res, [0, 1]) # check single integration with integration constant for i in range(5) : scl = i + 1 pol = [0]*i + [1] tgt = [i] + [0]*i + [1/scl] legpol = leg.poly2leg(pol) legint = leg.legint(legpol, m=1, k=[i]) res = leg.leg2poly(legint) assert_almost_equal(trim(res), trim(tgt)) # check single integration with integration constant and lbnd for i in range(5) : scl = i + 1 pol = [0]*i + [1] legpol = leg.poly2leg(pol) legint = leg.legint(legpol, m=1, k=[i], lbnd=-1) assert_almost_equal(leg.legval(-1, legint), i) # check single integration with integration constant and scaling for i in range(5) : scl = i + 1 pol = [0]*i + [1] tgt = [i] + [0]*i + [2/scl] legpol = leg.poly2leg(pol) legint = leg.legint(legpol, m=1, k=[i], scl=2) res = leg.leg2poly(legint) assert_almost_equal(trim(res), trim(tgt)) # check multiple integrations with default k for i in range(5) : for j in range(2,5) : pol = [0]*i + [1] tgt = pol[:] for k in range(j) : tgt = leg.legint(tgt, m=1) res = leg.legint(pol, m=j) assert_almost_equal(trim(res), trim(tgt)) # check multiple integrations with defined k for i in range(5) : for j in range(2,5) : pol = [0]*i + [1] tgt = pol[:] for k in range(j) : tgt = leg.legint(tgt, m=1, k=[k]) res = leg.legint(pol, m=j, k=range(j)) assert_almost_equal(trim(res), trim(tgt)) # check multiple integrations with lbnd for i in range(5) : for j in range(2,5) : pol = [0]*i + [1] tgt = pol[:] for k in range(j) : tgt = leg.legint(tgt, m=1, k=[k], lbnd=-1) res = leg.legint(pol, m=j, k=range(j), lbnd=-1) assert_almost_equal(trim(res), trim(tgt)) # check multiple integrations with scaling for i in range(5) : for j in range(2,5) : pol = [0]*i + [1] tgt = pol[:] for k in range(j) : tgt = leg.legint(tgt, m=1, k=[k], scl=2) res = leg.legint(pol, m=j, k=range(j), scl=2) assert_almost_equal(trim(res), trim(tgt))
def test_legint(self) : # check exceptions assert_raises(ValueError, leg.legint, [0], .5) assert_raises(ValueError, leg.legint, [0], -1) assert_raises(ValueError, leg.legint, [0], 1, [0, 0]) # test integration of zero polynomial for i in range(2, 5): k = [0]*(i - 2) + [1] res = leg.legint([0], m=i, k=k) assert_almost_equal(res, [0, 1]) # check single integration with integration constant for i in range(5) : scl = i + 1 pol = [0]*i + [1] tgt = [i] + [0]*i + [1/scl] legpol = leg.poly2leg(pol) legint = leg.legint(legpol, m=1, k=[i]) res = leg.leg2poly(legint) assert_almost_equal(trim(res), trim(tgt)) # check single integration with integration constant and lbnd for i in range(5) : scl = i + 1 pol = [0]*i + [1] legpol = leg.poly2leg(pol) legint = leg.legint(legpol, m=1, k=[i], lbnd=-1) assert_almost_equal(leg.legval(-1, legint), i) # check single integration with integration constant and scaling for i in range(5) : scl = i + 1 pol = [0]*i + [1] tgt = [i] + [0]*i + [2/scl] legpol = leg.poly2leg(pol) legint = leg.legint(legpol, m=1, k=[i], scl=2) res = leg.leg2poly(legint) assert_almost_equal(trim(res), trim(tgt)) # check multiple integrations with default k for i in range(5) : for j in range(2, 5) : pol = [0]*i + [1] tgt = pol[:] for k in range(j) : tgt = leg.legint(tgt, m=1) res = leg.legint(pol, m=j) assert_almost_equal(trim(res), trim(tgt)) # check multiple integrations with defined k for i in range(5) : for j in range(2, 5) : pol = [0]*i + [1] tgt = pol[:] for k in range(j) : tgt = leg.legint(tgt, m=1, k=[k]) res = leg.legint(pol, m=j, k=list(range(j))) assert_almost_equal(trim(res), trim(tgt)) # check multiple integrations with lbnd for i in range(5) : for j in range(2, 5) : pol = [0]*i + [1] tgt = pol[:] for k in range(j) : tgt = leg.legint(tgt, m=1, k=[k], lbnd=-1) res = leg.legint(pol, m=j, k=list(range(j)), lbnd=-1) assert_almost_equal(trim(res), trim(tgt)) # check multiple integrations with scaling for i in range(5) : for j in range(2, 5) : pol = [0]*i + [1] tgt = pol[:] for k in range(j) : tgt = leg.legint(tgt, m=1, k=[k], scl=2) res = leg.legint(pol, m=j, k=list(range(j)), scl=2) assert_almost_equal(trim(res), trim(tgt))
def poly2leg(pol) : from numpy.polynomial.legendre import poly2leg return poly2leg(pol)
def test_fromroots(self) : roots = [0, .5, 1] p = leg.Legendre.fromroots(roots, domain=[0, 1]) res = p.coef tgt = leg.poly2leg([0, -1, 0, 1]) assert_almost_equal(res, tgt)
def test_roots(self) : p = leg.Legendre(leg.poly2leg([0, -1, 0, 1]), [0, 1]) res = p.roots() tgt = [0, .5, 1] assert_almost_equal(res, tgt)
def test_fromroots(self): roots = [0, .5, 1] p = leg.Legendre.fromroots(roots, domain=[0, 1]) res = p.coef tgt = leg.poly2leg([0, -1, 0, 1]) assert_almost_equal(res, tgt)
def test_roots(self): p = leg.Legendre(leg.poly2leg([0, -1, 0, 1]), [0, 1]) res = p.roots() tgt = [0, .5, 1] assert_almost_equal(res, tgt)