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

标准线性固体(SLS)蠕变函数绘图不符,求代码问题排查

标准线性固体(SLS)模型蠕变函数代码问题排查与修正

核心问题分析

  • 时间范围缺失:你的t从t0=15开始,漏掉了t < t0的初始阶段(此时无应力,应变应为0),无法还原参考图的完整蠕变-恢复过程。
  • 松弛时间计算错误:SLS模型的蠕变特征时间应为τ = η / E2(Kelvin并联单元的松弛时间),而非η/E1 + η/E2,这个错误直接导致蠕变/恢复速率完全偏离预期。
  • 蠕变公式逻辑错误:
    • 加载阶段(t0 < t < t1):SLS蠕变是瞬时弹性应变+粘弹性蠕变应变的叠加,你错误引入eps0构建公式,完全不符合模型的物理逻辑。
    • 卸载阶段(t > t1):你写的公式没有体现“瞬时弹性恢复+粘弹性缓慢恢复”的过程,形态完全错误。
  • 冗余参数误用:eps0是参考图公式中不存在的变量,属于错误引入,直接干扰了曲线形态。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

# 参数定义(匹配SLS模型物理意义)
t0 = 15    # 加载起始时间
t1 = 85    # 卸载时间
E1 = 10    # 串联弹簧模量
E2 = 8     # Kelvin单元弹簧模量
eta = 40   # Kelvin单元粘度(调大后蠕变/恢复过程更直观)
sigma = 20 # 施加的恒定应力

# 正确的松弛时间
tau = eta / E2

# 生成完整时间轴:覆盖初始、加载、卸载全阶段
t = np.linspace(0, 100, 200)
creep = np.zeros(len(t))

for i in range(len(t)):
    ti = t[i]
    if ti < t0:
        # 初始阶段:无应力,应变为0
        creep[i] = 0
    elif t0 <= ti < t1:
        # 加载阶段:瞬时弹性应变 + 粘弹性蠕变应变
        instantaneous_strain = sigma / (E1 + E2)
        viscoelastic_creep = (sigma / E2) * (1 - np.exp(-(ti - t0)/tau))
        creep[i] = instantaneous_strain + viscoelastic_creep
    else:
        # 卸载阶段:先计算加载结束时的总应变
        eps_t1 = sigma/(E1+E2) + (sigma/E2)*(1 - np.exp(-(t1 - t0)/tau))
        # 瞬时弹性恢复 + 粘弹性缓慢恢复
        instantaneous_recovery = sigma/(E1+E2)
        viscoelastic_recovery = (sigma/E2)*np.exp(-(ti - t1)/tau)
        creep[i] = eps_t1 - instantaneous_recovery - viscoelastic_recovery

# 绘图设置
plt.plot(t, creep)
plt.xlabel('Time')
plt.ylabel('Strain')
plt.title('Creep Function of Standard Linear Solid Model')
plt.grid(True)
plt.show()

关键说明

  • 调整eta为40是为了让蠕变和恢复的过程更明显,和参考图的视觉效果匹配;你可以根据需求微调参数。
  • 修正后的曲线特征:初始阶段应变0,加载时先跳变到瞬时弹性应变再缓慢上升,卸载时先跳变下降再缓慢趋近于0,完全符合SLS模型的蠕变-恢复行为,与参考图形态一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:15:55