Численное интегрирование прогиба

Прогиб можно получить численно: дважды проинтегрировать M(x)/(EI) по длине балки.

Численное интегрирование прогиба — пошаговое накопление угла поворота из кривизны и прогиба из угла вдоль балки.

Алгоритм двойного интегрирования

Из уравнения $y'' = M(x)/(EI)$ видно: вторая производная прогиба известна (через момент). Чтобы получить сам прогиб, интегрируем дважды. Численно это два накопления по сетке: сначала угол $\theta(x) = \int y''\, dx$, затем прогиб $y(x) = \int \theta\, dx$. Для балки на двух опорах граничные условия $y(0) = 0$ и $y(l) = 0$ задают начальный угол $\theta_0$, который подбирают так, чтобы прогиб на правой опоре обнулился. Для симметричной нагрузки $\theta_0$ известен из симметрии, но общий приём — пристрелка.

Проверка на классике

Возьмём балку на двух опорах с силой $F$ посередине: точный прогиб $f = Fl^3/(48EI)$. Момент: на левой половине $M = (F/2)x$, на правой $M = (F/2)(l-x)$. Проинтегрируем численно и сравним.

F = 12_000.0
l = 4.0
E = 2.1e11
b, h = 0.080, 0.160
I = b * h**3 / 12
EI = E * I

n = 2000
dx = l / n

def moment(x):
    if x <= l/2:
        return (F/2) * x
    else:
        return (F/2) * (l - x)

# Первый проход: при theta0=0 получим прогиб с «перекосом»
def deflection(theta0):
    theta = theta0
    y = 0.0
    for i in range(n):
        x = i * dx
        theta += moment(x) / EI * dx   # интеграл кривизны -> угол
        y += theta * dx                # интеграл угла -> прогиб
    return y  # прогиб на правой опоре

# Подбираем theta0 так, чтобы y(l)=0 (метод пристрелки, линейность)
y_with_0 = deflection(0.0)
y_with_1 = deflection(1e-3)
theta0 = -y_with_0 * 1e-3 / (y_with_1 - y_with_0)

# Теперь считаем прогиб в середине с найденным theta0
theta = theta0
y = 0.0
f_mid = 0.0
for i in range(n):
    x = i * dx
    theta += moment(x) / EI * dx
    y += theta * dx
    if abs(x - l/2) < dx/2:
        f_mid = y

f_exact = F * l**3 / (48 * EI)
print("Численный прогиб f =", round(abs(f_mid)*1000, 4), "мм")
print("Точная формула  f =", round(f_exact*1000, 4), "мм")

Вывод:

Численный прогиб f = 2.7902 мм
Точная формула  f = 2.7902 мм

Численный результат совпал с формулой $Fl^3/(48EI)$ до четвёртого знака (2,79 мм) — метод работает.

Метод пристрелки

Поскольку задача линейна, прогиб на правой опоре линейно зависит от стартового угла $\theta_0$. Мы посчитали прогиб при двух пробных значениях $\theta_0$ и линейной интерполяцией нашли тот, что обнуляет правую опору. Этот приём («стрельба» по граничному условию) универсален для любой нагрузки — достаточно изменить функцию moment(x).

Балка под равномерной нагрузкой

Для $q$ момент $M(x) = \frac{ql}{2}x - \frac{q x^2}{2}$; точный прогиб $f = 5ql^4/(384EI)$. Тот же численный код (с новой функцией момента) даёт совпадение — попробуйте заменить moment и проверить.

Как работает под капотом

Метод прямоугольников аппроксимирует интеграл суммой $\sum f_i\, dx$. Двойное интегрирование накапливает сначала угол (площадь под эпюрой кривизны $M/EI$), затем прогиб (площадь под эпюрой углов). Погрешность убывает с шагом; для гладких $M(x)$ уже сотни точек дают инженерную точность. Это численный аналог метода Мора и правила Верещагина, только без ручного перемножения эпюр.

Частые ошибки

  • Забывают подобрать $\theta_0$ под граничное условие $y(l)=0$ — получают «перекошенный» прогиб.
  • Берут слишком крупный шаг — теряют точность на изломе эпюры момента.
  • Не делят момент на $EI$ — интегрируют момент вместо кривизны.

Итоги

  • Прогиб = двойной интеграл кривизны $M(x)/(EI)$ по длине.
  • Численно: накопить угол из кривизны, затем прогиб из угла.
  • Стартовый угол $\theta_0$ подбирают пристрелкой под граничное условие.
  • Метод воспроизводит точные формулы $Fl^3/48EI$ и $5ql^4/384EI$.
Проверьте себя
1. Сколько раз интегрируют, чтобы из M(x) получить прогиб?
AОдин раз
BДважды
CТрижды
DНе интегрируют вовсе
2. Зачем нужен метод пристрелки в задаче о прогибе балки на двух опорах?
AЧтобы найти модуль Юнга
BЧтобы подобрать начальный угол θ₀ под условие y(l)=0
CЧтобы вычислить площадь сечения
DЧтобы измерить нагрузку