跳转至

第24篇

5.1.4 重复结构

振动系统常由若干相同区段重复多次组成。图5.12给出了重复结构的示例:\(n\)层剪切型建筑、\(n\)质量平移系统以及\(n\)盘扭转系统。对于此类系统,差分方程法适用于计算其固有频率。

bo_d34j0n3ef24c73b3tujg_197_281_937_1107_382_0.jpg

图5.12

\(r\)个质量块(图5.12, a)的运动方程为

\[ m{\ddot{x}}_{r} + k\left( {{x}_{r} - {x}_{r - 1}}\right) - k\left( {{x}_{r + 1} - {x}_{r}}\right) = 0 \]

对于简谐运动\({x}_{r} = {a}_{r}\sin {\omega t}\),可用振幅表示为

\[ {a}_{r + 1} - 2\left( {1 - \frac{{\omega }^{2}m}{2k}}\right) {a}_{r} + {a}_{r - 1} = 0. \]

通过代入法求解该方程

\[ {a}_{r} = {e}^{i\beta r} \]

从而得到如下关系

\[ \left( {1 - \frac{{\omega }^{2}m}{2k}}\right) = \frac{{e}^{i\beta } + {e}^{-{i\beta }}}{2} = \cos \beta , \]

也可写作

\[ \frac{{\omega }^{2}m}{k} = 2\left( {1 - \cos \beta }\right) = 4{\sin }^{2}\frac{\beta }{2}. \tag{5.18} \]

\({a}_{r}\)的通解为

\[ {a}_{r} = {C}_{1}\cos {\beta r} + {C}_{2}\sin {\beta r}, \]

其中\({C}_{1}\)\({C}_{2}\)由边界条件确定。在\(r = 0\)处,振幅为零\({a}_{0} = 0\),因此\({C}_{1} = 0\)。在自由端\(r = n\),运动方程为

\[ m{\ddot{x}}_{n} + k\left( {{x}_{n} - {x}_{n - 1}}\right) = 0 \]

在振幅方面,则变为

\[ {a}_{n - 1} = \left( {1 - \frac{{\omega }^{2}m}{k}}\right) {a}_{n}. \]

代入通解后,我们得到用于计算\(\beta\)的如下关系式:

\[ \sin \beta \left( {n - 1}\right) = \left\lbrack {1 - 2\left( {1 - \cos \beta }\right) }\right\rbrack \sin {\beta n}. \]

该结果可化简为乘积形式

\[ 2\cos \beta \left( {n + \frac{1}{2}}\right) \sin \frac{\beta }{2} = 0 \]

满足

\[ \sin \frac{\beta }{2} = 0, \]

并且通过

\[ \cos \beta \left( {n + \frac{1}{2}}\right) = 0\text{, or }\frac{\beta }{2} = \frac{\left( {{2r} - 1}\right) \pi }{2\left( {{2n} + 1}\right) }.\;\left( {r = 1,\ldots , n}\right) \]

固有频率(natural frequencies)即可由式(5.18)求得

\[ \omega = 2\sqrt{\frac{k}{m}}\sin \frac{\beta }{2} \tag{5.19} \]

导出

\[ {\omega }_{r} = 2\sqrt{\frac{k}{m}}\sin \frac{\left( {{2r} - 1}\right) \pi }{2\left( {{2n} + 1}\right) }.\;\left( {r = 1,\ldots , n}\right) \tag{5.20} \]

用差分方程法计算得到的固有频率始终由方程(5.19)给出。然而,对于每一个重复结构,量\(\beta\)必须根据相应的边界条件确定。

5.1.5 多质量-弹簧-阻尼器系统(Multi-Mass-Spring-Dashpot Systems)

在一维振动系统(one-dimensional vibrating system)中,每个质量块仅沿一个方向运动。在每个集中质量(lumped mass)处设置一个节点(node),每个节点仅有一个自由度(degree of freedom)。在固定边界处设置一个被约束的节点(blocked node)。

bo_d34j0n3ef24c73b3tujg_199_380_834_896_397_0.jpg

图5.13

