Мне нужно написать некоторый код, который занимается генерацией и манипулированием многомерных многочленов.Я изложу свою задачу на упрощенном примере.
Допустим, мне дано три выражения: 2x ^ 2, 3y + 1 и 1z.Затем мне нужно умножить их вместе, что даст мне 6x ^ 2yz + 2x ^ 2z.Тогда я хотел бы найти частные производные этого выражения по x, y и z.Это дало бы мне 12xyz + 4xz, 6x ^ 2z и 6x ^ 2y + 2x ^ 2.
Моя проблема связана с выполнением простых манипуляций, подобных этим, в выражениях, содержащих тысячи переменных, и мне нужен простой способ сделатьэто систематически.Я бы очень хотел использовать python, так как у меня уже есть много связанных с проектом функциональных возможностей, выполненных с использованием numpy / scipy / matplotlib, но если есть надежный набор инструментов на другом языке, я также открыт для его использования.Я занимаюсь университетскими исследованиями, поэтому я открыт для использования Matlab.
Я не смог найти хороших библиотек python, которые могли бы сделать это для меня легко и в идеале хотели бы что-то похожее на scipy полиномиальные процедуры , которые могут работать на многомерных полиномах.Кто-нибудь знает хорошую библиотеку, которая кажется подходящей для этой проблемы, и которую было бы легко интегрировать в уже существующий код Python?
Спасибо!
Продолжение: Iпровел пару дней, работая с Sympy, который оказался очень простым в использовании.Тем не менее, размер задачи, над которой я работаю, был слишком медленным, поэтому я сейчас пойду изучать matlab.Чтобы дать чрезвычайно грубую оценку скорости с использованием небольшого размера выборки, потребовалось приблизительно 5 секунд для вычисления каждой из частных производных полинома порядка 2, содержащего 250 переменных.
Follow # 2: Возможно, мне следовало бы сделать это еще тогда, когда я еще работал над этой проблемой, но я мог бы также сообщить всем, что символьная библиотека matlab была чрезвычайно сопоставима вскорость к симпати.Другими словами, это было очень медленно для больших вычислений.С обеими библиотеками было удивительно легко работать, поэтому для небольших вычислений я настоятельно рекомендую либо.
Чтобы решить мою проблему, я вручную вычислял градиенты, упрощал их, а затем использовал найденные шаблоны для жесткого кодирования некоторых значений в своем коде.Это было больше работы, но сделало мой код экспоненциально быстрее и, наконец, пригодным для использования.