具有已知函数numpy的曲线拟合

迪格斯

我有一个ax和y一维numpy数组,我想用已知函数重现y以获得“ beta”。这是我正在使用的代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

y = array([ 0.04022493,  0.04287536,  0.03983657,  0.0393201 ,  0.03810298,
    0.0363814 ,  0.0331144 ,  0.03074823,  0.02795767,  0.02413816,
    0.02180802,  0.01861309,  0.01632699,  0.01368056,  0.01124232,
    0.01005323,  0.00867196,  0.00940864,  0.00961282,  0.00892419,
    0.01048963,  0.01199101,  0.01533408,  0.01855704,  0.02163586,
    0.02630014,  0.02971127,  0.03511223,  0.03941218,  0.04280329,
    0.04689105,  0.04960554,  0.05232003,  0.05487037,  0.05843364,
    0.05120701])

x= array([ 0.,  0.08975979,  0.17951958,  0.26927937,  0.35903916,
    0.44879895,  0.53855874,  0.62831853,  0.71807832,  0.80783811,
    0.8975979 ,  0.98735769,  1.07711748,  1.16687727,  1.25663706,
    1.34639685,  1.43615664,  1.52591643,  1.61567622,  1.70543601,
    1.7951958 ,  1.88495559,  1.97471538,  2.06447517,  2.15423496,
    2.24399475,  2.33375454,  2.42351433,  2.51327412,  2.60303391,
    2.6927937 ,  2.78255349,  2.87231328,  2.96207307,  3.05183286,
    3.14159265])

def func(x,beta):
   return 1.0/(4.0*np.pi)*(1+beta*(3.0/2*np.cos(x)**2-1.0/2))

guesses = [20]
popt,pcov = curve_fit(func,x,y,p0=guesses)

y_fit =  1/(4.0*np.pi)*(1+popt[0]*(3.0/2*np.cos(x)**2-1.0/2))

plt.figure(1)
plt.plot(x,y,'ro',x,y_fit,'k-')
plt.show()

该代码可以正常工作,但配件已完全关闭(参见图片)。知道为什么吗?

在此处输入图片说明 看起来要使用的公式包含一个附加参数,即p

def func(x,beta,p):
   return p/(4.0*np.pi)*(1+beta*(3.0/2*np.cos(x)**2-1.0/2))

guesses = [20,5]
popt,pcov = curve_fit(func,x,y,p0=guesses)

y_fit =  func(angle_plot,*popt)

plt.figure(2)
plt.plot(x,y,'ro',x,y_fit,'k-')
plt.show()

print popt # [ 1.23341604  0.27362069]

在popt中,哪个是beta,哪个是p?

在此处输入图片说明

CT Zhu

这将尽可能地好(假设您按照@mdurant的建议正确地获得了方程式),则需要一个附加的截距项来进一步提高拟合度:

def func(x,beta, icpt):
   return 1.0/(4.0*np.pi)*(1+beta*(3.0/2*np.cos(x)**2-1.0/2))+icpt

guesses = [20, 0]
popt,pcov = curve_fit(func,x,y,p0=guesses)

y_fit =  func(x, *popt)

plt.figure(1)
plt.plot(x,y,'ro', x,y_fit,'k-')
print popt #[ 0.33748816 -0.05780343]

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

曲线拟合是否具有分段功能?

来自分类Dev

曲线拟合是否具有分段功能?

来自分类Dev

具有洛伦兹曲线拟合的 FFT 韦尔奇

来自分类Dev

python numpy / scipy曲线拟合

来自分类Dev

曲线拟合优化scipy python numpy

来自分类Dev

如何定义曲线拟合中的函数?

来自分类Dev

Python - 更复杂函数的曲线拟合

来自分类Dev

带有lsqcurvefit的加权曲线拟合

来自分类Dev

带有参数范围的曲线拟合

来自分类Dev

使用Numpy Polyfit进行曲线拟合,用平方根估计函数常数

来自分类Dev

简单的曲线拟合

来自分类Dev

曲线拟合分布

来自分类Dev

在Matlab中将曲线拟合到具有特定颜色的区域

来自分类Dev

具有附加边界的3D MATLAB曲线拟合

来自分类Dev

曲线拟合到指数

来自分类Dev

JS指数曲线拟合

来自分类Dev

指数曲线拟合Matlab

来自分类Dev

曲线拟合-数据集

来自分类Dev

预测曲线拟合matlab

来自分类Dev

为什么稍微改变函数会导致scipy的指数曲线拟合有如此大的差异?

来自分类Dev

如何使用Matlab曲线拟合工具拟合指数函数?

来自分类Dev

是否有一种准确的曲线拟合方法可以返回可用于通过函数生成原始曲线的系数?(MATLAB)

来自分类Dev

SciPy曲线拟合失败幂律

来自分类Dev

使用Gnuplot的逼近图/曲线拟合

来自分类Dev

SciPy中的指数曲线拟合

来自分类Dev

Scipy的最佳曲线拟合极限

来自分类Dev

曲线拟合-单调递增导数

来自分类Dev

寻找最佳的单调曲线拟合

来自分类Dev

2个输入变量的曲线拟合