У меня есть очень длинный многочлен в Sympy, который я хочу заменить числами. Но такая подстановка займет много времени, в то время как тот же полином в программе MATLAB будет выведен менее чем за одну секунду. Как я могу решить эту проблему в Python?
Я только что попробовал, например: polynomial.subs([(k11,9600000000.00000), (k12,3066000000.0000),...])
Если вы ищете числовой результат, вы, вероятно, захотите взглянуть на lambdify, который преобразует символьный полином в числовую функцию для более быстрой оценки...
f = lambdify(coefficient_list, polynomial)
result = f(*coefficient_values)
Кроме того, если есть шаблоны, которые часто повторяются в полиноме, я думаю, что ваш лямбдифицированный код выиграет, добавив , cse=True
перед закрывающей скобкой в вашем вызове лямбдификации. Это параметр, который создаст последовательность промежуточных значений, которые должны быть предварительно вычислены только один раз, а не каждый раз, когда они встречаются в выражении. Было бы интересно узнать результаты улучшения времени.
Как я могу дать lambdify список коэффициентов для ввода?
Есть два шага: 1. Вы конвертируете символьное выражение в числовую функцию с помощью lambdify
. Здесь вам нужно будет составить список с вашими символическими коэффициентами, например coefficient_list=[k1, k2, k3, ...]
. 2. Затем вы оцениваете числовую функцию, дающую значения коэффициентов, например: coefficient_values=[0.5, 1, 1.5, ....]
. Обратите внимание, что порядок этих чисел должен соответствовать порядку символов в coefficient_list
.
Проблема в том, что он не принимает [0.5,1,1.5,...] в качестве входных данных
Очевидно, вы должны вставить свои значения. Более того, с очень небольшими подробностями, которые вы предоставили в своем вопросе, боюсь, я больше не могу вам помочь ....
Я не заметил звезду перед коэффициентом_значения, спасибо
MATLAB очень часто намного быстрее python, иначе за него не смогли бы брать большие деньги.