Dans votre example, vous calculez un gradient, qui est un vecteur et non pas un scalaire tel que vous tentez de l'implementer.
Vous ecrivez mais c'est un abus de langage, en toute rigueur vous voudriez ecrire
Lp = [diff(L, a0), diff(L, a1), ..., diff(L, an)]
Dans votre cas, les termes de la somme sont indépendant donc le plus simple c'est de ne pas ecrire la somme complète mais seulement un des membres.
Dans un cas plus general, vous devez a mon avis fixer i par une valeur numerique, et iterer a la main avec une boucle fort, et calculer independament la derivee pour chaque composante. Je ne suis pas sur qu'on puisse faire mieux. 
PS: une astuce de syntaxe qui peux etre utile:
>>> sympy.symbols('i:5')
(i0, i1, i2, i3, i4)
>>>
Partager