繁体   English   中英

使用 numpy.polyfit

[英]Using numpy.polyfit

我已经使用 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)

当我们期望值接近 1.595 时,这会输出值 -2.827387571334839

所以曲线在数据上正确拟合,但在尝试使用产生的系数时,我得到了错误的答案。

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)

当我收到导致问题的 rankwarning 错误时,现在输出为 1.6 固定输出

“等级警告意味着最小二乘拟合中系数矩阵的等级不足。只有在 full = False 时才会发出警告。” numpy.ployfit在最后一个 Rank Warning 中提到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM