课程摘要
本节通过材料与截面积联合筛选项目,整合参数记录、有限元计算、约束判断和报告生成。采用三组教学材料参数与三种截面积,逐一计算位移、应力和质量,寻找候选集内最轻可行方案;再将载荷提高20%,检查原结论是否仍成立。课程强调参数来源、单位一致、计算验收和失败记录,并用连续截面积分析说明离散最优的边界,为结业成果整理做好准备。
一、综合项目从一个明确问题开始
上一节建立了可检查的工具调用入口。本节把材料记录、参数扫描、有限元验收和报告生成连接起来,完成一个小型研究:
在相同杆长和拉力下,从给定材料与截面积中,选择满足位移和应力要求的最轻方案。
这里包含三个要素:
- **目标:**质量尽可能小;
- **约束:**位移和应力不能超限;
- **设计空间:**给定材料与截面积的组合。
只有把这些条件明确下来,方案比较才有依据。
本节材料参数为课程自编教学值。`steel、aluminum、titanium`是教学标签,不对应真实材料牌号、加工状态或温度条件。
计算实际采用纯Python两单元一维杆有限元程序,复用第68节的校验与求解逻辑。
二、先写任务书,再开始计算
1. 几何与载荷
取:
\ L=1000\\ \\mathrm{mm} \\\ F=10000\\ \\mathrm{N} \\
杆为均匀截面,左端轴向固定,右端承受正向拉力,采用小变形线弹性模型。
划分两个等长单元,每个单元长度500 mm。
截面积候选为:
\ A\\in\\{80,\\ 100,\\ 120\\}\\ \\mathrm{mm\^2} \\
2. 材料记录
| 教学标签 | 弹性模量E / MPa | 屈服应力 / MPa | 密度 / kg·m⁻³ |
|---|---|---|---|
| steel | 210000 | 250 | 7850 |
| aluminum | 70000 | 150 | 2700 |
| titanium | 110000 | 300 | 4500 |
这些数值保存于 materials.json,同时记录教学来源声明和版本。
如果以后替换为真实材料,需要补充牌号、状态、温度、试验或数据库来源及适用范围。
3. 优化目标与约束
目标是最小化质量:
\ \\min m=\\rho AL \\
同时满足:
\ u_{\\mathrm{tip}}\\le1\\ \\mathrm{mm} \\\ \\sigma_{\\max}\\le0.6\\sigma_y \\
其中,0.6是本课设置的许用比例,不是引用某项设计规范得到的安全系数。
本节没有检查疲劳、连接、局部应力、腐蚀、温度影响或压缩屈曲。
三、单位检查:力学计算与质量计算并不使用同一组长度单位
位移和应力计算采用N--mm--MPa单位制:
\ 1\\ \\mathrm{MPa}=1\\ \\mathrm{N/mm\^2} \\
密度采用kg/m³,因此质量计算前需要转换:
\ A_{\\mathrm{m\^2}} = A_{\\mathrm{mm\^2}}\\times10\^{-6} \\\ L_{\\mathrm m} = L_{\\mathrm{mm}}\\times10\^{-3} \\
于是:
\ m= \\rho \\left(A_{\\mathrm{mm\^2}}\\times10\^{-6}\\right) \\left(L_{\\mathrm{mm}}\\times10\^{-3}\\right) \\
以titanium、100 mm²为例:
\ m = 4500\\times100\\times10\^{-6}\\times1 = 0.450\\ \\mathrm{kg} \\
如果直接把100和1000代入密度为kg/m³的表达式,质量会出现严重错误。
单位检查应发生在计算程序里,不能只依赖报告文字。
四、把一次计算扩展为九个工况
三组材料与三种面积组合,得到:
\ N=3\\times3=9 \\
每个工况采用相同流程:
\ \\text{读取材料} \\rightarrow \\text{生成参数} \\rightarrow \\text{输入校验} \\rightarrow \\text{有限元计算} \\rightarrow \\text{数值验收} \\rightarrow \\text{设计约束判断} \\
本节直接调用第68节的 execute 函数。每个工况均由程序生成自己的已确认参数,工具的几何和本构范围保持明确。
两种"通过"必须分开
数值验收检查计算是否符合当前方程和容差,包括残差、平衡及解析解比较。
设计约束检查位移和应力是否满足任务要求。
两者并不相同:
| 状态 | 含义 |
|---|---|
| 数值验收通过,设计可行 | 计算和设计约束均通过 |
| 数值验收通过,设计不可行 | 数值有效,但位移或应力超限 |
| 工具运行失败 | 没有可接受的计算结果,需要排查 |
例如,titanium、80 mm²可以通过数值验收,但位移超过1 mm,因此不能被选中。
算得正确,不等于满足设计要求。
五、九个方案的实际计算结果
| 材料 | A / mm² | 位移 / mm | 应力 / MPa | 质量 / kg | 结论 |
|---|---|---|---|---|---|
| steel | 80 | 0.595238 | 125.000000 | 0.628 | 可行 |
| steel | 100 | 0.476190 | 100.000000 | 0.785 | 可行 |
| steel | 120 | 0.396825 | 83.333333 | 0.942 | 可行 |
| aluminum | 80 | 1.785714 | 125.000000 | 0.216 | 位移、应力超限 |
| aluminum | 100 | 1.428571 | 100.000000 | 0.270 | 位移、应力超限 |
| aluminum | 120 | 1.190476 | 83.333333 | 0.324 | 位移超限 |
| titanium | 80 | 1.136364 | 125.000000 | 0.360 | 位移超限 |
| titanium | 100 | 0.909091 | 100.000000 | 0.450 | 可行 |
| titanium | 120 | 0.757576 | 83.333333 | 0.540 | 可行 |
九个工况均通过数值验收,其中五个满足两项设计约束。
表中显示值经过舍入,程序按未舍入数值判断。
【插图1:质量与位移的方案比较】