图5.13所示的四质量模型(four-mass model)具有四个自由度(degrees of freedom)和五个节点(nodes)。节点位移记为\({q}_{1},{q}_{2},\ldots ,{q}_{5}\)(图5.13, b)。列向量\(\{ \bar{Q}\} = {\left\{ {q}_{1},{q}_{2},\ldots ,{q}_{5}\right\} }^{T}\)称为全局节点位移向量(global vector of nodal displacements),\(\{ \bar{F}\} = {\left\{ {f}_{1},{f}_{2},\ldots ,{f}_{5}\right\} }^{T}\)为全局节点力向量(global vector of nodal forces)。若位移或力沿正\(q\)方向作用,则取正值。此时,边界条件\({q}_{5} = 0\)尚未施加。

表5.1

Element Node 1 Node 2
1 1 2
2 2 3
3 3 4
4 4 5
5 2 4
6 3 5

六个弹簧按索引编号。每个弹簧有两个节点。单元连接信息可如表5.1所示方便表示。在连接表中,局部节点编号为1和2,而全局节点编号为\(i\)\(j\)。该表建立了局部与全局的对应关系。

参照图5.13,\(c\),局部节点力向量\(\left\{ {f}^{e}\right\} = {\left\{ {f}_{1},{f}_{2}\right\} }^{T}\)与局部节点位移向量\(\left\{ {q}^{e}\right\} = {\left\{ {q}_{1},{q}_{2}\right\} }^{T}\)的关系由方程\(\left\{ {f}^{e}\right\} = \left\lbrack {k}^{e}\right\rbrack \left\{ {q}^{e}\right\}\)给出,其中单元刚度矩阵为

\[ \left\lbrack {k}^{e}\right\rbrack = \left\lbrack \begin{matrix} {k}_{e} & - {k}_{e} \\ - {k}_{e} & {k}_{e} \end{matrix}\right\rbrack . \tag{5.21} \]

这可由平衡方程和力-变形方程建立:对\({q}_{2} = 0,{f}_{1} = - {f}_{2} = k{q}_{1}\),以及对\({q}_{1} = 0,{f}_{1} = - {f}_{2} = - k{q}_{2}\)

另一方面,全局节点力向量\(\{ \bar{F}\}\)与全局位移向量\(\{ \bar{Q}\}\)的关系由方程\(\{ \bar{F}\} = \left\lbrack \bar{K}\right\rbrack \{ \bar{Q}\}\)给出,其中\(\left\lbrack \bar{K}\right\rbrack\)为未缩减的全局刚度矩阵(unreduced global stiffness matrix)。

矩阵\(\left\lbrack \bar{K}\right\rbrack\)可通过直接刚度法(direct stiffness approach)获得。利用单元连接信息,将各单元矩阵\(\left\lbrack {k}^{e}\right\rbrack\)的项置于更大矩阵\(\left\lbrack \bar{K}\right\rbrack\)的相应位置,然后对重叠元素求和。

全局刚度矩阵的组装可通过单元应变能(strain energies)的求和来解释。

例如,弹簧3的应变能为

\[ {U}_{3} = \frac{1}{2}{\left\{ {q}^{3}\right\} }^{T}\left\lbrack {k}^{3}\right\rbrack \left\{ {q}^{3}\right\} = \frac{1}{2}\left\lfloor \begin{array}{ll} {q}_{3} & {q}_{4} \end{array}\right\rfloor \left\lbrack \begin{matrix} {k}_{3} & - {k}_{3} \\ - {k}_{3} & {k}_{3} \end{matrix}\right\rbrack \left\{ \begin{array}{l} {q}_{3} \\ {q}_{4} \end{array}\right\} . \]

将刚度矩阵扩展至系统规模,我们得到

\[ {U}_{3} = \frac{1}{2}{\left\{ \begin{array}{l} {q}_{1} \\ {q}_{2} \\ {q}_{3} \\ {q}_{4} \\ {q}_{5} \end{array}\right\} }^{T}\left\lbrack \begin{matrix} 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & {k}_{3} & - {k}_{3} & 0 \\ 0 & 0 & - {k}_{3} & {k}_{3} & 0 \\ 0 & 0 & 0 & 0 & 0 \end{matrix}\right\rbrack \left\{ \begin{array}{l} {q}_{1} \\ {q}_{2} \\ {q}_{3} \\ {q}_{4} \\ {q}_{5} \end{array}\right\} = \frac{1}{2}\left\{ \bar{Q}\right\} {}^{T}\left\lbrack {\widetilde{k}}^{3}\right\rbrack \left\{ \bar{Q}\right\} \]

其中\(\left\lbrack {\widetilde{k}}^{3}\right\rbrack\)为弹簧3的扩展刚度矩阵(expanded stiffness matrix)。

