我正在尝试创建一个python程序,用户在其中输入一组数据,程序会输出一个输出,在其中创建一个最适合数据的直线/多项式图形。
这是密码:
from matplotlib import pyplot as plt
import numpy as np
x = []
y = []
x_num = 0
while True:
sequence = int(input("Input 1 number in the sequence, type 9040321 to stop"))
if sequence == 9040321:
poly = np.polyfit(x, y, deg=2, rcond=None, full=False, w=None, cov=False)
plt.plot(poly)
plt.scatter(x, y, c="blue", label="data")
plt.legend()
plt.show()
break
else:
y.append(sequence)
x.append(x_num)
x_num += 1
我使用了多项式,其中我分别输入了1, 2, 4, 8
,MatPlotLib正确地绘制了它,但是,对于次数为2的多项式,输出如下所示:
这显然是不正确的,但是我不确定问题出在哪里。我认为这与度有关,但是当我将度改为3时,它仍然不适合。我正在寻找一个像y = sqrt(x)这样的图形来检查每个点,当这不可能时,创建一条最适合的线。
编辑:我添加了一个print(poly)
特性,对于上面选择的输入,它会给出[0.75 0.05 1.05]
。我不知道该怎么做。
2条答案
按热度按时间hjqgdpho1#
执行代码,你有上面的图表,这是打印在终端:
在我看来,您对
polyfit
的输出抱有错误的期望。vltsax252#
二次多项式逼近
np.polyfit
给出了多项式在给定点附近的系数。要使用matplotlib将多项式绘制成平滑曲线,您需要计算大量的x,y
对。使用np.linspace(start, stop, numsteps)
作为x
,numpy的矢量化允许一次性计算所有对应的y
。例如ys = a * x**2 + b * x + c
。高次逼近多项式
给定
N
个点,一个N-1
次多项式可以精确地通过其中的每一个点。下面是一个具有7个点和最高6次多项式的示例。∮另一个例子∮