🔧 Інженерія · Розрахунок конструкцій
📅 Липень 2026⏱ 15 хв🔴 Просунутий · Останнє оновлення: 3 липня 2026 р.

Метод скінченних елементів у будівельній механіці: ферми, балки та рами

Мости, кроквяні ферми, лонжерони крил літаків і каркаси будівель — усі вони сьогодні проєктуються за допомогою одного й того ж інструменту: методу прямої жорсткості. На відміну від загального континуального МСЕ, будівельна механіка може використовувати замкнуті аналітичні розв'язки для елементів — стрижень ферми або відрізок балки має відому матрицю жорсткості, отриману безпосередньо з теорії балок, без потреби у чисельному інтегруванні. Саме тому це найзрозуміліша точка входу в розуміння того, як насправді працює МСЕ.

1. Метод прямої жорсткості

Будівельний МСЕ з'явився за десятиліття до загального континуального МСЕ — він виріс із матричного аналізу каркасних конструкцій, розробленого для авіаційного проєктування у 1950-х роках. Основна ідея проста: моделювати конструкцію як мережу одновимірних елементів (стрижнів, балок, колон), з'єднаних у дискретних вузлах. Кожен елемент має відоме співвідношення між силами на його кінцях і переміщеннями на цих кінцях — його матрицю жорсткості елемента. Об'єднавши матриці жорсткості всіх елементів в одну велику глобальну матрицю жорсткості, прикладаємо навантаження й опори та розв'язуємо лінійну систему для невідомих переміщень.

Фундаментальне співвідношення для одного елемента: f_e = k_e · d_e f_e = вектор сил/моментів у вузлах елемента d_e = вектор переміщень/поворотів у вузлах елемента k_e = матриця жорсткості елемента (квадратна, симетрична) Зібрано для всієї конструкції: F = K · D F = глобальний вектор навантажень (прикладені сили + реакції) D = глобальний вектор переміщень (невідомі, після видалення опор) K = глобальна матриця жорсткості (розріджена, стрічкова, симетрична)

Це та сама система K·u = F, яку розв'язує континуальний МСЕ, але тут k_e отримано з точного аналітичного розв'язку керівного ОДР для стрижня чи балки, а не шляхом чисельного інтегрування функцій форми по довільній формі елемента. Саме тому ручний розрахунок невеликих ферм був практичним ще до появи комп'ютерів — і саме тому метод прямої жорсткості й досі є найшвидшим та найпрозорішим способом навчання основам МСЕ.

2. Елементи ферми (стрижні)

Стрижень ферми сприймає лише осьову силу — розтяг або стиск уздовж своєї довжини — і шарнірно закріплений з обох кінців, тому не передає згинального моменту. У власній локальній системі координат (x′ уздовж стрижня) двовузловий стрижень з осьовою жорсткістю EA/L має добре відому одновимірну матрицю жорсткості:

Локальна жорсткість стрижня (тільки осьовий ступінь свободи, 2×2): k_local = (EA/L) · [ 1 -1 ] [-1 1 ] E = модуль пружності A = площа поперечного перерізу L = довжина елемента Виведення: осьова сила N = EA·(du/dx). Для лінійно змінного поля переміщень u(x) = N1(x)u1 + N2(x)u2, де N1 = 1 - x/L, N2 = x/L, енергія деформації дорівнює: U = ∫₀ᴸ ½ EA (du/dx)² dx = ½ dᵀ k_local d Диференціюючи U за кожним dᵢ, отримуємо елементи матриці жорсткості напряму — чисельне квадратурування не потрібне, оскільки du/dx стала уздовж елемента.

У 2D або 3D кожен вузол має 2 або 3 поступальні ступені свободи, тому локальну осьову жорсткість потрібно повернути у глобальну систему координат x-y(-z), використовуючи напрямні косинуси стрижня. Ферменна модель мосту чи даху може мати кілька сотень стрижнів і вузлів — достатньо мало, щоб розраховувати вручну в докомп'ютерну епоху, саме тому метод спочатку розробили для ферм.

3. Елементи балки Ейлера-Бернуллі

Балки, на відміну від стрижнів, чинять опір згину, тому кожному вузлу потрібен ступінь свободи поперечного переміщення та повороту. Класичний елемент балки Ейлера-Бернуллі припускає, що плоскі перерізи залишаються плоскими та перпендикулярними нейтральній осі (без деформації зсуву), що дає кубічне (ермітове) поле переміщень між вузлами:

