最小二乗法のフィッティングルーチンに渡す任意の数のピークに対して関数を作成する必要があります。 f(p, x) = p[0]*50 + p[1]*60*x
Pythonの動的関数構築
:50、60返す関数の値を持つf(p, x) = p[0]*50
二つの用語:各ピークの50返す関数の値を持つ
1期すなわち関数内の余分な用語は、そこにあります50での値との3項、60、70の戻り値:f(p, x) = p[0]*50 + p[1]*60*x + p[2]*70*x^2
等ナイーブ試みのカップルを以下に示す
、
def foo(vals):
fn = lambda p, x: 0
i = 0
for v in vals:
fn = lambda p, x : fn(p, x) + p[i] * v * x**i
i += 1
return fn
# Causes a recursion error (I think)
第二の試み...
def bar(vals):
terms = []
i = 0
for v in vals:
terms.append(lambda x, p: p[i] * v * x**i)
i += 1
def fn(x, p):
tvals = [t(x, p) for t in terms]
sum = 0
for t in terms:
sum = sum + t(x, p)
return sum
return fn
# Generates the wrong values
私は、これは参照に問題があると思われるが、つまりPythonはなどの宣言をリストを参照するが、これは解くには少し複雑です - 任意の助けをいただければ幸いです!
はあなたが得るために期待している(と何が第二の場合には取得している)何を示す、テストケースを提供することはできますか? – NPE
ええ、あなたが望むものを推測するのはちょっと難しいです。特に最初のものが 'fn' alotを上書きするだけなので... –
ああ、2回目の試行で、デバッグしようとしたときにコードをコピーしたと思われます。リストを返さないでください。リストの合計を戻す必要があります...また、目的の結果を少し良く説明しました。 – Brendan