示例#1
0
 def memoryFunctionZ(self):
     poles = self.poles()
     cpoles = [p.conjugate() for p in poles]
     coeff0 = conjugate(self.coeff[0])
     beta = self.order * [0]
     sum = 0.
     for i in range(self.order):
         pole = poles[i]
         prod = N.Complex(self.variance, 0.)
         for j in range(i):
             prod *= (pole - poles[j])
         for j in range(i + 1, self.order):
             prod *= (pole - poles[j])
         for j in range(self.order):
             prod *= (pole - N.Complex(1., 0.) / cpoles[j])
         beta[i] = -((pole**(self.order - 1)) * self.sigsq / coeff0) / prod
         sum += beta[i]
     for i in range(self.order):
         beta[i] /= sum
     sum = 0.
     for i in range(self.order):
         sum += RationalFunction([beta[i]], [-poles[i], 1.])
     mz = (1. / sum + Polynomial([1., -1.])) / self.delta_t**2
     if not isComplex(self.coeff[0]):
         mz.numerator.coeff = [c.real for c in mz.numerator.coeff]
         mz.denominator.coeff = [c.real for c in mz.denominator.coeff]
     return mz
示例#2
0
 def __init__(self, model, precision=0):
     self.precision = precision
     self.order = model.order
     self.delta_t = model.delta_t
     if model.coeff.typecode() == N.Complex64:
         self.coeff = [
             N.Complex(mpf(x.real, precision), mpf(x.imag, precision))
             for x in model.coeff
         ]
     else:
         self.coeff = [mpf(x, precision) for x in model.coeff]
     self.sigsq = mpf(model.sigsq, precision)
     self.sigma = mpf(model.sigma, precision)
     self.variance = mpf(model.variance, precision)
     self._poles = None