Численное интегрирование прогиба
Прогиб можно получить численно: дважды проинтегрировать 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$.