問題: N個の他の既知の関数g_1(t), ..., g_N(t)
の線形結合として書くことができる関数f(t,N)
を数値的に積分したいと思います。Pythonの関数オブジェクトの線形結合
私の解決策は、私は:私は機能を知っているg_i
し、また係数、私の最初のアイデアは、係数の行ベクトルとg_i
、その後はへの内積のためnp.dot
を使用するラムダ関数を含む列ベクトルを作成することでしたので、私が望む関数オブジェクトを取得します。残念ながら、2つの関数オブジェクトを追加したり、関数オブジェクトにスカラーを掛けることはできません。
マイソリューションII:私は(基本的に私が何をしたいポイント賢明な定義)のような何かを行うことができます。もちろん、:
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
しかしfor
ループではなく、当然のことながら非常に大きい場合は特に:
- は、私は多くの多くの時間に、この機能を実行する必要があり、私はscipy.integrate.quadのような数値積分ルーチンには、この関数fを渡しトン
- 繰り返します。
'g [i]'が多項式の場合は、あらかじめ多項式クラスを使って簡単に組み合わせることができます。しかし、そうでなければ、あなたはそれぞれを 't'のループで呼び出すことに悩まされていると思います。 –
numexpr、cython、theanoまたはsympyの使用はどうですか? –
@ PM2Ring:これらは正弦と余弦であり、L^2 [0,1]の切り捨てられた基底を形成します。だから、本当に一度にラムダ関数の配列を呼び出す方法はありませんか? – sbm