如何强制二次拟合至零截距的y值

2024-04-29 02:38:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用numpy.polyfit函数来做一些预测。如果我输入1的次数,它可以,但我需要做一个二次多项式拟合。在某些情况下,它是有效的,在另一些情况下,预测的情节下降,然后永远上升。例如:

import matplotlib.pyplot as plt
from numpy import *

x=[1,2,3,4,5,6,7,8,9,10]
y=[100,85,72,66,52,48,39,33,29,32]
fit = polyfit(x, y, degree) 
fitfunction = poly1d(z4)
to_predict=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

plt.plot(to_predict,fitfunction(to_predict))
plt.show()

在我运行之后,这个出现了(我试着放一张图片,但是stackoverflow不允许我这样做)。在

我想强迫它通过零。在

我该怎么做?在


Tags: to函数fromimportnumpymatplotlibas情况
2条回答

如果有人必须在截止日期前完成这项工作,一个快速的解决方案就是在0处加上一堆额外的点,以使权重偏离。我这样做了:

for i in range(0,100):
    x_vent.insert(i,0)
    y_vent.insert(i,0)         

slope_vent,intercept_vent=np.polyfit(x_vent,y_vent,1)

如果不需要使用原始最小二乘公式计算拟合误差(即最小化∑| yi—(axi2+bxi)|2),您可以尝试对{}进行线性拟合,因为(ax2+bx)/x=ax+b

如果必须使用相同的误差度量,请直接构造系数矩阵并使用^{}

coeff = numpy.transpose([x*x, x])
((a, b), _, _, _) = numpy.linalg.lstsq(coeff, y)
polynomial = numpy.poly1d([a, b, 0])

(请注意,您提供的数据序列看起来不像y截距为0的抛物线。)

相关问题 更多 >