Seit gestern abend bringt mich SymPy ein wenig zur Verzweifelung und auch heute morgen komme ich nicht auf die Lösung. Das Problem ist eigentlich ganz einfach: ich möchte Werte mittels Summenoperator aufadieren. Bei den Werten handelt es sich um eine Liste an Gewichten "x", auf welche mit dem Indexoperator zugegriffen werden kann.
Oder um es kurz in LaTeX auszudürkcken: ich habe die Gewichte
Code: Alles auswählen
x_1, x_2, ..., x_n
Code: Alles auswählen
sum_{i=1}^n x_i
Symbolisch ist das mittels SymPy auch kein Problem:
Code: Alles auswählen
import sympy
n = sympy.symbols("n", integer=True)
x = sympy.tensor.IndexedBase("x", shape=(n,))
i = sympy.symbols("i", integer=True)
sum = sympy.Sum(x[i], (i, 1, n))
Code: Alles auswählen
sum.subs({n:4})
Und dann noch Level zwei: Meiner Meinung nach sollte das hier die bessere Lösung sein (der Index i ist nun kein Symbol mehr sondern vom Typ Idx):
Code: Alles auswählen
import sympy
n = sympy.symbols("n", integer=True)
x = sympy.tensor.IndexedBase("x", shape=(n,))
i = sympy.tensor.Idx("i", (1, n)) #Hier Idx statt Symbol
sum = sympy.Sum(x[i], (i, 1, n))
Code: Alles auswählen
Traceback (most recent call last):
File "example.py", line 7, in <module>
print sympy.Sum(x[i], (i, 1, n))
File "/usr/lib/python2.7/dist-packages/sympy/concrete/summations.py", line 24, in __new__
limits, sign = _process_limits(*symbols)
File "/usr/lib/python2.7/dist-packages/sympy/integrals/integrals.py", line 84, in _process_limits
raise ValueError('Invalid limits given: %s' % str(symbols))
ValueError: Invalid limits given: ((i, 1, n),)
Code: Alles auswählen
sympy.Sum(x[i], i)
Vielen Dank schon mal für das Lesen des ganzen Beitrags.