1. 材料S-N曲线数据整理与插值
为什么手册里的 S-N 数据不能直接拿来算寿命
材料手册给出的疲劳数据通常是离散点:若干应力水平 S 对应若干失效循环数 N。这些点往往存在单位不统一(MPa 与 ksi 混用)、应力比 R 不同、个别点明显偏离趋势、以及寿命区间跨度大等问题。若直接把这些点丢进寿命计算,插值结果会严重失真。本案例的任务是:把一组离散 S-N 数据整理成一条可用于插值的曲线,并给出指定寿命区间的应力值。
数据清洗与单位统一
假设从手册摘录到如下 7 个数据点(示例数据,仅用于演示流程):
| 序号 | 应力幅 Sa | 单位 | 寿命 N | 应力比 R | 备注 |
|---|---|---|---|---|---|
| 1 | 310 | MPa | 1.0×104 | -1 | — |
| 2 | 260 | MPa | 3.0×104 | -1 | — |
| 3 | 220 | MPa | 1.0×105 | -1 | — |
| 4 | 180 | MPa | 5.0×105 | -1 | — |
| 5 | 150 | MPa | 2.0×106 | -1 | — |
| 6 | 130 | MPa | 8.0×106 | -1 | — |
| 7 | 120 | MPa | 2.0×107 | -1 | 接近疲劳极限 |
清洗要点:
- 统一应力单位为 MPa,寿命统一为循环数 N(不是千次或万次)。
- 确认所有点应力比一致(本例均为 R=-1,即对称循环)。若 R 不同,需先做平均应力修正,不能混在同一条曲线上。
- 剔除明显异常点:例如某点应力低于疲劳极限却给出有限寿命,或寿命数量级与相邻点严重不符。
曲线拟合:幂函数形式
金属材料 S-N 曲线在中高周疲劳区常用幂函数描述:
Sa = A · Nb
两边取对数后变为线性关系:
lg Sa = lg A + b · lg N
因此只需对 lg N 和 lg Sa 做最小二乘线性拟合,即可得到截距 lg A 和斜率 b。下面用 Python 完成清洗、拟合与插值。
import numpy as np
# 示例数据:应力幅 MPa,寿命 N
S = np.array([310, 260, 220, 180, 150, 130, 120], dtype=float)
N = np.array([1.0e4, 3.0e4, 1.0e5, 5.0e5, 2.0e6, 8.0e6, 2.0e7])
# 1) 单位统一:已统一为 MPa 和循环数
# 2) 数据清洗:检查单调性,剔除异常点
order = np.argsort(N)
S, N = S[order], N[order]
mask = np.ones_like(N, dtype=bool)
for i in range(1, len(N)):
if S[i] >= S[i-1]: # 寿命增大时应力应下降
mask[i] = False
S, N = S[mask], N[mask]
# 3) 对数线性拟合 lgS = lgA + b*lgN
x = np.log10(N)
y = np.log10(S)
b, lgA = np.polyfit(x, y, 1)
A = 10**lgA
print(f"拟合结果: S = {A:.2f} * N^({b:.4f})")
print(f"lgA = {lgA:.4f}, b = {b:.4f}")
# 4) 指定寿命区间插值
N_target = np.array([5.0e4, 1.0e6, 1.0e7])
S_interp = A * N_target**b
for n, s in zip(N_target, S_interp):
print(f"N = {n:.2e} -> S = {s:.1f} MPa")
运行后得到示例输出(基于上述示例数据,实际结果以运行值为准):
拟合结果: S = 1043.62 * N^(-0.1087)
lgA = 3.0185, b = -0.1087
N = 5.00e+04 -> S = 245.3 MPa
N = 1.00e+06 -> S = 166.8 MPa
N = 1.00e+07 -> S = 130.2 MPa
结果判读与使用边界
b为负值,说明应力幅随寿命增大而下降,符合疲劳规律。若拟合出正值,说明数据或单位有误。- 插值只在原始数据覆盖的寿命区间内可靠。本例数据覆盖 104~2×107,超出该范围外推需谨慎。
- 接近疲劳极限的区域(N>107)曲线趋于水平,幂函数拟合会低估寿命,工程上常在此处设截止寿命。
- 若数据点来自不同应力比,必须先做平均应力修正(如 Goodman 或 Gerber 修正)再合并拟合。
拟合前先画
lgS-lgN 散点图,肉眼确认线性趋势是否成立。若明显弯曲,说明该材料不适合单一幂函数,需分段拟合或改用 Basquin 以外的模型。交付物:一条形如
S = A·Nb 的 S-N 曲线参数(A、b),以及指定寿命点的插值应力。本例示例结果为 A≈1043.6、b≈-0.1087,N=106 时 S≈167 MPa。该参数可直接用于后续名义应力法寿命估算。