Problem: Ich möchte eine Funktion f(t,N)
numerisch integrieren, die als eine lineare Kombination von N anderen bekannten Funktionen g_1(t), ..., g_N(t)
geschrieben werden kann.Lineare Kombination von Funktionsobjekten in Python
Meine Lösung I: Ich kenne die Funktionen g_i
und auch die Koeffizienten, so dass meine ursprüngliche Idee war, einen Zeilenvektor der Koeffizienten und einen Spaltenvektor mit den Lambda-Funktionen g_i
und verwenden Sie dann np.dot
für das innere Produkt zu schaffen Holen Sie sich das gewünschte Funktionsobjekt. Leider können Sie nicht einfach zwei Funktionsobjekte hinzufügen oder ein Funktionsobjekt mit einem Skalar multiplizieren.
Meine Lösung II: Natürlich habe ich etwas tun kann, wie (im Grunde definieren Punkt weise, was ich will):
def f(t,N,a,g):
"""
a = numpy array of coefficients
g = numpy array of lambda functions corresponding to functions g_i
"""
res = 0
for i in xrange(N):
res += a[i] * g[i](t)
return res
Aber die for
Schleife ist natürlich nicht sehr groß, vor allem, wenn:
- ich brauche diese Funktion bei vielen vielen Zeit laufen die Schritte t
- ich diese Funktion f in eine numerische Integration Routine wie scipy.integrate.quad passieren.
Wenn Ihre 'g [i]' Polynome sind, können Sie sie im Voraus leicht mit einer Polynomklasse kombinieren. Aber wenn das nicht der Fall ist, dann denke ich, dass du daran festhältst, sie für jedes "t" in eine Schleife zu schreiben. –
Wie wäre es mit NUMEXPR, Cython, Theano oder Sympy? –
@ PM2Ring: Sie sind Sinus und Cosinus und bilden eine verkürzte Basis von L^2 [0,1]. Also gibt es wirklich keine Möglichkeit, ein Array von Lambda-Funktionen auf einmal aufzurufen? – sbm