Локальна жорсткість балки (лише згин, 4×4, СС: v1,θ1,v2,θ2): k_beam = (EI/L³) · [ 12 6L -12 6L ] [ 6L 4L² -6L 2L² ] [ -12 -6L 12 -6L ] [ 6L 2L² -6L 4L² ] E = модуль пружності, I = момент інерції перерізу L = довжина елемента, v = поперечний прогин, θ = кут повороту Разом з осьовими (ферменними) членами вище, 2D елемент рами має жорсткість 6×6 (3 СС/вузол: u, v, θ): k_frame = [ EA/L 0 0 -EA/L 0 0 ] [ 0 12EI/L³ 6EI/L² 0 -12EI/L³ 6EI/L² ] [ 0 6EI/L² 4EI/L 0 -6EI/L² 2EI/L ] [-EA/L 0 0 EA/L 0 0 ] [ 0 -12EI/L³ -6EI/L² 0 12EI/L³ -6EI/L² ] [ 0 6EI/L² 2EI/L 0 -6EI/L² 4EI/L ]

Ермітові кубічні функції форми, використані тут, інтерполюють одночасно переміщення та нахил, гарантуючи неперервність обох на межах елементів (C¹-неперервність) — це необхідно, оскільки керівне рівняння EI·v'''' = q є рівнянням четвертого порядку. Елементи балки Тимошенка розширюють цю модель, додаючи деформацію поперечного зсуву — це важливо для коротких, глибоких балок, де гнучкість на зсув суттєва (відношення прольоту до висоти нижче ~10).

4. Елементи рами та перетворення координат

Реальні конструкції — каркаси будівель, кроквяні ферми на похилих елементах, офшорні опорні конструкції — мають елементи, орієнтовані під довільними кутами. Локальну матрицю жорсткості кожного елемента потрібно перетворити у спільну глобальну систему координат перед збіркою:

Перетворення: k_global = Tᵀ · k_local · T T = матриця перетворення/повороту, побудована з напрямних косинусів (c = cosθ, s = sinθ) осі елемента: T = [ c s 0 0 0 0 ] [-s c 0 0 0 0 ] [ 0 0 1 0 0 0 ] [ 0 0 0 c s 0 ] [ 0 0 0 -s c 0 ] [ 0 0 0 0 0 1 ] Для 3D елемента рами T стає блок-діагональною матрицею 12×12, побудованою з матриці напрямних косинусів 3×3, а крутильна жорсткість GJ/L додається для скручування навколо осі елемента.

У 3D елементи рами також несуть кручення (GJ/L, де G — модуль зсуву, а J — момент інерції при крученні) та згин відносно двох ортогональних осей, що дає повну матрицю жорсткості елемента 12×12 (6 СС на вузол: 3 поступальні, 3 обертальні). Це базовий елемент, на якому працює майже кожен пакет для розрахунку конструкцій — SAP2000, ETABS, STAAD.Pro та Robot Structural Analysis будують свою глобальну матрицю жорсткості саме з такого 12×12 елемента рами.

5. Збірка та розв'язання глобальної системи

Збірка відображає локальні ступені свободи кожного елемента на їхню позицію у глобальній нумерації СС і додає перетворену матрицю елемента в глобальну матрицю за цими позиціями:

для кожного елемента e: k_g = Tᵀ · k_local · T # перетворення у глобальні осі для i у element_dofs, j у element_dofs: K_global[ dof_map[i] ][ dof_map[j] ] += k_g[i][j] F_global[ dof_map[i] ] += f_e[i] # розподілені навантаження → еквів. вузлові Застосувати граничні умови (розбити СС на вільні 'f' і закріплені/опорні 's'): [ K_ff K_fs ] [ D_f ] [ F_f ] [ K_sf K_ss ] [ D_s ] = [ R_s ] D_s = 0 (або задана осадка) в опорах Розв'язати: K_ff · D_f = F_f - K_fs · D_s для невідомого D_f Потім реакції: R_s = K_sf · D_f + K_ss · D_s

K розріджена та стрічкова — вузол з'єднується лише з кількома сусідніми елементами, тому більшість записів дорівнює нулю. Перенумерація СС для мінімізації ширини стрічки (Cuthill-McKee, вкладена диссекція) значно прискорює прямі розв'язувачі. Коли D_f відоме, локальні переміщення кожного елемента відновлюються, а внутрішні епюри осьової сили, поперечної сили та згинального моменту випливають безпосередньо з k_local · d_e.

6. Статична конденсація та підструктуризація

Великі конструкції часто розбивають на підструктури (перекриття, сегмент мосту, повторюваний ферменний модуль), кожну з яких зводять до еквівалентної жорсткості лише у граничних вузлах — внутрішні СС виключаються алгебраїчно без будь-яких наближень:

Розбиваємо СС на внутрішні 'i' (виключити) та граничні 'b' (залишити): [ K_bb K_bi ] [ D_b ] [ F_b ] [ K_ib K_ii ] [ D_i ] = [ F_i ] З другого рядка: D_i = K_ii⁻¹ (F_i - K_ib D_b) Підставляючи в перший рядок, отримуємо сконденсовану систему: K* = K_bb - K_bi K_ii⁻¹ K_ib (сконденсована жорсткість) F* = F_b - K_bi K_ii⁻¹ F_i (сконденсоване навантаження) K* · D_b = F* — розв'язується лише для граничних СС

Це той самий метод редукції Гайана (Guyan), що використовується для стиснення величезних скінченно-елементних моделей у динамічному аналізі, і саме так інтегроване з САПР програмне забезпечення для рам збирає попередньо обчислені "суперелементи" для типових компонентів (збірна балка, опора мосту) без повторного виведення їхньої внутрішньої поведінки щоразу.

8. Лінійний аналіз стійкості (втрата стійкості)

Стрункі стиснуті елементи можуть зазнавати втрати стійкості — раптової бокової нестійкості — при навантаженнях, значно нижчих за межу текучості матеріалу. Лінійний (власне-значеневий) аналіз стійкості вводить геометричну матрицю жорсткості K_g, яка враховує, як осьове навантаження знижує ефективну згинальну жорсткість:

Задача на власні значення втрати стійкості: (K + λ K_g) φ = 0 K = звичайна пружна матриця жорсткості K_g = геометрична (напруженнєва) матриця жорсткості, пропорційна осьовому силовому стану під еталонним навантаженням P_ref λ = множник навантаження — конструкція втрачає стійкість при P_cr = λ · P_ref φ = форма втрати стійкості Для одиночної шарнірно закріпленої колони це відтворює класичну формулу Ейлера для критичного навантаження: P_cr = π² E I / L_eff² L_eff = розрахункова (ефективна) довжина (залежить від закріплення кінців: шарнір-шарнір = L, защемлення-защемлення = 0.5L тощо)

Аналіз стійкості методом МСЕ узагальнює формулу Ейлера для колони на довільні рами, де нестійкість може проявлятися як зсув цілого поверху, а не згин окремого елемента. Найменше власне значення λ₁ дає коефіцієнт критичного навантаження; будівельні норми зазвичай вимагають, щоб λ₁ мало суттєвий запас понад 1.0, а нелінійний (великодеформаційний) аналіз використовують, коли важлива поведінка після втрати стійкості або чутливість до недосконалостей.

9. Реалізація 2D розв'язувача рам

Мінімальному 2D розв'язувачу жорсткості рам потрібні лише три складові: генерація жорсткості елемента, збірка та обробка граничних умов. Ось ядро процедури обчислення жорсткості елемента на JavaScript, що відповідає матриці 6×6, виведеній у Розділі 4:

function frameElementStiffness(E, A, I, L, angleRad) {
  // локальна жорсткість 6x6: [u1,v1,th1,u2,v2,th2]
  const k = zeros(6, 6);
  const EA_L  = E * A / L;
  const EI_L3 = E * I / (L ** 3);
  const EI_L2 = E * I / (L ** 2);
  const EI_L  = E * I / L;

  k[0][0] =  EA_L;  k[3][3] =  EA_L;  k[0][3] = -EA_L;  k[3][0] = -EA_L;

  k[1][1] =  12 * EI_L3;  k[4][4] =  12 * EI_L3;
  k[1][4] = -12 * EI_L3;  k[4][1] = -12 * EI_L3;

  k[1][2] = k[2][1] =  6 * EI_L2;
  k[1][5] = k[5][1] =  6 * EI_L2;
  k[2][4] = k[4][2] = -6 * EI_L2;
  k[4][5] = k[5][4] = -6 * EI_L2;

  k[2][2] = 4 * EI_L;  k[5][5] = 4 * EI_L;
  k[2][5] = k[5][2] = 2 * EI_L;

  const c = Math.cos(angleRad), s = Math.sin(angleRad);
  const T = buildTransform(c, s); // блок-діагональна матриця повороту 6x6
  return multiply(transpose(T), multiply(k, T)); // Tᵀ k T
}

function assembleGlobal(elements, nNodes) {
  const ndof = nNodes * 3;
  const K = zeros(ndof, ndof);
  for (const el of elements) {
    const ke = frameElementStiffness(el.E, el.A, el.I, el.L, el.angle);
    const map = [el.n1*3, el.n1*3+1, el.n1*3+2,
                el.n2*3, el.n2*3+1, el.n2*3+2];
    for (let i = 0; i < 6; i++)
      for (let j = 0; j < 6; j++)
        K[map[i]][map[j]] += ke[i][j];
  }
  return K; // далі розбити на вільні/опорні СС і розв'язати K_ff Df = Ff
}

Далі веб-візуалізатору потрібні ще три кроки: (1) розв'язати K_ff·D_f = F_f прямим або розрідженим лінійним розв'язувачем (метод Гаусса цілком підходить для кількох тисяч СС), (2) відновити кінцеві зусилля елементів з k_local·d_e для кожного елемента, і (3) відобразити деформовану форму та епюри згинальних моментів, масштабуючи та інтерполюючи ермітову кубічну функцію всередині кожного елемента балки — саме такий інтерактивний робочий процес використовується у симуляціях конструкцій на цьому сайті.