Мне нужно создать функцию для произвольного числа пиков, чтобы перейти к процедуре подгонки по методу наименьших квадратов. Для каждого пика в функции есть дополнительный член, т. Е.
Один член со значением 50 возвращает функцию: f(p, x) = p[0]*50
Два члена со значениями в 50, 60 возвращают функцию: f(p, x) = p[0]*50 + p[1]*60*x
Три члена со значениями в 50, 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 ссылается на объявления списков и т. Д., Но это немного сложно распутать - любая помощь будет принята!