Python: как подогнать функцию к точкам? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь подогнать кривую к некоторым точкам.

### Analysis: cost function
md = 215 / 0.89
wl = [0, 0.5, 1, 1.5, 2, 3, 4, 5, 6]
d = [0, 0.49, 0.71, 0.84, 0.95, 0.98, 1.0, 1.0, 1.0]
dr = []
for i in d: dr.append(i*md)

f, ax = plt.subplots(figsize=(9.5, 6.5))
ax = setFont(ax, 'Arial', 14)
ax.plot(wl, dr, lw=2)
grid()

enter image description here

Это типичная логистическая функция. Это то, что я делаю

from scipy.optimize import curve_fit
def func(t,alpha, a):
    return  241.573 / 1+ (a * np.exp(alpha * t))

# coefficients and curve fit for curve
popt, pcov = curve_fit(func, wl, dr)

alpha, a = popt
v_fit = func(wl, alpha, a)

Но я получаю ошибку

TypeError: can't multiply sequence by non-int of type 'numpy.float64'

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Ошибка связана с тем, что wl не является пустым массивом:

import numpy as np
from scipy.optimize import curve_fit


md = 215 / 0.89
wl = np.array([0, 0.5, 1, 1.5, 2, 3, 4, 5, 6])
d = np.array([0, 0.49, 0.71, 0.84, 0.95, 0.98, 1.0, 1.0, 1.0])
dr = np.array([i*md for i in d])

def func(t,alpha, a):
    return  241.573 / 1+ (a * np.exp(alpha * t))

# coefficients and curve fit for curve
popt, pcov = curve_fit(func, wl, dr)

alpha, a = popt
v_fit = func(wl, alpha, a)
0 голосов
/ 13 июня 2019

На основе найденного примера кода здесь :

from scipy.optimize import curve_fit
import numpy as np

# assume func is defined to calculate your y-values and has the signature func(x, a, b, c)

xdata = np.linspace(0,4,50)
np.random.seed(1729)

ydata = [func(x, 2.5, 1.3, 0.5)+(0.2*np.random.normal(size=xdata.size)) for x in xdata]

plt.plot(xdata, ydata, 'b-', label='data')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...