В настоящее время я пытаюсь написать код для проекта, в котором мне нужно выполнить нелинейную регрессию одного и того же набора данных с разными функциями соответствия, чтобы затем сравнить их жизнеспособность. Большая часть моего кода уже написана, однако у меня, похоже, возникли некоторые проблемы с чередованием функций соответствия.
def H1(u,B,C):
return B/u + C*u
def H2(u,B,C,A):
return A + B/u + C*u
def H3(u,B,C,A,E):
return 1/(1/A + u/E) + B/u + C*u
def H4(u,B,C,A):
return A*u**(1/3) + B/u + C*u
def H5(u,b,C,D):
return b/u**2 + C*u + D*u**2
def H6(u,b,D):
return b/u**2 + D*u**2
def residuals(formula):
def H0(u,?,?,...):
return u*? + u/?
n = len(data["v"])
y = np.empty(n)
u = data["v"].values
h = data["H"].values
c,cov = curve_fit(H,u,h)
for i in range(n):
y[i] = H(data["v"][i],c[0],c[1])
Итак, мои проблемы следующие: Как мне изменить функцию H0 в начале остатков? Я хотел бы в основном написать al oop, где каждая итерация меняет определение H0 (на H1, затем H2, затем H3 ...)
Во-вторых, есть ли способ перенести эти изменения в l oop y [i] = ...? Параметры регрессии являются частью списка (c), длина которого определяется параметрами, необходимыми для каждого H (u, ...). Мне также нужно было бы изменить количество входов, которые должны быть предоставлены, когда H (u, ...) применяется для определения значений y.
Надеюсь, я достаточно подробно описал свои проблемы, если нет, извините, я новичок в этом, и я сделаю все возможное, чтобы быть яснее.