我们看到,矩阵\(\left\lbrack {\widetilde{k}}^{3}\right\rbrack\)的元素位于\(\left\lbrack \bar{K}\right\rbrack\)矩阵的第三、四行与列。当叠加弹簧应变能时

\[ U = \mathop{\sum }\limits_{e}{U}_{e} = \frac{1}{2}\{ \bar{Q}{\} }^{T}\left\lbrack \bar{K}\right\rbrack \{ \bar{Q}\} , \]

根据弹簧连接关系,\(\left\lbrack {k}^{e}\right\rbrack\)的元素被置于全局\(\left\lbrack \bar{K}\right\rbrack\)矩阵的相应位置,重叠元素直接相加,因此

\[ \left\lbrack \bar{K}\right\rbrack = \mathop{\sum }\limits_{e}\left\lbrack {\widetilde{k}}^{e}\right\rbrack \]

对于图5.13所示系统,\(a\),未缩减的全局刚度矩阵为

\[ \left\lbrack \bar{K}\right\rbrack = \left\lbrack \begin{matrix} {k}_{1} & - {k}_{1} & 0 & 0 & 0 \\ - {k}_{1} & {k}_{1} + {k}_{2} + {k}_{5} & - {k}_{2} & - {k}_{5} & 0 \\ 0 & - {k}_{2} & {k}_{2} + {k}_{3} + {k}_{6} & - {k}_{3} & - {k}_{6} \\ 0 & - {k}_{5} & - {k}_{3} & {k}_{3} + {k}_{4} + {k}_{5} & - {k}_{4} \\ 0 & 0 & - {k}_{6} & - {k}_{4} & {k}_{4} + {k}_{6} \end{matrix}\right\rbrack . \]

现在必须指定边界条件。节点5被固定,因此\({q}_{5} = 0\)应从位移向量中消除。通过从原始刚度矩阵中删除与指定或“支撑”自由度对应的行和列,得到缩减后的整体刚度矩阵。

对于图5.13所示的系统,\(a\)缩减后的整体刚度矩阵为

\[ \left\lbrack K\right\rbrack = \left\lbrack \begin{matrix} {k}_{1} & - {k}_{1} & 0 & 0 \\ - {k}_{1} & {k}_{1} + {k}_{2} + {k}_{5} & - {k}_{2} & - {k}_{5} \\ 0 & - {k}_{2} & {k}_{2} + {k}_{3} + {k}_{6} & - {k}_{3} \\ 0 & - {k}_{5} & - {k}_{3} & {k}_{3} + {k}_{4} + {k}_{5} \end{matrix}\right\rbrack . \]

与对角质量矩阵一起

\[ \left\lbrack M\right\rbrack = \left\lbrack \begin{matrix} {m}_{1} & 0 & 0 & 0 \\ 0 & {m}_{2} & 0 & 0 \\ 0 & 0 & {m}_{3} & 0 \\ 0 & 0 & 0 & {m}_{4} \end{matrix}\right\rbrack \]

用于写出自由运动方程

\[ \left\lbrack M\right\rbrack \{ \ddot{Q}\} + \left\lbrack K\right\rbrack \{ Q\} = \{ 0\} \]

并求解相应的特征值问题

\[ \left\lbrack K\right\rbrack \{ \Phi \} = {\omega }^{2}\left\lbrack M\right\rbrack \{ \Phi \} , \]

以确定无阻尼系统的真实振型。

对于包含阻尼器的系统,采用相同的方法组装整体阻尼矩阵\(\left\lbrack C\right\rbrack\)。对于图5.14所示的模型,阻尼器与弹簧采用了相同的连接方式,尽管一般情况下它们可以不同。

bo_d34j0n3ef24c73b3tujg_202_475_794_728_343_0.jpg

图5.14

整体阻尼矩阵为

\[ \left\lbrack C\right\rbrack = \left\lbrack \begin{matrix} {c}_{1} & - {c}_{1} & 0 & 0 \\ - {c}_{1} & {c}_{1} + {c}_{2} + {c}_{5} & - {c}_{2} & - {c}_{5} \\ 0 & - {c}_{2} & {c}_{2} + {c}_{3} + {c}_{6} & - {c}_{3} \\ 0 & - {c}_{5} & - {c}_{3} & {c}_{3} + {c}_{4} + {c}_{5} \end{matrix}\right\rbrack . \]

此时可写出阻尼系统的自由运动方程