横轴越靠左,方案越轻;纵轴越低,位移越小。
但可行性还包含应力约束,不能仅凭点在1 mm虚线下方就接受方案。
aluminum的三个方案虽然较轻,却不满足本题的位移要求。这不能被概括为"铝不适合轻量化",因为结论受到截面积候选范围限制。
六、用约束利用率解释"为什么不行"
定义位移利用率:
\ r_u = \\frac{u_{\\mathrm{tip}}}{1\\ \\mathrm{mm}} \\
应力利用率:
\ r_\\sigma = \\frac{\\sigma_{\\max}}{0.6\\sigma_y} \\
两者都不超过1,才满足当前约束。
程序使用 \(10^{-10}\) 的无量纲比较容差处理浮点边界。它是数值比较设置,不是设计裕量。
【插图2:逐项检查约束利用率】

以aluminum、120 mm²为例:
\ r_u=1.190476\>1 \\\ r_\\sigma = \\frac{83.333333}{0.6\\times150} \\approx0.925926\<1 \\
该方案的主要问题是位移超限,而非应力超限。
这能指导下一步研究:考虑扩大截面、缩短长度或调整材料,而不是笼统地说"仿真失败"。
七、怎样得到最轻可行方案?
正确顺序是:
- 保留数值验收通过的工况;
- 保留同时满足位移与应力约束的工况;
- 在这些工况中比较质量。
得到:
\ \\text{material}=\\text{titanium} \\\ A=100\\ \\mathrm{mm\^2} \\\ m=0.450\\ \\mathrm{kg} \\\ u_{\\mathrm{tip}}=0.909091\\ \\mathrm{mm} \\\ \\sigma=100\\ \\mathrm{MPa} \\
其许用应力为:
\ 0.6\\sigma_y = 0.6\\times300 = 180\\ \\mathrm{MPa} \\
应当这样表述:
在本节三组教学材料、三种截面积、10000 N拉力和两项约束下,titanium、100 mm²是当前离散候选集中最轻的可行方案。
这里限定了参数来源、载荷、约束和候选范围。
八、动手运行:从输入到研究结果包
1. 准备文件
解压课程包,将以下文件保存在同一目录:
lesson69_study.py
lesson68_tools.py
materials.json
计算部分只依赖Python标准库。
完整主程序已放在讲义附录,求解器依赖也随包提供。
2. 先执行自测
python lesson69_study.py --self-test
预期输出:
SELF_TEST=PASS (nine cases, constraints, load scaling, empty set and failure retention)
自测检查九个组合、约束筛选、载荷比例关系、无可行方案和失败记录保留。
它不代表真实材料参数经过验证。
3. 生成研究结果
python lesson69_study.py --out lesson69_run
预期输出:
BASELINE: F=10000 N; cases=9; verified=9; feasible=5
best=titanium; A=100 mm2; mass=0.450 kg; u=0.909091 mm; stress=100.000000 MPa
LOAD_PLUS_20_PERCENT: F=12000 N; cases=9; verified=9; feasible=4
best=titanium; A=120 mm2; mass=0.540 kg; u=0.909091 mm; stress=100.000000 MPa
MODE=TEACHING_MATERIALS; method=PYTHON_1D_FEM; llm_run=False; DFT_run=False
SAVED=study.json, baseline.csv, load_plus_20_percent.csv, report.md
输出目录必须尚不存在。重复运行时更换 --out,以保留原记录。
4. 检查输出文件
| 文件 | 保存内容 |
|---|---|
study.json |
输入、材料版本、完整工具结果、检查和失败原因 |
baseline.csv |
基准载荷下的九行方案表 |
load_plus_20_percent.csv |
载荷增加20%后的九行方案表 |
report.md |
自动整理的教学结果摘要 |
程序还记录输入材料文件、主程序和求解器文件的SHA-256摘要,帮助核对复现时使用的版本。
摘要用于识别文件变化,不能证明材料来源真实。
5. 重绘正文图
安装绘图库后:
python -m pip install matplotlib
python plot_lesson69.py
预期输出:
FIGURES=3; SOURCE=REFERENCE_STUDY_JSON; materials=SYNTHETIC
绘图脚本默认读取随包的 reference_run/study.json。如果修改研究输入,应明确调整绘图数据路径,避免把旧图用于新结论。
九、载荷增加20%,原方案还成立吗?
保持材料、长度和截面积不变:
\ F'=1.2F=12000\\ \\mathrm{N} \\
在线性模型中:
\ u'=1.2u \\\ \\sigma'=1.2\\sigma \\
原titanium、100 mm²方案变为:
\ u'=1.2\\times0.909091 = 1.090909\\ \\mathrm{mm} \\\ \\sigma'=120\\ \\mathrm{MPa} \\
虽然应力仍低于180 MPa,但位移超过1 mm,原方案失去可行性。
重新扫描后,九个候选中有四个可行,最轻的是titanium、120 mm²:
\ m=0.540\\ \\mathrm{kg} \\\ u=0.909091\\ \\mathrm{mm} \\\ \\sigma=100\\ \\mathrm{MPa} \\
【插图3:载荷变化与重新筛选】

