Я использую python 3.7 с sympy и numpy, чтобы найти корни производной нескольких выражений одной переменной, все они хранятся в одном файле (см. Ниже). У меня есть C-программа, которая порождает многочисленные процессы, которые запускают приведенный ниже скрипт для каждого выражения (я нахожу производные корни параллельно; может быть более 100 процессов). Обратите внимание, что выражения очень сложны и могут занимать довольно много времени для оценки. Вот почему я использую numpy вместо sympy для поиска корней.
Вот соответствующие части кода Python
#!/Users/user/anaconda3/bin/python
# -*- coding: utf-8 -*-
import sympy
import numpy
from sympy import Poly
import sys
from sys import argv
currentLine = 0
lineToCheck = int(argv[1]);
expression = ""
with open("file.txt", "r") as myFile:
for line in myFile:
if(lineToCheck == currentLine):
expression = line
break
else:
currentLine += 1
s = sympy.symbols('s')
expression = Poly(sympy.expand(sympy.diff(sympy.simplify(expression))), s)
roots = numpy.roots(expression.all_coeffs())
roots = numpy.sort(numpy.unique(roots[~numpy.iscomplex(roots)]))
В некоторых случаях (не все время), когда я запускаю этот скрипт, я получаю следующую ошибку в подмножестве процессов, которые порождаются.
RecursionError: maximum recursion depth exceeded during compilation
вызвано на линии
expression = Poly(sympy.expand(sympy.diff(sympy.simplify(expression))), s)
У меня следующий вопрос. Что вызывает эту ошибку? Я понимаю, что означает превышение максимальной глубины рекурсии, но не в контексте компиляции. Должен ли это делать интерпретатор Python? Кроме того, это связано с порождением слишком большого числа процессов или слишком сложными / длинными выражениями? Если да, как я могу исправить эту ошибку?