У тебя вычисление повторяется для каждой строки? Посмотри, можно ли распараллелить код на несколько процессов (именно процессов, не потоков).
Также посмотри насчёт использования numpy/scipy и их численных солверов для систем уравнений вместо sympy. Может, используя sympy, получится сформулировать алгоритм расчёта, а уже его портировать на numpy?
Если надумаешь использовать numpy, держи в уме вот что: по возможности выполняй операции сразу над массивами значений. Упрощённо, вот это
a = numpy.array([3] * 1000000, dtype=numpy.float32)
b = 2 * a + 3
будет намного быстрее, чем это:
a = numpy.array([3] * 1000000, dtype=numpy.float32)
b = numpy.zeros_like(a)
for i in range(a.shape[0]):
b[i] = 2 * a[i] + 3
Причина простая - операции над массивами реализуют перебор элементов массива нативно, т.е. с той же проивзодительностью, что и C/C++/Fortran. А вот сугубо питоньи циклы - штука медленная.