\[ \left\lbrack M\right\rbrack \{ \ddot{Q}\} + \left\lbrack C\right\rbrack \{ \dot{Q}\} + \left\lbrack K\right\rbrack \{ Q\} = \{ 0\} . \]

在这种情况下,系统具有复振型。复特征值给出阻尼固有频率和模态阻尼比。具有比例阻尼的系统具有实模态向量。阻尼系统的振动将在第4.6.2节讨论,并在下一章进一步处理。

例5.7

计算图5.15所示系统的固有频率和振型。系统参数为:\({m}_{1} = {m}_{2} = \ldots = {m}_{11} = 1\mathrm{\;{kg}},{k}_{1} = {k}_{11} = {2421}\mathrm{\;N}/\mathrm{m}\)\({k}_{2} = {k}_{10} = {2989}\mathrm{\;N}/\mathrm{m},{k}_{3} = {k}_{9} = {3691}\mathrm{\;N}/\mathrm{m},{k}_{4} = {k}_{8} = {4556}\mathrm{\;N}/\mathrm{m},{k}_{5} = {k}_{7} = {5625}\mathrm{\;N}/\mathrm{m}\)\({k}_{6} = {18000}\mathrm{\;N}/\mathrm{m}\)

解:固有频率(单位:Hz)为2.74、2.95、7.24、7.80、11.47、12.13、15.00、15.62、18.49、19.32和28.57。存在成对的接近固有频率,一个对应于对称模态,另一个对应于反对称模态,这是对称结构的典型特征。

bo_d34j0n3ef24c73b3tujg_203_407_697_863_354_0.jpg

图5.15

前10阶振型如图5.16所示。

bo_d34j0n3ef24c73b3tujg_203_392_1210_874_721_0.jpg

图5.16

例5.8

对图5.17所示的15自由度系统,建立矩阵\(M, K\)\(C\),求阻尼固有频率和模态阻尼比。

bo_d34j0n3ef24c73b3tujg_204_451_670_785_523_0.jpg

图5.17

解:使用程序得到的值列于表5.2,阻尼比值已乘以100。

表5.2

Mode \(\omega_d\), Hz \(\zeta\), % Mode \(\omega_d\), Hz \(\zeta\), %
1 15.98 0.502 9 68.88 1.378
2 30.86 0.968 10 73.72 1.579
3 43.60 1.364 11 128.87 0.536
4 46.47 0.301 12 136.59 0.506
5 53.35 1.665 13 143.89 0.477
6 53.42 0.670 14 150.87 0.457
7 59.45 1.853 15 157.52 0.437
8 61.62 1.060

右侧的五个质量比其他质量小一个数量级,这导致出现五个较高的固有频率簇。由于阻尼值相对较低,阻尼固有频率近似等于无阻尼固有频率。

Matlab Demo

修订下面给出例题5.7的Demo,与原文不同的是,使用的模态对折显示,容易理解。

vibration24

clc; clear; close all;

% All masses are 1 kg
n = 11; % Number of masses
M = eye(n);

% Define stiffness values (N/m) - 按照例5.7给定参数

k1 = 2421;  % 连接m1-m2
k2 = 2989;  % 连接m2-m3
k3 = 3691;  % 连接m3-m4
k4 = 4556;  % 连接m4-m5
k5 = 5625;  % 连接m5-m6(左臂到中心)
k6 = 18000; % 连接m6到地面(中心弹簧)
k7 = 5625;  % 连接m6-m7(中心到右臂)
k8 = 4556;  % 连接m7-m8
k9 = 3691;  % 连接m8-m9
k10 = 2989; % 连接m9-m10
k11 = 2421; % 连接m10-m11

% --- Step 2 Assemble the Stiffness Matrix [K] ---
K = zeros(n, n);

% 左臂 (m1-m5): 自由端串联质量-弹簧链
% m1: 自由端,只连接到m2通过k1
K(1,1) = k1; 
K(1,2) = -k1;

% m2: 连接到m1通过k1,到m3通过k2
K(2,2) = k1 + k2; 
K(2,1) = -k1;
K(2,3) = -k2;

% m3: 连接到m2通过k2,到m4通过k3
K(3,3) = k2 + k3; 
K(3,2) = -k2;
K(3,4) = -k3;

% m4: 连接到m3通过k3,到m5通过k4
K(4,4) = k3 + k4; 
K(4,3) = -k3;
K(4,5) = -k4;

