在python中拟合digamma函数时出错

2024-09-27 07:29:45 发布

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

我是python的新手,我正在尝试使digamma函数适合我的数据,但是我得到了一个 raise TypeError(“无法从“+repr(x)”创建mpf”) error'TypeError:无法从数组([0.5'})创建mpf,并且有很多0.5

这是我的数据data

import numpy as np
from numpy import exp, loadtxt, pi, sqrt, sinh, log
from lmfit import Minimizer, Parameters, report_fit
from mpmath import digamma
import math
k = 1.38e-23
hcut = 1.0e-34
q = 1.6e-19
B = 7.15

data = loadtxt('Rxx-HLN.csv')
x = data[:, 2]
y1 = data[:, 3]
s = 1/y1
s0 = s[1]
y = s-s0


# define objective function: returns the array to be minimized
def fcn2min(params, x, y):
    """Model a decaying sine wave and subtract data."""
    Bs = params['Bs']
    Bp = params['Bp']
    Be = params['Be']
    model = (log(Bp/x)-digamma(0.5+(Bp/x)))+((log((Bs+Be)/x)-digamma(0.5+((Bs+Be)/x))))-((log((1.33*Bs+Bp)/x)-digamma(0.5+((1.33*Bs+Bp)/x))))
    return model - y


#    
params = Parameters()
params.add('Bs', value=9.1e-31)
params.add('Bp', value=1e-12)
params.add('Be', value=9.1e-31)



# do fit, here with the default leastsq algorithm
minner = Minimizer(fcn2min, params, fcn_args=(x, y))
result = minner.minimize()

# calculate final result
final = y + result.residual

# write error report
report_fit(result)

# try to plot results
try:
    import matplotlib.pyplot as plt
    plt.plot(x, y, 'bo')
    plt.plot(x, final, 'r')
    plt.show()
except ImportError:
    pass

我认为这与强积金有关


Tags: fromimportreportlogadddatabsvalue
1条回答
网友
1楼 · 发布于 2024-09-27 07:29:45

我想你最好还是用scipy.special.digammampmath模块执行任意精度的计算,但是您的代码和lmfit中的其余计算都使用了双精度计算的numpy/scipy(或者转到C/Fortran代码)。也就是说,拟合算法不会给出比双精度更好的结果

另外(可能与您首先选择的mpmath有关)scipylmfit中的双精度拟合算法在处理跨越多个数量级的参数值时效果不佳。也就是说,您可能需要重述您的问题,以便参数值预期在1.e-7到1.e+7的范围内,并放入qhcut等缩放因子。似乎你在做这件事,但你可能需要对此保持警惕

相关问题 更多 >

    热门问题