Почему SciPy Optimize Curve Fit требует x данных, чтобы начать с 0 - PullRequest
0 голосов
/ 21 марта 2019

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

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit


data = np.loadtxt('/home/alex/Downloads/Tuesday_trial1.txt');



x = [row[0] for row in data]
t = np.asarray(x)
y = [row[1] for row in data]


def sho(t,a,v,w,p,o):
    return a*np.exp(-v*t/2)*np.cos(w*t-p)-o

popt,pcov = curve_fit(sho,t,y)

При изменении данных таким образом, чтобы первая запись вx столбец данных равен 100 секундам, а не 0 секундам, это результат (в противном случае он идеально подходит).

аппроксимирующая кривая с данными x, начинающимися с 100

Я также попытался оставить данные и выбрать желаемый диапазон через python с помощью

x = [row[0] for row in data]
t = np.asarray(x[100:1500])
y = [row[1] for row in data]
y = np.asarray(y[100:1500])

Оба метода приводят к изображению выше.Есть ли способ приспособить эту функцию только к определенному диапазону данных?Что не так в коде, когда данные x начинаются со значения, отличного от 0?

...