You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将流变学数据拟合至Carreau-Yasuda模型时scipy curve_fit效果不佳求助

Carreau模型拟合优化方案
  • 精准设置参数初始猜测
    Carreau模型的5个参数都有明确物理意义,别凭感觉瞎猜:

    • $\eta_0$:取剪切率最小时的实测粘度值
    • $\eta_\infty$:取剪切率最大时的实测粘度值
    • $\lambda$:特征时间,用剪切率中间值的倒数估算,或者先做幂律拟合后反推
    • $n$:直接用幂律拟合得到的幂律指数
    • $a$:经典模型里固定为2,若要拟合,初始值设为2就行
  • 放弃对数线性化,改用加权非线性拟合
    对数变换会放大低粘度数据的权重,导致高剪切区拟合偏差。直接用原始数据,给高剪切率数据加更高权重,修改curve_fit的sigma参数:

# 示例:按剪切率平方加权,提升高剪切数据的拟合权重
weights = shear_rate ** 2
sigma = 1 / weights
popt, pcov = curve_fit(carreau_model, shear_rate, viscosity, p0=initial_guess, sigma=sigma)
  • 给参数加物理约束
    Carreau参数有严格物理范围,用bounds限制避免拟合出无意义值:
# 边界示例:保证零剪切粘度大于无穷剪切粘度,幂律指数在0-1之间等
bounds = (
    [1e-3, 1e-6, 1e-5, 0.01, 1],  # 参数下界
    [1e3, 1e-1, 1e2, 0.99, 3]     # 参数上界
)
popt, pcov = curve_fit(carreau_model, shear_rate, viscosity, p0=initial_guess, bounds=bounds)
  • 先排查数据问题

    • 确认剪切率覆盖范围是否足够宽(从接近0到高剪切区间),如果数据只集中在中间段,两端的$\eta_0$和$\eta_\infty$根本没法准确拟合
    • 检查异常值:用残差图或箱线图找出偏离过大的测量点,比如突然跳变的粘度值,先剔除再拟合
  • 换用更鲁棒的拟合算法
    如果curve_fit的LM算法对噪声敏感,改用scipy.optimize.minimize自定义损失函数,比如用L1绝对误差替代平方误差,对异常值耐受性更强:

from scipy.optimize import minimize

def carreau_loss(params, shear_rate, viscosity):
    eta0, etainf, lam, n, a = params
    pred = etainf + (eta0 - etainf) * (1 + (lam * shear_rate)**a)**((n-1)/a)
    return np.sum(np.abs(pred - viscosity))  # L1损失,鲁棒性优于默认的L2

initial_guess = [eta0_guess, etainf_guess, lam_guess, n_guess, 2]
result = minimize(carreau_loss, initial_guess, args=(shear_rate, viscosity), bounds=bounds)
popt = result.x

内容的提问来源于stack exchange,提问作者Aran Klair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 09:13:34