Hello,
Yestday I found an memory issue in my experiment program.
I used sympy to generate legendre polynomials in my program and finally I 
found this part of code cause the problem that the memory which used by 
sympy cache cannot be released.
I'm new to sympy. Is it a good manner to call clear_cache() manually?Or is 
there any problem in my code?
Thanks.


def generate_legendre_polynomials(max_degree):
    """
    Create a list of legendre polynomials from degree of zero to degree of 
max_degree.
    """
    x, n = symbols('x n')
    legendre_polynomial_list = [1, x]

    def nth_order_legendre(nth):
        """
        Create nth legendre polynomials iteratively 
        according to Bonnet’s recursion formula.
        """
        if nth <= 1:
            return legendre_polynomial_list[nth]
        
        for i in range(2, nth + 1):
            g = legendre_polynomial_list[i - 1]
            h = legendre_polynomial_list[i - 2]
            p = 1/n * ((2 * n - 1) * x * g -  (n - 1) * h)
            legendre_polynomial_list.append(expand(p.subs(n, i - 1)))
        
    nth_order_legendre(max_degree)
    return legendre_polynomial_list

legendre_polynomial_list = generate_legendre_polynomials(100)  # legendre 
polynomial table
def generate_target_function(degree, legendre_polynomial_list=None):
    """
    Generate a target function randomly 
    according to the target function formula.
    """
    x = symbols('x')
    if legendre_polynomial_list is None or len(legendre_polynomial_list) - 
1 < degree:
        legendre_polynomials = generate_legendre_polynomials(degree)
    else:
        legendre_polynomials = legendre_polynomial_list[:degree + 1]
    alphas = [np.random.standard_normal() for i in range(degree + 1)]
    
    f = np.dot(alphas, legendre_polynomials)  # sum of a_i * L_i
    Z = integrate(f**2, (x, -1, 1)) / 2  # integrate f**2 from -1 to 1
    f = f / sqrt(Z)  # normalized f
    return f

# memory usege goes up after each iteration
for i in range(1000):
    generate_target_function(20, legendre_polynomial_list)

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/b28eb9af-df2f-42b9-8715-815f8cbc9df6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to