Ejemplo n.º 1
0
 def _print_psi_i_jk(self, i, j, k, mode=0):
     """
     Returns string of Psi function
     mode = 0 -  in special polynomial form
     mode = 1 -  in regular polynomial form
     mode = 2 -  in regular polynomial form with restored X
     :param i: an index for Y
     :param j: an index to choose vector from X
     :param k: an index for vector component
     :return: result string
     """
     strings = list()
     for n in range(len(self.lamb[i][j][k])):
         inner = 'stub'
         if mode == 0:
             inner = '{symbol}{deg}(x{0}{1})'.format(j + 1, k + 1, symbol=self.symbol, deg=n)
         elif mode == 1:
             inner = str(self.basis[n].coef[0])
             if n > 0:
                 inner += ' + ' + ' + '.join('({coef})(x{0}{1})^{deg}'.format(j + 1, k + 1, coef=coef, deg=index)
                                             for index, coef in enumerate(self.basis[n].coef) if index > 0)
         elif mode == 2:
             diff = self.maxX[j][k] - self.minX[j][k]
             mult_poly = pnm([- self.minX[j][k] / diff, 1 / diff])
             cur_poly = self.basis[n](mult_poly)
             inner = str(cur_poly.coef[0])
             if n > 0:
                 inner += ' + ' + ' + '.join('({coef})(x{0}{1})^{deg}'.format(j + 1, k + 1, coef=coef, deg=index)
                                             for index, coef in enumerate(cur_poly.coef) if index > 0)
         strings.append('exp({0:.6f}*tanh({inner}))'.format(self.lamb[i][j][k][n], inner=inner))
     return ' * '.join(strings) + ' - 1'
Ejemplo n.º 2
0
 def _print_psi_i_jk(self, i, j, k, mode=0):
     """
     Returns string of Psi function
     mode = 0 -  in special polynomial form
     mode = 1 -  in regular polynomial form
     mode = 2 -  in regular polynomial form with restored X
     :param i: an index for Y
     :param j: an index to choose vector from X
     :param k: an index for vector component
     :return: result string
     """
     strings = list()
     for n in range(len(self.lamb[i][j][k])):
         inner = 'stub'
         if mode == 0:
             inner = '{symbol}{deg}(x{0}{1})'.format(j + 1, k + 1, symbol=self.symbol, deg=n)
         elif mode == 1:
             inner = str(self.basis[n].coef[0])
             if n > 0:
                 inner += ' + ' + ' + '.join('({coef})(x{0}{1})^{deg}'.format(j + 1, k + 1, coef=coef, deg=index)
                                             for index, coef in enumerate(self.basis[n].coef) if index > 0)
         elif mode == 2:
             diff = self.maxX[j][k] - self.minX[j][k]
             mult_poly = pnm([- self.minX[j][k] / diff, 1 / diff])
             cur_poly = self.basis[n](mult_poly)
             inner = str(cur_poly.coef[0])
             if n > 0:
                 inner += ' + ' + ' + '.join('({coef})(x{0}{1})^{deg}'.format(j + 1, k + 1, coef=coef, deg=index)
                                             for index, coef in enumerate(cur_poly.coef) if index > 0)
         strings.append('exp({0:.6f}*tanh({inner}))'.format(self.lamb[i][j][k][n], inner=inner))
     return ' * '.join(strings) + ' - 1'
Ejemplo n.º 3
0
 def _print_F_i_transformed_recovered(self, i):
     """
     Returns string of recovered F function in regular polynomial form
     :param i: an index for Y
     :return: result string
     """
     strings = list()
     power_sum = 0
     for j in range(3):
         for k in range(len(self.lamb[i][j])):
             shift = sum(self._solution.dim[:j]) + k
             diff = self.maxX[j][k] - self.minX[j][k]
             mult_poly = pnm([-self.minX[j][k] / diff, 1 / diff])
             power_sum += self.c[i][j] * self.a[i][shift] * self.lamb[i][j][
                 k][0]
             for n in range(1, len(self.lamb[i][j][k])):
                 res_polynomial = self.basis[n](mult_poly) + 1
                 coeffs = res_polynomial.coef
                 summands = [
                     '{0}(x{1}{2})^{deg}'.format(coeffs[index],
                                                 j + 1,
                                                 k + 1,
                                                 deg=index)
                     for index in range(1, len(coeffs))
                 ]
                 summands.insert(0, str(coeffs[0]))
                 strings.append('({repr})^({0:.6f})'.format(
                     self.c[i][j] * self.a[i][shift] *
                     self.lamb[i][j][k][n],
                     j + 1,
                     k + 1,
                     repr=' + '.join(summands)))
     strings.insert(
         0,
         str((self.maxY[i] - self.minY[i]) *
             (1 + self.basis[0].coef[0])**(power_sum)))
     return ' * '.join(strings) + ' + ' + str(
         (2 * self.minY[i] - self.maxY[i]))
Ejemplo n.º 4
0
 def _print_F_i_transformed_recovered(self, i):
     """
     Returns string of recovered F function in regular polynomial form
     :param i: an index for Y
     :return: result string
     """
     strings = list()
     power_sum = 0
     for j in range(3):
         for k in range(len(self.lamb[i][j])):
             shift = sum(self._solution.dim[:j]) + k
             diff = self.maxX[j][k] - self.minX[j][k]
             mult_poly = pnm([- self.minX[j][k] / diff, 1 / diff])
             power_sum += self.c[i][j] * self.a[i][shift] * self.lamb[i][j][k][0]
             for n in range(1, len(self.lamb[i][j][k])):
                 res_polynomial = self.basis[n](mult_poly) + 1
                 coeffs = res_polynomial.coef
                 summands = ['{0}(x{1}{2})^{deg}'.format(coeffs[index], j + 1, k + 1, deg=index)
                             for index in range(1, len(coeffs))]
                 summands.insert(0, str(coeffs[0]))
                 strings.append('({repr})^({0:.6f})'.format(self.c[i][j] * self.a[i][shift] * self.lamb[i][j][k][n],
                                                            j + 1, k + 1, repr=' + '.join(summands)))
     strings.insert(0, str((self.maxY[i] - self.minY[i]) * (1 + self.basis[0].coef[0]) ** (power_sum)))
     return ' * '.join(strings) + ' + ' + str((2 * self.minY[i] - self.maxY[i]))