2017-11-08 2 views
1

Ich bin auf der Suche nach einer gemischten Lösung der vorgeschlagenen Antwort von this Thread. Das erste Code-Snippet verwendet einen symbolischeren Weg, den ich mit der Eigenschaft des zweiten Code-Snippets hinterlege, wo sich die Anzahl der Variablen ändert. Also etwas in der Nähe davon, wo sich die Anzahl der Variablen n ändern kann.Python-Optimierung indizierte Summe mit Sympy Lambdify und Scipy

from sympy import * 
from scipy.optimize import minimize 
from sympy.utilities.lambdify import lambdify 

x, i, n = symbols("x i n") 
n = 10 
func = Sum((Indexed('x',i)-3)/(1+0.2)**i,(i,1,n)) 
my_func = lambdify((x, i, n), func) 


def my_func_v(x): 
    return my_func(*tuple(x)) 

results = minimize(my_func_v, np.zeros(n)) 

Irgendwelche Ideen?

Antwort

1

So scheint dies den Trick zu tun:

from sympy import Sum, symbols, Indexed, lambdify 
from scipy.optimize import minimize 
import numpy as np 

def _eqn(y, variables, periods, sign=-1.0): 
    x, i = symbols("x i") 
    n = periods-1 
    s = Sum(Indexed('x', i)/(1+0.06)**i, (i, 0, n)) 
    f = lambdify(x, s, modules=['sympy']) 
    return float(sign*(y + f(variables))) 

z = 3 
results = minimize(lambda x: _eqn(3, x, z),np.zeros(z)) 
print(results.x) 

weitere Vorschläge?

Verwandte Themen