1、多项式拟合的概念
用一个无穷级数表示一个可微函数,任何可微的函数,总可以用一个N次多项式来近似,而比N次幂更高阶的部分可以作为无穷小量而被忽略不计。
f(x) = p0x^n + p1x^n-1 + p2x^n-2 + … + pn
y1 = f(x0)
y2 = f(x1)
…
yn = f(xn)
2、在numpy中求多项式拟合
- numpy.polyfit(自变量数组, 函数值数组, 最高次幂数n)
该方法将会返回[p0, p1, …, pn]多项式系数
3、获取每一项的值
- numpy.polyval([p0, p1, …, pn], 自变量数组)
返回多项式方程的根
4、求微分
- numpy.polyder([p0, p1, …, pn])
返回导函数系数数组
5、案例分析
首先得到两曲线数据的价差:
diff_closing_price = apple_closing_prices - beer_closing_prices
然后拟合出原函数:
p = np.polyfit(days, diff_closing_price, 5)
之后取值得原函数的系数:
poly_closing_price = np.polyval(p, days)
若进行微分,则还可以求根、取实数根:
# 导函数的系数,即微分函数
q = np.polyder(p)
# 求方程的根,导函数方程的根,拐点
roots = np.roots(q)
# 根是取实根,因此需要判断一下,数组中哪些是实数
reals = roots[np.isreal(roots)].real # .real表示只取实部
# print(reals)
# 取实数中的每一个值
peeks = [[days[0], np.polyval(p, days[0])]]
for real in reals:
if days[0]<real and real<days[-1]:
peeks.append([real, np.polyval(p, real)]) # 拐点,和拐点对应的原函数值
6、多项式拟合案例源码
import datetime as dt
import numpy as np
import matplotlib.pylab as mp
import matplotlib.dates

4463

被折叠的 条评论
为什么被折叠?



