复函数曲线拟合 (Python)

时间:2021-01-03 17:14:10

标签: python math scipy curve-fitting scipy-optimize

我目前正在尝试将数据拟合到此函数以提取“e/lambda”: Formula

为此,我尝试(第一次)使用 python 拟合数据,并重新排列了拟合函数:

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

# data

Io = np.array([0.3,0.5,1.4,2.9,3.8])
Is = np.array([2.7,2.7,2.7,2.7,2.7])
R = Io/Is

T = np.array([0.,50,70,80,85])
F = R/R[0]

plt.plot(T, F, 'ro', label="original data")

# curvefit
## a = np.exp(e/lambda)

def func(T, a):
    return a * (((np.exp ((np.cos(T)-1)/(np.cos(T)))) - \
                 (np.exp ((1-np.cos(T))/((np.cos(T))**2)))) \
                / ((np.exp ((np.cos(T)-1)/(np.cos(T)))) - \
                   (np.exp ((1-np.cos(T))/((np.cos(T)))))))

popt, pcov = optimize.curve_fit(func, T, F, maxfev=100000)

t = np.linspace(0,85)
plt.plot(t, func(t, *popt), label="Fitted Curve")

plt.legend(loc='upper left')
plt.show()

但是,我收到此消息:“未找到最佳参数:函数调用次数已达到 maxfev = 100000”

这可能更像是一个数学问题,因为我已经成功地使用另一个函数尝试了这段代码:

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

Fit obtained

有谁知道是否可以使用它的“真实”形式来拟合这个函数?

谢谢!!

0 个答案:

没有答案