基准方案与重选方案的位移相同,是因为载荷与面积都增加20%,使 \(F/A\) 和 \(FL/(EA)\) 保持不变。
质量增加20%来自截面积增大。若几何不变,载荷增大本身不会改变质量。
这只是单因素情景检查,尚未纳入材料离散性、制造公差或多种载荷组合。
十、进一步思考:连续选择面积,结果会不会改变?
原任务只允许80、100、120 mm²。
如果允许面积连续变化,由位移约束:
\ A\\ge A_u = \\frac{FL}{Eu_{\\max}} \\
由应力约束:
\ A\\ge A_\\sigma = \\frac{F}{0.6\\sigma_y} \\
所以:
\ A_{\\min} = \\max(A_u,A_\\sigma) \\
基准载荷下得到解析参考:
| 材料 | 位移所需A / mm² | 应力所需A / mm² | 最小A / mm² | 对应质量 / kg |
|---|---|---|---|---|
| steel | 47.619 | 66.667 | 66.667 | 0.523333 |
| aluminum | 142.857 | 111.111 | 142.857 | 0.385714 |
| titanium | 90.909 | 55.556 | 90.909 | 0.409091 |
在放开原面积集合后的理想化问题中,aluminum反而具有更低质量。
但142.857 mm²不属于原候选集合,不能拿它冒充原任务中的可选方案。
这不是原结果算错,而是设计空间改变了。
连续面积结果保存在 study.json,并明确标记为解析参考,不是额外有限元扫描或智能优化结果。
十一、大模型、知识库和DFT应该放在哪一层?
| 环节 | 可以承担的工作 | 仍需核对 |
|---|---|---|
| 大模型 | 澄清目标、组织任务、解释结果 | 参数忠实性和文字结论 |
| 知识库 | 提供出处、单位和适用条件 | 数据版本与工况 |
| DFT | 在适当条件下贡献弹性参数等信息 | 收敛、张量约定、取向与尺度 |
| 有限元工具 | 执行规定模型 | 残差、平衡和参考解 |
| 筛选程序 | 判断约束并排序 | 阈值、单位和候选覆盖 |
本节三个材料标签没有经过DFT计算。理想晶体弹性张量也不能直接给出真实合金的宏观屈服、疲劳和加工状态数据。
本节报告由确定性程序生成。后续若接入大模型,应保留真实响应,并核对其解释是否符合原始结果。
十二、如果没有可行方案,怎么办?
可以尝试:
python lesson69_study.py --force 50000 --out lesson69_highload
这组练习中,两组载荷均没有可行候选,程序输出:
best=NONE
此时应讨论扩大设计空间、改变结构或调整任务,而不是仍从不合格方案中选一个"最优"。
还要区分:
- **没有可行方案:**约束或设计空间需要讨论;
- **工具运行失败:**输入或计算过程需要排查。
失败案例应保留,不能删除后再报告"全部成功"。
十三、研究结论怎样写?
可以采用下面的表述:
基于三组自编教学材料参数与三种截面积,完成九个均匀拉杆方案的两单元一维有限元计算。10000 N载荷下,九个工况均通过数值检查,五个满足位移和许用应力约束,其中titanium、100 mm²方案质量最低,为0.450 kg。载荷提高20%后,原方案位移超限;重新筛选得到titanium、120 mm²方案,质量0.540 kg。结论限定于本模型、参数来源和离散候选范围。
报告需要保留不可行方案及排除理由,不能只展示最终结果。
十四、课后练习与结业准备
练习1:为什么aluminum、80 mm²虽然最轻,却没有被选中?
参考答案:位移和应力均超限,不能只按质量排序。
练习2:数值验收通过、设计不可行,是否矛盾?
参考答案:不矛盾,计算正确与满足约束是两层判断。
练习3:载荷增加20%,质量会自动增加20%吗?
参考答案:几何不变时质量不变。本节重选后的质量变化来自面积增加。
练习4:连续面积参考中aluminum更轻,是否推翻离散结果?
参考答案:没有,两者设计空间不同,需要分别说明条件。
练习5:替换真实材料前,要补充哪些信息?
参考答案:牌号、状态、温度、试验或数据库来源、适用范围及版本,并重新计算。
