Подтвердить что ты не робот

Python curve_fit с несколькими независимыми переменными

Python curve_fit вычисляет наилучшие параметры для функции с одной независимой переменной, но есть ли способ, используя curve_fit или что-то еще, чтобы соответствовать функции с несколькими независимыми переменными? Например:

def func(x, y, a, b, c):
    return log(a) + b*log(x) + c*log(y)

где x и y - независимая переменная, и мы хотели бы поместиться для a, b и c.

4b9b3361

Ответ 1

Вы можете передать curve_fit многомерный массив для независимых переменных, но тогда ваш func должен принять одно и то же. Например, вызывая этот массив X и распаковывая его на X, y для ясности:

import numpy as np
from scipy.optimize import curve_fit

def func(X, a, b, c):
    x,y = X
    return np.log(a) + b*np.log(x) + c*np.log(y)

# some artificially noisy data to fit
x = np.linspace(0.1,1.1,101)
y = np.linspace(1.,2., 101)
a, b, c = 10., 4., 6.
z = func((x,y), a, b, c) * 1 + np.random.random(101) / 100

# initial guesses for a,b,c:
p0 = 8., 2., 7.
print curve_fit(func, (x,y), z, p0)

Дает соответствие:

(array([ 9.99933937,  3.99710083,  6.00875164]), array([[  1.75295644e-03,   9.34724308e-05,  -2.90150983e-04],
   [  9.34724308e-05,   5.09079478e-06,  -1.53939905e-05],
   [ -2.90150983e-04,  -1.53939905e-05,   4.84935731e-05]]))

Ответ 2

Да, есть: просто дайте curve_fit многомерный массив для xData.