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'
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]))
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]))