【问题标题】:Fit function to experimental data using curve_fit with two independent variables使用带有两个自变量的 curve_fit 将函数拟合到实验数据
【发布时间】:2019-04-27 22:50:14
【问题描述】:

我想为我的实验数据集拟合一条曲线,但我真的不知道该怎么做。我一直在寻找可能性,我遇到了curve_fit(还有least_suqares),这似乎可以胜任这项任务,但我仍然非常不熟悉它的工作原理,因为我很难进入我厚厚的脑袋。我通过定义初始值开始了我的尝试:

import numpy as np
import math
from scipy.optimize import curve_fit, least_squares

f_exp = np.array([1, 1.6, 2.7, 4.4, 7.3, 12, 20, 32, 56, 88, 144, 250000])
e_exp = np.array([7.15, 7.30, 7.20, 7.25, 7.26, 7.28, 7.32, 7.25, 7.35, 7.34, 7.37, 13.55])

n_e_exp = len(e_exp)

ezero     = 7.15
einf      = 13.55
fc        = np.arange(1,11000,1000)
alpha     = np.arange(0,1.1,0.1)

log_f_mod = np.arange(-3, 6.5, 0.5)
f_mod     = 10 ** log_f_mod

n_f_mod   = len(f_mod)
n_fc      = len(fc)
n_alpha   = len(alpha)  

x         = np.zeros((n_f_mod, n_fc))
for j in range(n_f_mod):
        for k in range(n_fc):
            x[j,k] = np.log(f_mod[j] / fc[k])

注意xfc 的函数。现在,我使用curve_fitleast_squares 或其他更合适的函数来定义我想要运行的函数:

def c_c_eRI(einf, ezero, alpha, x):
    eR    = einf + 1/2 * (ezero - einf) * (1 - np.sinh((1 - alpha) * x) / (np.cosh((1 - alpha) * x) + np.cos(alpha * math.pi / 2))) 
    eI    = np.abs(1/2 * (ezero - einf) * np.cos(alpha * math.pi / 2) / (np.cosh((1 - alpha) * x) + np.sin(alpha * math.pi / 2)))
    eRI   = np.sqrt(eR ** 2 + eI ** 2)
    return eRI

此时,我尝试通过以下方式使其正常工作:

fit = curve_fit(c_c_eRI, f_exp, e_exp)
  • 有没有办法使用函数(例如curve_fitleast_squares 或其他)将曲线拟合到实验数据,同时提供独立变量是 alphafcx 是其函数),用于实现拟合本身?

换句话说,我们的目标是找到alphafcx 是其函数)的值,它们提供了对f_expe_exp 的最佳拟合 类似于EXCEL 求解器通过改变alphafc 来找到最小平方残差。

最终目标是绘制f_expe_exp 以及使用matplotlib 的拟合曲线——我也有点不知所措。 p>

对于缺少更通用的示例,我深表歉意。

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    如果我正确理解了您的示例,我认为您只需将函数定义更改为

    def c_c_eRI(x, einf, ezero, alpha):
        ...
    

    来自curve_fit docsThe model function, f(x, …). It must take the independent variable as the first argument and the parameters to fit as separate remaining arguments.

    【讨论】:

    • 谢谢你,@Richard Fitzhugh。我没有提到alphafcx 是其函数)都是自变量——我一意识到就通过编辑来纠正它,对此感到抱歉,谢谢你指出出去。您是否知道我如何获得最适合的 alphafc 值?
    • 查看您的代码后,我不确定您要完成什么。在我看来,您有 1D 函数(f_exp vs e_exp)的实验数据,并且您正在尝试将此 1D 实验数据拟合到具有 2 个自变量的方程?就像在笛卡尔平面上绘制的函数一样?无法将 1D 数据拟合到 2D 函数。所以我认为要么你只有 1 个自变量,要么你正在尝试做一些不太可能的事情。
    • 如果您真的想拟合具有多个自变量的函数,here's how to do it,但您需要数据来匹配您想要拟合的数据。
    • 谢谢你,@Richard Fitzhugh。我很可能正在尝试做一些不可能的事情,而且我也很难解释我想要做什么。我认为找到最适合的 fcalpha 的值会很简单,但我想我已经超出了我的深度。
    猜你喜欢
    • 2016-01-16
    • 2016-09-16
    • 1970-01-01
    • 2012-06-07
    • 2020-05-05
    • 2017-04-11
    • 1970-01-01
    • 2020-06-12
    • 2020-07-07
    相关资源
    最近更新 更多