def energy_inner_pjkpmn(j, k, m, n, lam=np.array([1])): ''' Calculates energy inner product between monomials P_{j,k} and P_{m, n}. Uses the Gauss-Green formula so that <P_{j,k}, P_{m,n}>_energy = <P_{j,k}, P_{m,n}>_L2 - lam*<P_{j-1,k}, P_{m,n}>_L2 + lam*sum_V0{P_{m,n}*d_n(P_{j,k})} Args: j, k, m, n: Represent monomial indices P_{j,k} and P_{m, n} lam: represents weight given to the energy part of the inner product Returns: <P_{j,k}, P_{m,n}>_energy ''' lam = lam[0] res = Polynomial.basis_inner(j, k, m, n, lam=np.array([0])) res -= lam * Polynomial.basis_inner(j - 1, k, m, n, lam=np.array([0])) for i in range(2): with HiddenPrints(): res += lam * norm_p_jk(str(i), j, k) * p_jk(str(i), m, n) return res
def ints_vec(j): ''' This function computes the integrals of {P_01, P_02, P_03, ..., P_j2, P_j3}. Args: j: maximum degree of polynomial Returns: np.array of integrals of {P_01, P_02, P_03, ..., P_j2, P_j3} ''' res = np.zeros(3 * j + 3) for ind in range(3 * j + 3): jj = int(np.floor(ind / 3)) kk = int(ind % 3 + 1) res[ind] = Polynomial.basis_inner(jj, kk, 0, 1) return res