当前位置: 首页 > 知识库问答 >
问题:

拟合指数曲线误差

郝杰
2023-03-14
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x, a, b, c):
    return a * np.exp(-b * x) + c

x =  [333,500,1000,2000,5000,10000]

y = [195.3267, 233.0235, 264.5914,294.8728, 328.3523,345.4688]

popt, pcov = curve_fit(func, x, y)

plt.figure()
plt.plot(x, y, 'ko', label="Original Noised Data")
plt.plot(x, func(x, *popt), 'r-', label="Fitted Curve")
plt.legend()
plt.show()

错误:C:\用户\Aidan\Anaconda3\lib\site-包\sepy\优化\minpack.py:794: OptimizeWarning:参数的协方差无法估计
类别=OptimizeWarning)

---------------------------------------------------------------------------()14 plt中的TypeError回溯(最近一次调用)。图15 plt。绘图(x,y,'ko',label=“原始带噪数据”)---

在func(x,a,b,c)4 5 def func(x,a,b,c)中:----

TypeError:“numpy。“float64”对象不能解释为整数

由于某种原因,我无法根据我的数据得到曲线拟合。我下面的指数示例:如何在Python中进行指数和对数曲线拟合?我发现只有多项式拟合

但是我使用的是两个数组,而不是随机数据。我是蟒蛇新手!

共有1个答案

赵永逸
2023-03-14

您的代码存在一些问题。

  • 您使用列表而不是numpy.ndarrayNumpysmpy例程旨在与numpy.ndarray一起工作,并且它们在内部使用它们。你也应该使用它们。
  • 您可能会遇到数据和函数溢出问题,例如np.exp(-1000)在Python3中已经近似为零
  • 你试图拟合一个函数,它不太可能拟合你的数据。它看起来更像是指数级的复苏,而不是衰减。

以下代码暂时解决了所有这些问题:

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

def func(x, a, b, c):
    return a * (1 - np.exp(-b * x)) + c

x =  np.array([333.0,500.0,1000.0,2000.0,5000.0,10000.0]) / 1000
y = np.array([195.3267, 233.0235, 264.5914,294.8728, 328.3523,345.4688]) / 10

popt, pcov = curve_fit(func, x, y)
print(popt)

plt.figure()
plt.plot(x, y, 'ko', label="Original Noised Data")
plt.plot(x, func(x, *popt), 'r-', label="Fitted Curve")
plt.legend()
plt.show()
 类似资料:
  • 问题内容: 我有一组近似于2D曲线的点。我想将Python与numpy和scipy配合使用,以找到近似适合这些点的三次贝塞尔曲线路径,在该路径中,我指定两个端点的确切坐标,并返回其他两个控制点的坐标。 我最初以为可以做我想做的事,但是似乎迫使曲线穿过每个数据点(因为我想您希望进行插值)。我以为我走错了路。 我的问题与此相似:如何将贝塞尔曲线拟合到一组数据?,除了他们说他们不想使用numpy。我的偏

  • 本教程演示了如何使用TensorFlow.js运算符重头构建小型玩具模型. 我们将使用多项式函数生成一些合成数据的曲线. 先决条件 本教程假设您熟悉TensorFlow.js的基本构建块介绍在TensorFlow.js中的核心概念:张量,变量和操作.我们建议在完成本教程之前完成核心概念。 运行代码 本教程重点介绍用于构建模型和其系数的TensorFlow.js代码.可以在此处找到本教程的完整代码(

  • 问题内容: 对于使用6阶多项式插值非线性数据,我有一个非常具体的要求。我看过numpy / scipy例程(scipy.interpolate.InterpolatedUnivariateSpline),这些例程最多只能进行5级插值。 即使没有直接函数可以执行此操作,是否有办法在Python中复制Excel的LINEST线性回归算法?LINEST允许进行6度曲线拟合,但是我不希望将Excel用于任

  • 问题内容: 我试着用指数拟合一些数据已经有一段时间了scipy.optimize.curve\u fit曲线拟合但我真的有困难。我真的看不见有什么理由不起作用,但它只是产生了一条海峡线,不知道 为什么? 任何帮助都将不胜感激 问题答案: 数值算法往往更好地工作时,没有饲料非常小(或 (大)数字。 在本例中,图表显示数据的x和y值非常小。如果 如果缩放它们,拟合效果会更好: Note that af

  • 问题内容: 我希望能够执行拟合,使我可以将任意曲线函数拟合到数据,并允许我在参数上设置任意界限,例如,我想拟合函数: 说: 在以下范围内: 并且是积极的 有一个很好的scipy curve_fit 函数,但是它不允许指定参数范围。还有一个不错的http://code.google.com/p/pyminuit/库,该库可以进行泛型最小化,并且可以设置参数的范围,但在我的情况下,它没有涵盖范围。 问

  • 通过组合曲线CurvePath可以把多个圆弧线、样条曲线、直线等多个曲线合并成一个曲线。 U型案例 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry // 绘制一个U型轮廓 var R = 80;//圆弧半径 var arc = new THREE.ArcCurve(0, 0, R, 0, Math.PI, true); // 半圆弧