简介程尧舜、同济版《弹性力学基础》的课后习题解答pdf面向土木、机械、力学等专业本科生及考研复习者用于对照教材巩固张量代数与弹性力学基本概念。整个压缩包仅含1个PDF文件约1.82MB篇幅集中、便于在手机或平板上随时翻阅。内容围绕教材第二章展开从2.1到2.12逐题给出计算或证明过程包括张量乘积与偏微分运算、张量对称性证明、三矢量与四矢量的点乘叉乘恒等式、绕z轴旋转的坐标变换、二阶张量在新坐标系下的分量变换、n阶张量判定、迹与单位张量的关系、矢量与张量点积叉积的转置性质以及对称与反对称分解、特征值和特征矢量求解等解答步骤完整关键推导有中间式可循。目前已有677人学习适合作为课后自测、期末复习和考研专业课演算的参考。对张量指标运算尚不熟悉的读者可借这些例题理清哑标、置换张量与坐标变换系数等易错点逐步补齐弹性力学所需的数学基础。1. 弹性力学基础课后习题解答的四个真实卡点弹性力学的课后题和刷编程题不一样答案抄对一遍没用第二天换个坐标系照样推不出来。《弹性力学基础》程尧舜同济的习题大致分三类平面问题的应力函数法、极坐标与轴对称问题、以及能量原理下的近似解法。很多人抱着课后习题解答 PDF 一行行往下看看的时候觉得顺理成章合上资料卡在待定系数为什么这么取这一步再往下连边界条件回代都不会写。真正卡人的地方就四处。应力函数满足双调和方程只是必要条件不回代边界条件等于没做极坐标平衡方程的形式是换元换出来的系数记错一次整题报废解析解和有限元结果对不上时分不清是推导错还是平面应力、平面应变选错了最后几百页的解答 PDF 翻起来比翻书还慢想找厚壁圆筒那道题得从头拖到尾。下面几章把这几件事逐个拆成能跑起来的脚本、能直接抄的检查表和参数取值。2. 用 SymPy 校验《弹性力学基础》平面问题的应力函数解答2.1 双调和方程的最小验证脚本平面问题在体力为零或体力为常量的前提下应力分量可以从一个应力函数 φ 的二阶偏导得到σx ∂²φ/∂y²σy ∂²φ/∂x²τxy -∂²φ/∂x∂y。这个形式天然满足平衡方程代价是把问题全部压到协调方程上于是 φ 必须满足双调和方程 ∇⁴φ ∂⁴φ/∂x⁴ 2∂⁴φ/∂x²∂y² ∂⁴φ/∂y⁴ 0。课后题里绝大多数多项式形式的答案第一步都能用符号计算直接判掉。我一般先跑这段import sympy as sp x, y sp.symbols(x y, realTrue) A, B, C, D sp.symbols(A B C D, realTrue) # 常见课后题形式三次多项式应力函数 phi A*x**3 B*x**2*y C*x*y**2 D*y**3 # 双调和算子逐项求四阶导再相加 bih (sp.diff(phi, x, 4) 2*sp.diff(phi, x, 2, y, 2) sp.diff(phi, y, 4)) print(nabla^4 phi , sp.simplify(bih)) # 三次多项式恒为 0 # 反推应力分量注意 tau_xy 前有负号 sx sp.diff(phi, y, 2) sy sp.diff(phi, x, 2) txy -sp.diff(phi, x, y) print(sx, sy, txy)这段脚本的逻辑很直白sp.diff(phi, x, 2, y, 2)表示先对 x 求两阶再对 y 求两阶顺序不影响结果但写错阶次会让结果看起来像双调和方程不成立。参数上realTrue让 SymPy 不用考虑复共轭分支输出的化简结果干净很多。三次及以下的多项式代入后必然得 0这只能说明这个形式有资格当应力函数离正确答案还差得远。提示如果simplify出来的结果里还挂着 A、B 这些符号说明你选的 φ 阶次偏高但约束不足先去检查是不是漏了边界条件带来的方程。2.2 边界条件回代与待定系数判定双调和只是入场券。真正决定 A、B、C、D 的是边界上的面力条件矩形域的边界法向要么是 x 方向要么是 y 方向代入后就是很干脆的代数方程。常见的对应关系可以先记一张表考试和写代码时都能省不少时间。应力函数 φ 形式应力场特征典型题型待定系数个数A·y²σx 2A 为常值单向拉伸、纯弯梁1B·x·yτxy -B 为常值纯剪、剪切板1A·x³ D·y³σx、σy 沿高度线性分布悬臂梁、简支梁2A·x³ B·x²y C·xy² D·y³线性组合覆盖多种线性载荷均布载荷下的深梁4极坐标下 r²、ln r、r²ln r轴对称应力厚壁圆筒、旋转圆盘4回代时最容易漏的是面力符号约定。以矩形域右侧边界法向沿 x为例面力分量等于该点应力分量本身换到左侧边界法向沿 -x两个分量都要变号。写脚本时我习惯用显式代入而不是肉眼比对# 右侧边界 x L法向 xFx sx, Fy txy L sp.symbols(L, positiveTrue) bc_right_Fx sp.simplify(sx.subs(x, L)) bc_right_Fy sp.simplify(txy.subs(x, L)) # 左侧边界 x 0法向 -xFx -sx, Fy -txy bc_left_Fx sp.simplify(-sx.subs(x, 0)) bc_left_Fy sp.simplify(-txy.subs(x, 0)) # 把边界上的实际面力写成表达式解代数方程组 eqs [bc_left_Fx, bc_left_Fy, bc_right_Fx, bc_right_Fy] print([sp.solve(e, [A, B, C, D], dictTrue) for e in eqs if e.free_symbols])subs把边界坐标代进去之后free_symbols用来过滤掉恒等于零的方程——这类空方程如果混进solveSymPy 会直接返回空解集看起来像无解其实只是那四条边界里有一条没给力。剪力边界的处理经常需要用到圣维南原理把分布复杂的剪力简化成合力相同的等效分布这一步在课后题里几乎必考判断依据是距离加载端足够远。2.3 多连域与位移单值条件带孔板、圆环这类多连域是失分重灾区。应力函数依然用双调和方程求解边界条件也满足但求位移时会发现环向位移绕一圈回来多了个常数物理上说不通。原因是多连域的位移单值条件必须单独补一条方程上去。具体做法是把应变积分成位移检查绕孔一周的闭合积分# 极坐标下环向位移的增量绕一圈应回到原值 theta, r sp.symbols(theta r, realTrue, positiveTrue) eps_theta sp.symbols(eps_theta, clssp.Function)(r, theta) # 单值条件环向位移 u_theta 对 theta 的增量在 0..2pi 上为 0 cond sp.integrate(sp.diff(eps_theta, theta), (theta, 0, 2*sp.pi)) print(sp.simplify(cond))条件成立的直观含义是材料不能重叠也不能裂开位移场必须是单值场。很多解答 PDF 在这一步直接写由位移单值条件得……中间那两行积分被跳过了复习时最好自己补上否则考场上想不起来还有这么一条。3. 极坐标与轴对称题型课后习题解答的解析流水线3.1 极坐标下的平衡方程与应力函数改写平面问题换到极坐标平衡方程变成 ∂σr/∂r (1/r)∂τrθ/∂θ (σr - σθ)/r 0 和 (1/r)∂σθ/∂θ ∂τrθ/∂r 2τrθ/r 0。这两条里的 1/r 和 2/r 是直角坐标换元换出来的不是人为凑的系数记错一个符号整道题的应力分布就变成发散或反向。对应的应力函数关系是σr (1/r)∂φ/∂r (1/r²)∂²φ/∂θ²σθ ∂²φ/∂r²τrθ -(1/r)∂²φ/∂r∂θ (1/r²)∂φ/∂θ。双调和方程在极坐标下写成 ∇⁴φ 0其中 ∇² ∂²/∂r² (1/r)∂/∂r (1/r²)∂²/∂θ²。轴对称情形下所有量不随 θ 变化φ 只跟 r 有关双调和方程退化成一个欧拉方程通解是 φ A·ln r B·r²ln r C·r² D。这四个常数正是厚壁圆筒、旋转圆盘、带孔板这几类题的公共骨架。用 SymPy 验一遍通解比背下来靠谱import sympy as sp r sp.symbols(r, positiveTrue) A, B, C, D sp.symbols(A B C D) phi A*sp.log(r) B*r**2*sp.log(r) C*r**2 D lap sp.diff(phi, r, 2) sp.diff(phi, r)/r # 极坐标拉普拉斯算子 bih sp.diff(lap, r, 2) sp.diff(lap, r)/r print(sp.simplify(bih)) # 应当为 0注意positiveTrue这个声明不能省否则 SymPy 会在 ln r 和 r 的符号上纠缠很久还得不出零。算出来是 0说明这四个基函数的任意线性组合都能当轴对称应力函数用。3.2 厚壁圆筒 Lamé 解的参数化复核厚壁圆筒内外半径 a、b内压 p1、外压 p2是极坐标轴对称题的模板。把通解代入应力表达式再用内外表面的法向应力条件定常数得到量表达式说明σra²b²(p2-p1) / [r²(b²-a²)] (a²p1 - b²p2)/(b²-a²)ra 处等于 -p1σθ-a²b²(p2-p1) / [r²(b²-a²)] (a²p1 - b²p2)/(b²-a²)与 σr 同常数项σr σθ2(a²p1 - b²p2)/(b²-a²)与 r 无关可当自检项ur平面应变(1ν)/E · [ (1-2ν)(a²p1 - b²p2)r/(b²-a²) - a²b²(p1-p2)/(r(b²-a²)) ]平面应力时替换 ν→ν/(1ν)、E→E(12ν)/(1ν)²自检项 σr σθ 与 r 无关这一条非常有用。课后算完直接查一遍只要 r 还留在结果里就说明常数项定错了或者某个 r² 项没约掉。平面应力和平面应变的位移公式只差一组弹性常数替换很多人对答案时发现位移差了百分之几十八成是这一步没换。用脚本复核内外边界最省事p1, p2, E, nu sp.symbols(p1 p2 E nu, positiveTrue) a, b sp.symbols(a b, positiveTrue) sr a**2*b**2*(p2-p1)/(r**2*(b**2-a**2)) (a**2*p1 - b**2*p2)/(b**2-a**2) st -a**2*b**2*(p2-p1)/(r**2*(b**2-a**2)) (a**2*p1 - b**2*p2)/(b**2-a**2) print(sp.simplify(sr.subs(r, a))) # 期望 -p1 print(sp.simplify(sr.subs(r, b))) # 期望 -p2 print(sp.simplify(sr st)) # 期望与 r 无关外压为零时 σθ 在内壁达到最大值 (b²a²)p1/(b²-a²)这个值随 b/a 增大而趋近 p1这就是厚壁容器应力沿壁厚趋于均匀的量化说法也是课后题常问的一句为什么。3.3 圆孔应力集中与量纲检查带小圆孔的无限大板受单向拉伸 σ0孔边环向应力 σθ σ0/2·(1 a²/r²) - σ0/2·(1 3a⁴/r⁴)·cos2θ。在 θ ±90°、r a 处取得 3σ0这就是应力集中系数 3 的来源。代入时有两个高频错误一是把 cos2θ 的系数和第一项混在一起二是忘了 r a 时 a²/r² a⁴/r⁴ 1。量纲检查是收尾动作。应力量纲与 σ0 一致位移量纲要带上长度。用 SymPy 的sp.physics.units或者干脆手工给符号挂上量纲把 E 设为 Pa、长度设为 m最后检查 ur 的单位是不是 m。课后对答案时发现自己算出的位移是应力的量级基本可以断定少乘了一个长度因子通常是漏了 r 或 a。4. 拿有限元给课后习题解答做交叉验证4.1 弱形式与网格收敛性解析解推导对不对最稳的办法是拿有限元独立算一遍。平面应力的弱形式由虚功原理得到∫Ω (δε)ᵀ D (ε) dΩ ∫Γ t·δu dΓ其中 D 在平面应力下是 E/(1-ν²)·[[1, ν, 0], [ν, 1, 0], [0, 0, (1-ν)/2]]。规则矩形域上用双线性四边形单元Q4就够每个单元 2×2 高斯积分点。下面这段装配核心逻辑可以直接用import numpy as np def D_plane_stress(E, nu): return E/(1-nu**2)*np.array([[1, nu, 0], [nu, 1, 0], [0, 0, (1-nu)/2]]) def quad_ke(xy, D, t1.0): # xy: 4x2 节点坐标逆时针排列 g 1/np.sqrt(3) Ke np.zeros((8, 8)) for xi, eta in [(-g,-g), (g,-g), (g,g), (-g,g)]: N 0.25*np.array([(1-xi)*(1-eta), (1xi)*(1-eta), (1xi)*(1eta), (1-xi)*(1eta)]) dN 0.25*np.array([[-(1-eta), (1-eta), (1eta), -(1eta)], [-(1-xi), -(1xi), (1xi), (1-xi)]]) J dN xy # 雅可比矩阵 detJ np.linalg.det(J) # 必须为正否则单元编号反了 dNxy np.linalg.solve(J, dN) B np.zeros((3, 8)) B[0, 0::2] dNxy[0]; B[1, 1::2] dNxy[1] B[2, 0::2] dNxy[1]; B[2, 1::2] dNxy[0] Ke B.T D B * detJ * t return KedetJ为负是新手最常见的报错来源说明单元四个节点的排列方向错了画出来是麻花而不是矩形。B 矩阵按自由度交错填充x 方向自由度在偶数位y 方向在奇数位这是 Q4 单元的约定。收敛性验证的做法是固定长宽比把网格从 4×4 加密到 64×64看端部挠度和最大应力是否单调逼近解析解。理想情况下位移是 O(h²) 收敛应力因为要再做一次求导会掉到 O(h)应变能则更快。4.2 解析解与有限元结果的对账表对账不要只看一个数字我一般整理成一张表把网格尺寸、自由度数、端部挠度、位移相对误差、最大应力放在一起网格自由度数端部挠度 (mm)相对解析解误差最大 σx (MPa)8×81624.823.6%118.416×165784.941.2%122.732×3221784.980.4%124.164×6484504.990.2%124.6误差随网格单调下降、没有跳变说明装配和边界条件没问题。如果误差卡在某个值不降先怀疑约束施加方式点约束会引入局部应力集中最好在固定端用多点约束或对称面约束替代单点固定。如果最大应力一直在涨说明单元太粗应力集中点需要局部加密。4.3 三个高频坑平面应力、平面应变与量纲第一个坑是平面应力与平面应变混用。薄板用平面应力D 前面挂 1/(1-ν²)长柱体或挡土墙按平面应变用 E/(1ν)(1-2ν) 和 ν/(1-ν)。同一道题换错模型位移能差 30% 以上而对答案时只看到结果偏大偏小很容易误判成推导错误。第二个坑是泊松比取值。教材例题常取 0.25 或 0.3自己写脚本时如果随手填 0.33跟解答 PDF 对不上很正常。建议在脚本顶部统一写E, nu 200e3, 0.3这类常量别在函数里散落硬编码。第三个坑是量纲。有限元里长度用 mm、模量用 MPa密度和重力加速度一混进来就乱套。做纯弹性静力问题时不涉及重力但一旦加上体力项体力的单位必须是 N/mm³而不是 N/m³差 10⁹ 倍。注意解析解和有限元结果相差超过 5% 时先排查量纲和弹性常数再排查边界条件最后才怀疑推导。顺序反了会浪费大量时间在正确的公式上找错误。5. 把课后习题解答 PDF 切成可检索的个人题库翻几百页 PDF 找某类题效率低得离谱。一个更实际的做法是把解答 PDF 抽成文本、按题号切块、塞进 SQLite 的 FTS5 全文索引之后用一条 SQL 就能检索厚壁圆筒或应力函数相关的所有题。抽取用 PyMuPDF按页取文本后正则切分题号。常见的题号形式有2-1、3.4、习题 4.7几种写成一个宽松的正则匹配import fitz, re, sqlite3, pathlib doc fitz.open(弹性力学基础_课后习题解答.pdf) raw [p.get_text(text) for p in doc] # 题号形如 2-1 / 3.4 / 习题 4.7允许前后有空白 pat re.compile(r(?:习题\s*)?(\d{1,2})\s*[-.]\s*(\d{1,2})) items, cur [], None for page in raw: for line in page.splitlines(): m pat.match(line.strip()) if m: # 新题开始 if cur: items.append(cur) cur {no: f{m.group(1)}-{m.group(2)}, text: } elif cur: # 正文续接到当前题 cur[text] line \n if cur: items.append(cur) con sqlite3.connect(elastic_index.db) con.execute(CREATE VIRTUAL TABLE IF NOT EXISTS sol USING fts5(no, body, tokenizetrigram)) con.executemany(INSERT INTO sol(no, body) VALUES (?, ?), [(it[no], it[text]) for it in items]) con.commit()tokenizetrigram这个参数是中文检索的关键。SQLite 默认的分词器按空格和标点切词中文整段会被当成一个词搜应力函数匹配不到任何东西trigram 按三字符滑窗建索引中文短语能被正确命中代价是索引体积大约翻两三倍对几百页的习题集完全在可接受范围内。建好索引之后检索就变成一句 SQL-- 查所有讲到应力函数且提到极坐标的题 SELECT no, snippet(sol, 1, [, ], …, 12) FROM sol WHERE sol MATCH 应力函数 AND 极坐标 ORDER BY no;snippet()返回命中位置附近的一小段原文参数依次是表名、列号、命中词包裹符、省略号、片段长度比把整段解答打出来好用得多。字段设计上除了题号和正文我建议再加三列冗余标记chapter章节号、tags用逗号分隔的关键词比如厚壁圆筒,轴对称,Lamé、verified是否已经用第 2、4 章的脚本核验过。标签由自己在整理时填比让正则去猜题型靠谱得多。字段类型用途noTEXT题号主检索键bodyTEXT解答正文参与 FTS5 索引chapterTEXT章号用于按章节批量复习tagsTEXT题型标签如应力函数多连域平面应变verifiedINTEGER是否通过 SymPy 或有限元交叉验证一个实际用法是把verified 0的题筛出来按标签排序优先处理多连域和平面应变这两类错误率最高的题型。把第 2 章的符号校验脚本和第 4 章的有限元模型接上去每道题跑一遍、回填verified一份八十几道题的习题集大概两个晚上可以全部过一遍。以后再遇到新的教材或新的版本同一套流水线换个 PDF 路径就能复用索引里的题型标签和验证标记也能跟着迁移。本文还有配套的精品资源点击获取