python curve_fit拟合失败

最近,使用curve_fit时遇到一个问题,百思不得其解,看了官网,上网查都没有找到这种问题所在,最后通过一些实验确定:应该是由于我这个问题中的数值存在较小值,如果在function中使用了除法会导致数值计算的问题,所以不正确。 接下来具体描述下我遇到的问题,和得出我这种猜测的支撑依据。

1.问题描述

在做交通流三参数模型拟合时,我使用了scipy的curve_fit函数。数据大概是这个样子的:
在这里插入图片描述
然后我使用下面的代码:
在这里插入图片描述
拟合出的曲线是这样的:
在这里插入图片描述
但是如果我将代码改成这样:
在这里插入图片描述
拟合结果就变成了:
在这里插入图片描述
我用spss做了验证,拟合出来的结果是完全一致的。所以说可以确定问题就是出在我定义的function里面,一个是定义成 v s = v f ∗ ( 1 − k / k j ) v_s=v_f*(1-k/k_j) vs=vf(1k/kj),另一个是定义成 v s = a ∗ k + b v_s=a*k+b vs=ak+b,我们可以知道这两个式子是完全等效的,但是拟合结果是天差地别,让人费解,接下来我就来简单探究下问题。

2.简单实验

2.1排除公式因素

首先,我猜测会不会是因为除法所带来的呢,因为两个式子中唯一的区别就是一个式子带有除法另一个没有除法。我做了如下的实验,代码为:
在这里插入图片描述
在这里插入图片描述
可以发现确实不是除法所带来的,这边用了和上述失败的公式一模一样的公式,可是却拟合成功了。

2.2数值计算问题

于是进一步猜测应该是由于数值计算的原因所带来的。在我这个例子中k都是很小的数值,基本在0.01左右,甚至更小,而vs一般大于20。因此猜测引入除法会带来数值计算上的bug。于是用下述代码进行实验。
在这里插入图片描述
在这里插入图片描述
果然拟合失败了。
然后做一个对照实验,来确认问题原因。
在这里插入图片描述
在这里插入图片描述
只需稍微将k(自变量)的值变大一些就可以拟合成功了,所以应该就是由于数值计算问题所带来的。

3.总结建议

所以说,总的来说curve_fit中的函数定义应该是没有限制的,但是建议是使用乘法,少用除法,因为除法更容易出现问题,如舍入误差、数值计算等,除法都有可能在有极小值时出现bug。若出现拟合问题,可以考虑下是不是由于数据里存在很小或很大的值所带来的。

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Python中的curve_fit是一种拟合函数,可以用于拟合数据集中的曲线。它使用非线性最小二乘法来拟合数据,并返回最佳拟合参数。使用curve_fit需要先定义一个拟合函数,然后将数据集和拟合函数作为参数传递给curve_fit函数。最终,curve_fit将返回一个包含最佳拟合参数的数组。 ### 回答2: Python中的curve_fit函数是用来进行数据拟合的。拟合是指使用函数模型来逼近实际数据,以便于对数据进行分析和预测。因此拟合是数据分析中的重要方法之一。Pythoncurve_fit函数是在SciPy模块中定义的,使用这个函数能够拟合各种类型的函数。通过拟合可以得到函数的参数,用于描述数据的趋势和规律。 curve_fit函数需要传入的参数包括:拟合函数、拟合数据点的x坐标和y坐标以及可选的初始拟合参数,和其它一些参数。 拟合函数的定义是很重要的,因为它会决定拟合的效果。根据不同的需求,可以选择不同的拟合函数,例如线性函数、多项式函数、指数函数、对数函数等等。 在使用curve_fit进行数据拟合时,需要注意以下几点: 1)数据应该先进行预处理,如去除异常值、数据标准化等。 2)拟合函数的选择非常重要,必须根据实际数据的特点做出选择。 3)适当选择初始参数的值,可以加快拟合的速度,提高拟合的精度。 4)对于非线性函数的拟合,可能需要进行多次迭代,找到最优解。 5)最后,需要评估拟合的精度,可以采用R方等指标评估。 在实际应用中,数据拟合常用于预测、模型预测控制、数据分析等领域。Python中的curve_fit函数是一种非常方便,同时也是一种十分强大的工具。如果您需要进行数据拟合,可以尝试使用它,进行拟合与分析。 ### 回答3: Python curve_fit是一种用于拟合数学模型与实际数据之间的关系的工具,通俗来说,就是通过给定的一些数据点和一个数学模型,来计算出这个模型的参数值。这个工具是科学家和工程师们广泛使用的工具之一,主要用于实验数据分析、参数拟合和模型验证等方面。 Python curve_fit主要使用了最小二乘法来拟合数据。最小二乘法是一种常用的数学方法,在给定的数据集中寻找一个最佳的拟合曲线,使得这个曲线能够最好地描述数据的分布趋势。当然,不同的数学模型需要使用不同的拟合方法来求解最终的参数值。在Python curve_fit中,可以使用SciPy模块中的optimization库中的curve_fit函数来实现对不同数学模型的参数拟合。 要使用Python curve_fit进行拟合,需要准备好数据集。一般来说,数据集应该包括自变量和因变量两个变量的数据,以及这些数据的误差或标准差。有了这些数据,就可以通过Python curve_fit函数将拟合模型应用到数据集中,返回拟合的系数,并绘制出拟合曲线。 在使用Python curve_fit进行拟合时,需要考虑到一些细节问题,比如如何选择拟合模型、如何处理异常值和离群值、如何预测拟合结果的精度等。 总之,Python curve_fit是一种非常有用的工具,可以帮助科学家和工程师们更好地理解数据分布规律,更准确地预测未来的趋势,从而更好地指导科研和工程实践中的决策和实践。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值