% m5: 连接到m4通过k4,到m6通过k5
K(5,5) = k4 + k5; 
K(5,4) = -k4;
K(5,6) = -k5;

% 中心质量 m6: 连接到地面通过k6,到m5通过k5,到m7通过k7
K(6,6) = k5 + k6 + k7; 
K(6,5) = -k5;
K(6,7) = -k7;

% 右臂 (m7-m11): 对称结构
% m7: 连接到m6通过k7,到m8通过k8
K(7,7) = k7 + k8; 
K(7,6) = -k7;
K(7,8) = -k8;

% m8: 连接到m7通过k8,到m9通过k9
K(8,8) = k8 + k9; 
K(8,7) = -k8;
K(8,9) = -k9;

% m9: 连接到m8通过k9,到m10通过k10
K(9,9) = k9 + k10; 
K(9,8) = -k9;
K(9,10) = -k10;

% m10: 连接到m9通过k10,到m11通过k11
K(10,10) = k10 + k11; 
K(10,9) = -k10;
K(10,11) = -k11;

% m11: 自由端,只连接到m10通过k11
K(11,11) = k11; 
K(11,10) = -k11;


% --- Step 2.5: Visualize System Matrix (Optional) ---
% Display stiffness matrix structure
fprintf('刚度矩阵组装完成 (11x11):\n');
fprintf('  对角线元素: 各质量点的总刚度\n');
fprintf('  非对角元素: 相邻质量点之间的耦合刚度\n');
fprintf('  矩阵对称性: K = K^T (系统保守性)\n\n');

% Plot sparsity pattern of stiffness matrix
figure('Name', '刚度矩阵稀疏模式', 'Position', [100, 100, 600, 600]);
spy(K, 'k', 10);
title('刚度矩阵K的稀疏模式 (非零元素分布)', 'FontSize', 12, 'FontWeight', 'bold');
xlabel('列索引 (质量块编号)', 'FontSize', 10);
ylabel('行索引 (质量块编号)', 'FontSize', 10);
grid on;
set(gca, 'FontSize', 10);

% Add text annotation
annotation('textbox', [0.15, 0.02, 0.7, 0.05], ...
    'String', 'Y型结构的三对角带状模式,中心质量(6)连接左右两臂', ...
    'HorizontalAlignment', 'center', 'FontSize', 9, ...
    'EdgeColor', 'none');

% --- Step 3: Solve the Eigenvalue Problem ---
[V, D] = eig(K, M);

% Extract and sort the results
eigenvalues = diag(D);
[sorted_eigenvalues, sort_idx] = sort(eigenvalues);
sorted_modes = V(:, sort_idx);

% Calculate natural frequencies in rad/s and Hz
omega_rad_s = sqrt(sorted_eigenvalues);
omega_hz = omega_rad_s / (2*pi);

% --- Step 4: Display Results and Compare with Expected Values ---
fprintf('%s\n', repmat('=', 1, 70));
fprintf('例5.7: 11自由度对称Y型系统固有频率计算\n');
fprintf('%s\n\n', repmat('=', 1, 70));

% Expected frequencies from the textbook (Hz)
expected_freq = [2.74, 2.95, 7.24, 7.80, 11.47, 12.13, 15.00, 15.62, 18.49, 19.32, 28.57];

fprintf('模态 | 计算频率(Hz) | 教材频率(Hz) | 误差(%%)\n');
fprintf('-----|-------------|-------------|----------\n');
for i = 1:n
    error_percent = abs(omega_hz(i) - expected_freq(i)) / expected_freq(i) * 100;
    fprintf('%4d | %11.2f | %11.2f | %8.2f\n', i, omega_hz(i), expected_freq(i), error_percent);
end
fprintf('\n');

