Использование numpy .polyfit - PullRequest
0 голосов
/ 24 марта 2020

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

2458880.2995 1.595
2458880.3046 1.62
2458880.3566 1.609
2458880.3585 1.599
2458880.7 1.667
2458880.7549 1.571

Здесь JD - левый столбец, а mag - это правый столбец

x = JD
y = mag

coeffs = numpy.polyfit(x,y,2)

poly = numpy.poly1d(coeffs)

new_x = numpy.linspace(x[0], 2458940)
new_y = poly(new_x)

plt.plot(x,y,'x', new_x,new_y)

a,b,c = coeffs



# y = ax^2 + bx + c


xa = 2458880.2995

ya = a*(xa**2) + b*(xa) + c

print(ya)

Это выдает значение -2,827387571334839, когда мы ожидаем значение, близкое к 1,595

. Таким образом, кривая корректно соответствует данным, но при попытке использовать коэффициенты производится я получаю неправильные ответы.

1 Ответ

0 голосов
/ 24 марта 2020
import matplotlib.pyplot as plt
import numpy
import warnings
warnings.simplefilter('ignore', numpy.RankWarning)

JD = [2458880.2995,2458880.3046,2458880.3566,2458880.3585,2458880.7,2458880.7549] 
mag=[1.595,1.62,1.609,1.599,1.667,1.571]

x = JD
y = mag

coeffs = numpy.polyfit(x,y,2)

poly = numpy.poly1d(coeffs)

new_x = numpy.linspace(x[0], 2458940)
new_y = poly(new_x)

plt.plot(x,y,'x', new_x,new_y)

a,b,c = coeffs



# y = ax^2 + bx + c


xa = 2458880.2995

ya = a*(xa**2) + b*(xa) + c

print(ya)

я добавил

import warnings
warnings.simplefilter('ignore', numpy.RankWarning)

, так как я получил ошибку ранжирования, которая вызвала проблему, теперь вывод равен 1.6 fixed output

" Предупреждение о ранге означает, что ранг матрицы коэффициентов при подборе методом наименьших квадратов является недостаточным. Предупреждение появляется только в том случае, если заполнено = False. " numpy .ployfit в последнем ранге Предупреждение упоминается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...