【问题标题】:Curve Fitting a data set with unknown formula (SciPy)曲线拟合具有未知公式的数据集(SciPy)
【发布时间】:2017-03-02 01:35:40
【问题描述】:

我正在尝试对 Waldram 图进行曲线拟合,以便绘制自己的图。我用了一个程序,从图中得到了一条曲线作为点数据,想弄清楚公式。

我对 SciPy 有一定的了解,在我看来,您需要知道曲线的公式应该是什么,而我不知道。有没有办法在不知道一般公式的情况下求解最佳拟合曲线?

Waldram Diagram

Python Code for my custom points

【问题讨论】:

  • 假设多项式通常是一个好主意,因为函数可以扩展为(多项式)系列。
  • 从图中你的函数看起来相当周期性和对称,所以你可能会幸运地用一些 dct 模式拟合它们。
  • 扩展 @a_guest 的评论,您可以使用任意度数的 numpy 的 polyfit,直到您的曲线正确近似(具有可接受的误差)。它可能行不通,但它是一个很好的起点。
  • 参考@PaulPanzer 的评论:我没有检查图像,但无论如何系列拟合是一个很好的尝试,所以如果你的函数显示周期性特征,我建议Fourier series .
  • 也许是这个? repository.ias.ac.in/82339/1/82339.pdfwaldram 图表数学没有明确说明,但应该与给出的内容相关

标签: python excel numpy scipy curve-fitting


【解决方案1】:

我将您发布的数据拟合到 400 多个已知的、具有四个或更少参数的非线性方程,并使用遗传算法进行初始参数估计,并从排序结果中选择了我认为很好的候选方程作为悬链线变换方程(带偏移) - 见附图。

y = a * cosh((bx + c) / a) + Offset

a = -9.8413881676827686E-02
b =  8.3564373717938123E-03
c = -3.8850547606358887E-04
Offset =  8.7774689075636331E+01


Degrees of freedom (error): 183
Degrees of freedom (regression): 3
Chi-squared: 2232.72609461
R-squared: 0.985367781841
R-squared adjusted: 0.985127909412
Model F-statistic: 4107.88262167
Model F-statistic p-value: 1.11022302463e-16
Model log-likelihood: -497.209347432
AIC: 5.36052778002
BIC: 5.42964240284
Root Mean Squared Error (RMSE): 3.45538879663

a = -9.8413881676827686E-02
       std err: 2.35115E-04
       t-stat: -6.41825E+00
       p-stat: 1.14906E-09
       95% confidence intervals: [-1.28667E-01, -6.81608E-02]

b = 8.3564373717938123E-03
       std err: 1.27107E-06
       t-stat: 7.41202E+00
       p-stat: 4.45377E-12
       95% confidence intervals: [6.13203E-03, 1.05808E-02]

c = -3.8850547606358887E-04
       std err: 3.74545E-07
       t-stat: -6.34812E-01
       p-stat: 5.26344E-01
       95% confidence intervals: [-1.59599E-03, 8.18980E-04]

Offset = 8.7774689075636331E+01
       std err: 2.53913E-01
       t-stat: 1.74192E+02
       p-stat: 0.00000E+00

       95% confidence intervals: [8.67805E+01, 8.87689E+01]


Coefficient Covariance Matrix
[  1.92706102e-05  -1.41684431e-06   1.54227770e-08  -4.40076630e-04]
[ -1.41684431e-06   1.04180031e-07  -1.21060089e-09   3.25700381e-05]
[  1.54227770e-08  -1.21060089e-09   3.06987009e-08  -8.90474871e-07]
[ -4.40076630e-04   3.25700381e-05  -8.90474871e-07   2.08113423e-02]

【讨论】:

  • 好的,很有趣,但是你是怎么做到的?
  • 我的开源在线曲线和曲面拟合网站zunzun.com 有一个“函数查找器”,它使用差分进化遗传算法查找非线性方程的初始参数估计,类似于 scipy模块优化.differ_evolution。我将您的数据粘贴到网站中,运行函数查找器,并用相对较少的参数寻找合适的参数。
  • 我的数据有 4 个输入变量和 1 个输出变量。 zunzun.com可以处理吗?在我看来,zunzun.com 最多只能处理 2 个输入变量和 1 个输出变量的函数,对吧?
  • 我将数据添加到我的问题stats.stackexchange.com/questions/333890/…
【解决方案2】:

简短回答:不,您需要模型的某种函数形式来适应。

理想情况下,您应该能够根据数据的含义编写具有多个参数(然后对其进行优化)的模型。如果这不可能,您需要根据您的领域知识提出一些明智的建议。

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 2017-04-21
    • 2012-12-16
    • 2018-11-20
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多