% Check if results match expected values (within 1% tolerance)
max_error = max(abs(omega_hz' - expected_freq) ./ expected_freq * 100);
if max_error < 1.0
    fprintf('结论: 计算结果与教材匹配良好 (最大误差: %.2f%%)\n', max_error);
else
    fprintf('警告: 计算结果与教材存在偏差 (最大误差: %.2f%%)\n', max_error);
    fprintf('      请检查系统模型是否正确\n');
end
fprintf('\n');

% 对称性分析
fprintf('对称性分析:\n');
fprintf('  成对的接近固有频率表明系统具有对称/反对称模态特性\n');
fprintf('  - 模态对1-2  (%.2f, %.2f Hz): 低频模态对\n', omega_hz(1), omega_hz(2));
fprintf('  - 模态对3-4  (%.2f, %.2f Hz): 次低频模态对\n', omega_hz(3), omega_hz(4));
fprintf('  - 模态对5-6  (%.2f, %.2f Hz): 中频模态对\n', omega_hz(5), omega_hz(6));
fprintf('  - 模态对7-8  (%.2f, %.2f Hz): 次高频模态对\n', omega_hz(7), omega_hz(8));
fprintf('  - 模态对9-10 (%.2f, %.2f Hz): 高频模态对\n', omega_hz(9), omega_hz(10));
fprintf('  - 模态11     (%.2f Hz): 中心质量主导的最高频模态\n', omega_hz(11));
fprintf('\n');

% --- Step 5: Plot Mode Shapes (Y-型结构可视化) ---
figure('Name', '例5.7: 前10阶振型', 'Position', [50, 50, 1400, 700]);

% 定义Y型结构的节点位置
% 左臂: m1(0,0) -> m2(0,1) -> m3(0,2) -> m4(0,3) -> m5(0,4)
% 中心: m6(0,5)
% 右臂: m7(1,4) -> m8(1,3) -> m9(1,2) -> m10(1,1) -> m11(1,0)

x_pos = [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1];  % x坐标
y_pos = [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0];  % y坐标

% 连接关系(用于绘制结构线)
connections = [1,2; 2,3; 3,4; 4,5; 5,6; 6,7; 7,8; 8,9; 9,10; 10,11];

% 绘制前10阶振型
for mode_idx = 1:10
    subplot(2, 5, mode_idx);
    hold on;

    % 获取当前模态向量并归一化
    current_mode = sorted_modes(:, mode_idx);
    current_mode = current_mode / max(abs(current_mode)); % 归一化到[-1, 1]

    % 计算变形后的位置(放大系数用于可视化)
    scale = 0.3;
    x_deformed = x_pos + scale * current_mode';
    y_deformed = y_pos;

    % 绘制未变形结构(虚线)
    for i = 1:size(connections, 1)
        n1 = connections(i,1);
        n2 = connections(i,2);
        plot([x_pos(n1), x_pos(n2)], [y_pos(n1), y_pos(n2)], ...
             ':', 'Color', [0.7 0.7 0.7], 'LineWidth', 1);
    end

    % 绘制变形后的结构(实线,根据振幅着色)
    for i = 1:size(connections, 1)
        n1 = connections(i,1);
        n2 = connections(i,2);
        plot([x_deformed(n1), x_deformed(n2)], [y_deformed(n1), y_deformed(n2)], ...
             '-k', 'LineWidth', 2);
    end

    % 绘制质量点(根据振幅着色)
    scatter(x_deformed, y_deformed, 100, current_mode, 'filled', 'MarkerEdgeColor', 'k');
    colormap(jet);

    % 添加质量编号
    for i = 1:n
        text(x_deformed(i)+0.05, y_deformed(i)+0.15, sprintf('m%d', i), ...
             'FontSize', 7, 'FontWeight', 'bold');
    end

    % 设置坐标轴
    axis equal;
    xlim([-0.5, 1.5]);
    ylim([-0.5, 5.5]);
    set(gca, 'YDir', 'normal');

    % 判断对称性 (基于左右臂振幅的相关性)
    left_arm = current_mode(1:5);
    right_arm = current_mode(11:-1:7); % 反转右臂顺序以对比对称性
    symmetry_corr = corr(left_arm, right_arm);

    if symmetry_corr > 0.9
        mode_type = '对称';
    elseif symmetry_corr < -0.9
        mode_type = '反对称';
    else
        mode_type = '混合';
    end

    % 标题
    title(sprintf('模态 %d: %.2f Hz (%s)', mode_idx, omega_hz(mode_idx), mode_type), ...
          'FontSize', 10, 'FontWeight', 'bold');

    % 添加网格
    grid on;
    box on;

    % 只在特定子图显示坐标轴标签
    if mode_idx > 5
        xlabel('横向位移', 'FontSize', 8);
    end
    if mod(mode_idx-1, 5) == 0
        ylabel('纵向位置', 'FontSize', 8);
    end

    hold off;
end

% 总标题
sgtitle('例5.7: Y型对称系统前10阶振型 (对称/反对称模态)', ...
        'FontSize', 14, 'FontWeight', 'bold');