繁体   English   中英

在包含数据数组和python函数的积分上进行曲线拟合

Curve-Fitting over an integral containing both a data array and function in python

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个用未知常数的整数描述的数据集,我正在尝试使用python的curve_fit确定该数据集。 但是,被积数包含一个与数据集相乘的函数

def integrand(tm, Pm, args):
    dt, alpha1, alpha2 = args
    return Pm*(1-np.e**( -(alpha1 * (tm+dt))) )*np.e**(-(alpha2 * (tm+dt)))

其中Pm是脉冲响应收集数据的一维数组,脉冲数据图像和积分曲线

橙色曲线代表脉冲数据,蓝色曲线代表积分应评估的值

tm是积分变量,而dt,alpha1,alpha2是未知常数,积分范围为0到tm。

在这种积分上进行曲线拟合的最佳方法是什么,或者解决未知常数的其他方法可能是什么?

数据集在这里链接

1 个回复

从数据集的长度来看,似乎目的是要使integrand(t)适应output(t + dt)。 scipy优化模块中有几个功能可用于执行此操作。 对于一个简单的示例,我们显示使用scipy.optimize.leastsqr()的实现。 有关更多详细信息,请参见scipy优化中的教程。

基本方案是创建一个函数,该函数在独立坐标上评估模型函数,并返回一个numpy数组,其中包含残差,模型与各点观测值之间的差异。 minimumsq()找到一组参数的值,该参数可将残差平方和最小化。

请注意,拟合可能对初始猜测敏感。 模拟退火通常用于查找可能的全局最小值,并在优化拟合之前提供拟合参数的粗略估计。 此处用于初始猜测的值仅用于概念目的。

from scipy.optimize import leastsq
import numpy as np

# Read the data files    
Pm = np.array( [ float(v) for v in open( "impulse_data.txt", "r" ).readlines() ] )
print type(Pm), Pm.shape

tm = np.array( [ float(v) for v in open( "Impulse_time_axis.txt", "r" ).readlines() ] )
print type(tm), tm.shape

output = np.array( [ float(v) for v in open( "Output_data.txt", "r" ).readlines() ] )
print type(output), output.shape

tout = np.array( [ float(v) for v in open( "Output_time_axis.txt", "r" ).readlines() ] )
print type(tout), tout.shape

# Define the function that calculates the residuals
def residuals(  coeffs, output, tm ):
    dt, alpha1, alpha2 = coeffs
    res = np.zeros( tm.shape )
    for n,t in enumerate(tm):
        # integrate to "t"
        value = sum( Pm[:n]*(1-np.e**( -(alpha1 * (tm[:n]+dt))) )*np.e**(-(alpha2 * (tm[:n]+dt))) )
        # retrieve output at t+dt
        n1 = (np.abs(tout - (t+dt) )).argmin()
        # construct the residual
        res[n] =  output[n1] - value
    return res

# Initial guess for the parameters
x0 = (10.,1.,1.)

# Run the least squares routine
coeffs, flag = leastsq( residuals, x0, args=(output,tm) )

# Report the results
print( coeffs )
print( flag )
1 Python:根据数据进行曲线拟合

我是Python曲线拟合的初学者。 我想用curve_fit拟合我的数据。 我有3个数据框,其中2个包含3行,只有一行具有浮点数,其他是Nan。 我的另一个数据框有3个浮动行。 像那样: 我想根据我的数据创建适合度。 我的 但是,我有一个空白情节。 我该如何适应呢? ...

2 使用已知积分Python进行曲线拟合

我有一些数据是箱中未知曲线的积分。 为了您的利益,数据为海浪能量,垃圾箱为方向,例如0-15度。 如果可能的话,我想在数据上拟合一条曲线,以节省分档内的积分。 我试着用铅笔在记事本上绘制草图,似乎有可能。 有谁知道Python中有任何曲线拟合工具可以做到这一点,例如在scipy插值子包中 ...

3 如何使用Python进行曲线拟合?

您好,我有一些数据,我想用函数f(x)= ax ^ b + c拟合我的数据。 但是Python无法达到适合我的数据的目的。 我尝试使用Matlab,它的R平方为0.96,所以可以,但是对于Python却不起作用,我不明白为什么...这是我的代码: 谢谢您的帮助 ! ...

5 如何使用python/scipy对曲线族进行曲线拟合

我有一个解决以下问题: 我想用一个方程拟合一组曲线(见代码) 拟合参数 (C1-C4) 应该是常数 所以我只需改变“Sigma和T”就可以拟合(或描述)该家族的一条曲线 我希望我能描述我的问题,希望你们能帮忙,我将不胜感激! 问题已编辑(由于误解 - 2020_04_04) 现在我 ...

6 python-如何在Python中以概率密度对拟合函数进行曲线拟合?

我正在运行python v> 3.0。 我对积分函数的曲线拟合有疑问。 我有一个具有自变量和两个参数的函数。 假设自变量是“ X”,参数是a和b。 X是网格数据(二维)。 在每个网格点,“ i” X在X [i] -4至X [i] +4之间变化,从而引起与每个网格“ i”相关的概率密度函数, ...

7 使用 Scipy 在 Python 中拟合曲线

只是想说明我是一个非常初级的 Python 程序员。 我的大部分知识都是我在物理实验室中用于数据分析/绘图的知识。 我基本上收集了作为温度函数的电容数据,我应该用函数拟合我绘制的数据以找到其最佳参数。 请注意,我为初始值输入了随机数,然后运行了代码。 我的POpt函数给了我新的最佳参数,我用我的 ...

9 如何自动选择数据进行曲线拟合

我在尝试使用曲线拟合工具自动生成良好的拟合而没有用户输入时遇到麻烦。 目的是仅提供数据,并使其始终如一地产生良好的契合度,而无需我改动参数或数据本身。 我正在使用以下代码: 粗略计算出的参数是一个很好的近似值,但是我发现所选择的数据范围有很大不同。 如下图所示的两个图表所示,选择的数据有很大的不 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM