Производные суммирования

Время от времени я использую sympy, но я не очень хорош в этом. В настоящий момент я застрял в определении списка индексированных переменных, т. Е. От n1 до nmax и выполнения на нем суммирования. Тогда я хочу иметь возможность взять производную:

До сих пор я пробовал следующее:

numSpecies = 10 n = IndexedBase('n') i = symbols("i",cls=Idx) nges = summation(n[i],[i,1,numSpecies]) 

Однако, если я попытаюсь взять производную по одной переменной, это не удастся:

 diff(nges,n[5]) 

Я также пытался избежать работы с IndexedBase .

 numSpecies = 10 n = symbols('n0:%d'%numSpecies) k = symbols('k',integer=True) ntot = summation(n[k],[k,0,numSpecies]) 

Однако здесь уже суммирование происходит из-за смешения кортежей python и суммирования sympy.

Как я могу выполнять индексированные производные базы или какое-то обходное решение?

    3 Solutions collect form web for “Производные суммирования”

    С версией разработки Sympy ваш пример работает.

    Чтобы установить версию разработки Sympy, просто потяните ее с помощью git :

     git clone git://github.com/sympy/sympy.git cd sympy 

    Затем запустите python с этого пути или установите PYTHONPATH для включения этого каталога перед установкой Python по умолчанию.

    Ваш пример в версии разработки:

     In [3]: numSpecies = 10 In [4]: n = IndexedBase('n') In [5]: i = symbols("i",cls=Idx) In [6]: nges = summation(n[i],[i,1,numSpecies]) In [7]: nges Out[7]: n[10] + n[1] + n[2] + n[3] + n[4] + n[5] + n[6] + n[7] + n[8] + n[9] In [8]: diff(nges,n[5]) Out[8]: 1 

    Вы также можете использовать сокращенную форму суммирования:

     In [9]: nges_uneval = Sum(n[i], [i,1,numSpecies]) In [10]: nges_uneval Out[10]: 10 ___ ╲ ╲ n[i] ╱ ╱ ‾‾‾ i = 1 In [11]: diff(nges_uneval, n[5]) Out[11]: 10 ___ ╲ ╲ δ ╱ 5,i ╱ ‾‾‾ i = 1 In [12]: diff(nges_uneval, n[5]).doit() Out[12]: 1 

    Также обратите внимание, что в следующей версии SymPy вы сможете выводить символы с символическими индексами:

     In [13]: j = symbols("j") In [13]: diff(n[i], n[j]) Out[13]: δ j,i 

    Где вы получаете дельту Кронекера .

    Если вам не хочется устанавливать версию разработки Sympy, просто дождитесь следующей полной версии (вероятно, выйдет осенью этого года), она будет поддерживать производные от IndexedBase .

    Я не знаю, почему подход IndexedBase не работает (мне также было бы интересно узнать). Однако вы можете сделать следующее:

     import sympy as sp numSpecies = 10 n = sp.symbols('n0:%d'%numSpecies) # note that n equals the tuple (n0, n1, ..., n9) ntot = sum(n) # sum elements of n using the standard # Python function for summing tuple elements #ntot = sp.Add(*n) # same result using Sympy function sp.diff(ntot, n[5]) 

    Я не понимаю, что вы хотите сделать. Однако, возможно, это поможет. Отредактировано в ответ на два полученных комментария.

     from sympy import * nspecies = 10 [var('n%s'%_) for _ in range(nspecies)] expr = sympify('+'.join(['n%s'%_ for _ in range(nspecies)])) expr print ( diff(expr,n1) ) expr = sympify('n0**n1+n1**n2') expr print ( diff(expr,n1) ) 

    Только первое выражение отвечает на исходный вопрос. Это результат.

     1 n0**n1*log(n0) + n1**n2*n2/n1 
     
    Interesting Posts for Van-Lav

    Как правильно создавать и запускать параллельные задачи с помощью асинхронного модуля python?

    Более быстрый способ прокрутки каждого пикселя изображения в Python?

    MRjob: Может ли редуктор выполнить 2 операции?

    Существуют ли какие-либо рекомендации для выбора количества процессов с многопроцессорной обработкой?

    couchDB, python и аутентификация

    определение функции одной строки python

    Как я могу заставить Geany показать мне методы, которые имеет библиотека, когда я нажимаю кнопку «.». ключ?

    В PySpark 1.5.0, как вы перечисляете все элементы столбца `y` на основе значений столбца` x`?

    sci-kit learn: измените свои данные либо с помощью X.reshape (-1, 1)

    матричная операция с использованием numpy pandas

    как перенаправить на конкретный URL-адрес на 404

    Проектирование API Python: свободный интерфейс или аргументы

    Эффективный способ использования функции Логарифма в разреженной матрице

    График matplotlib для отображения общего количества в гистограммах

    сделать pycaffe фатальной ошибкой: файл «Python.h» не найден

    Python - лучший язык программирования в мире.