python完全错了scipy.optimize.curve_-fi

2024-10-01 07:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

更新:解决了! 它现在正在用正确的符号生成参数,它们确实拟合曲线。问题是定义func(a,b,c,x),但是曲线拟合需要先读取x:func(x,a,b,c)。谢谢大家的帮助!今天见老板我会做定量分析:)

以下是一些新的配合:http://imgur.com/NHnzR2A

(我仍然得到一个运行时错误:

RuntimeWarning: overflow encountered in power
return a*(math.e**(b*(math.e**(c*x))))


有谁能帮我找出这个代码有什么问题吗?我是新来的。 我试图用Gompertz equation来模拟细菌生长,但我的代码产生了一个完全错误的曲线拟合。您可以看到我的真实数据的图像、模型方程以及此代码在this imgur album中生成的拟合 谢谢!在


固定代码:

^{pr2}$

Tags: 代码comhttp参数定义错误符号math
1条回答
网友
1楼 · 发布于 2024-10-01 07:36:04

进口:

import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as opt

示例值:

^{pr2}$

旧数据准备:

x=[]
y=[]
x_val = 0
for i in values: #values is a list of several thousand experimental data points
  if x_val < 100:
    x.append(float(x_val))
    y.append(float(i))
  x_val += 5
x = np.asarray(x)
y = np.asarray(y)

更方便的数据准备:

y1 = values[:100//5]
x1 = np.arange(len(y1))*5

检查是否相同:

print np.allclose(y, y1)
print np.allclose(x, x1)

使用numpy定义拟合函数:

def function(x, a,b,c):
    #a = upper asymptote
    #b = negative = x axis displacement
    #c = negative = growth rate
    return a*(np.exp(b*(np.exp(c*x))))

使用起始点p0进行拟合:

pars, pcov = opt.curve_fit(function, x1, y1, p0=[0.1, -10, 0.1])

绘制:

yaj = function(x1, *pars)
plt.figure(1, figsize=(8.5, 11))
plt.plot(x1, y1, 'g-', x1, yaj, 'r-')
plt.xlim(min(x1), max(x1))
plt.ylim(min(y1), max(y1))
plt.show()

相关问题 更多 >