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

Набор питона python/scipy

У меня есть несколько моментов, и я стараюсь соответствовать кривой для этих точек. Я знаю, что существует функция scipy.optimize.curve_fit, но я не понимаю документацию, то есть как использовать эту функцию.

Мои баллы: np.array([(1, 1), (2, 4), (3, 1), (9, 3)])

Может кто-нибудь объяснить, как это сделать?

4b9b3361

Ответ 1

Я предлагаю вам начать с простого полиномиального соответствия, scipy.optimize.curve_fit пытается подогнать функцию f, которую вы должны знать, к набору точек.

Это простой трехмерный полином с использованием numpy.polyfit и poly1d, первый выполняет полиномиальное соответствие по методу наименьших квадратов, а второй вычисляет новые точки:

import numpy as np
import matplotlib.pyplot as plt

points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
# get x and y vectors
x = points[:,0]
y = points[:,1]

# calculate polynomial
z = np.polyfit(x, y, 3)
f = np.poly1d(z)

# calculate new x and y's
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)

plt.plot(x,y,'o', x_new, y_new)
plt.xlim([x[0]-1, x[-1] + 1 ])
plt.show()

enter image description here

Ответ 2

Сначала вам нужно отделить свой массив numpy от двух отдельных массивов, содержащих значения x и y.

x = [1, 2, 3, 9]
y = [1, 4, 1, 3]

curve_fit также требует функцию, которая предоставляет тип соответствия. Например, линейная подгонка будет использовать такую ​​функцию, как

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

scipy.optimize.curve_fit(func, x, y) вернет массив numpy, содержащий два массива: первый будет содержать значения для a и b, которые наилучшим образом соответствуют вашим данным, а вторая будет ковариацией оптимальных параметров подгонки.

Здесь приведен пример линейной подгонки с предоставленными вами данными.

import numpy as np
from scipy.optimize import curve_fit

x = np.array([1, 2, 3, 9])
y = np.array([1, 4, 1, 3])

def fit_func(x, a, b):
    return a*x + b

params = curve_fit(fit_func, x, y)

[a, b] = params[0]

Этот код вернет a = 0.135483870968 и b = 1.74193548387

Здесь график с вашими точками и линейной подгонкой... который явно плохой, но вы можете изменить функцию фитинга, чтобы получить любой тип приспособления, который вы хотели бы.

enter image description here

Ответ 3

Библиотека подстановки кривой python pyeq2, лицензия BSD доступна в Репозитории Google Code по адресу:

https://github.com/zunzun/pyeq2

Он поставляется со многими примерами, включая параллельное программирование и пользовательские функции, и вы можете попробовать его онлайн бесплатно:

http://zunzun.com

Я автор, поэтому, если у вас есть какие-либо вопросы, напишите мне прямо по электронной почте [email protected] - я сделаю все возможное, чтобы помочь вам и запустить вас с примерами.