通过特定多项式拟合 Python 曲线

Posted

技术标签:

【中文标题】通过特定多项式拟合 Python 曲线【英文标题】:Python curve fitting by specific polynominal 【发布时间】:2019-03-02 06:53:04 【问题描述】:

我有一个关于 Python 曲线拟合的问题, 我知道 numpy 中有 polyfit 函数,但是如果我将多项式分配为 AX^4 + BX^2,这个A和B怎么求???

import numpy as np
import matplotlib.pyplot as plt

points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
# get x and y vectors
x = points[:,0]
y = points[:,1]

# calculate polynomial
z = np.polyfit(x, y, 4)  <---?
f = np.poly1d(z)         <---?   

谁能给个提示??? 谢谢!

【问题讨论】:

【参考方案1】:

您可以尝试使用最小二乘法。基本上找到值 A 和 B 以便残差平方和最小。我为此使用了scipy

这是我的代码:

import numpy as np
from scipy.optimize import leastsq
# --------------------------------
import matplotlib as mpl
mpl.rcParams['font.size']=20
import matplotlib.pyplot as plt
# -------------------------------------
points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
# get x and y vectors
x = points[:,0]
y = points[:,1]

# calculate polynomial
#z = np.polyfit(x, y, 4)  <---?
#f = np.poly1d(z)         <---?   
# ----------------------------------------------
def poly(p,x):
    return p[0]*x**4+p[1]*x**2

def res(p,x,y):
    return y-poly(p,x)
# ----------------------------------------------
p0=[1.,1.];
pars=leastsq(res,p0,(x,y));
print pars[0]
# -----------------------------------------------
xi=np.linspace(np.min(x),np.max(x),100);

fig = plt.figure(figsize=(6,6));ax=fig.add_subplot(111);
ax.plot(x,y,ms=10,color='k',ls='none',marker='.');
ax.plot(xi,poly(pars[0],xi),color='0.8',lw=2.0);
plt.savefig('fit_result.png');
plt.show();

【讨论】:

以上是关于通过特定多项式拟合 Python 曲线的主要内容,如果未能解决你的问题,请参考以下文章

使用python通过点拟合曲线

Python做曲线拟合(一元多项式拟合及任意函数拟合)

python_numpy最小二乘法的曲线拟合

迭代拟合多项式曲线

Python曲线拟合(polyfit , curve_fit, interp1d插值)

基于MATLAB的多项式数据拟合方法研究-毕业论文