python拟合离散数据_python – 使用curve_fit来拟合数据

我是scipy和matplotlib的新手,我一直在尝试将函数与数据相匹配. Scipy Cookbook中的第一个例子非常有效,但是当我尝试从文件中读取点时,我给出的初始系数(下面的p0)似乎从未真正改变,协方差矩阵总是INF.

我试图在一条线后拟合数据,但无济于事.我导入数据的方式有问题吗?如果是这样,有没有更好的方法呢?

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

import scipy as sy

with open('data.dat') as f:

noms = f.readline().split('\t')

dtipus = [('x', sy.float32)] + [('y', sy.float32)]

data = sy.loadtxt(f,delimiter='\t',dtype=dtipus)

x = data['x']

y = data['y']

def func(x, a, b, c):

return a*x**b + c

p0 = sy.array([1,1,1])

coeffs, matcov = curve_fit(func, x, y, p0)

yaj = func(x, coeffs[0], coeffs[1], coeffs[2])

print(coeffs)

print(matcov)

plt.plot(x,y,'x',x,yaj,'r-')

plt.show()

谢谢!

解决方法:

在我看来,问题确实在于如何导入数据.伪造这个数据文件:

$:~/temp$cat data.dat

1.0 2.0

2.0 4.2

3.0 8.4

4.0 16.1

并使用pylab的loadtxt函数进行读取:

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

import scipy as sy

import pylab as plb

data = plb.loadtxt('data.dat')

x = data[:,0]

y= data[:,1]

def func(x, a, b, c):

return a*x**b + c

p0 = sy.array([1,1,1])

coeffs, matcov = curve_fit(func, x, y, p0)

yaj = func(x, coeffs[0], coeffs[1], coeffs[2])

print(coeffs)

print(matcov)

plt.plot(x,y,'x',x,yaj,'r-')

plt.show()

适合我.顺便说一句,您可以使用dtypes来命名列.

标签:least-squares,python,scipy,python-3-x,curve-fitting

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值