Длина дуги
Длина как предел ломаных
Длину отрезка мы знаем, а что такое длина кривой? Впишем в кривую ломаную с вершинами в точках M_0, M_1, \dots, M_n. Её длина легко считается. Длина кривой — предел длин вписанных ломаных при стремлении длины наибольшего звена к нулю (если он существует; тогда кривая называется спрямляемой).
Для гладкой кривой предел существует, и его можно найти интегралом. Звено между соседними точками графика y = f(x) имеет длину
(по теореме Лагранжа \Delta y = f'(\xi)\Delta x). Это интегральная сумма — переходим к пределу.
Три формулы
График y = f(x), x \in [a; b]:
Параметрическая кривая x = x(t), y = y(t), t \in [\alpha; \beta]:
Полярные координаты r = r(\varphi), \varphi \in [\alpha; \beta]: подставив x = r\cos\varphi, y = r\sin\varphi, получаем x'^2 + y'^2 = r^2 + r'^2 и
Удобно помнить дифференциал дуги: ds = \sqrt{dx^2 + dy^2} — теорема Пифагора для бесконечно малого треугольника.
Примеры
Цепная линия y = a\operatorname{ch}\frac xa — форма провисающей цепи:
Циклоида: L = \int_0^{2\pi}\sqrt{2 - 2\cos t}\,dt = \int_0^{2\pi}2\sin\frac t2\,dt = 8 — ровно в 4 раза больше диаметра колеса (Рен, 1658).
import numpy as np
import vis
t = np.linspace(0, 2 * np.pi, 2001)
x, y = t - np.sin(t), 1 - np.cos(t)
speed = np.sqrt(np.gradient(x, t)**2 + np.gradient(y, t)**2)
print("длина арки циклоиды ≈", round(float(np.trapz(speed, t)), 6))
n = 6
tk = np.linspace(0, 2 * np.pi, n + 1)
poly = (tk - np.sin(tk), 1 - np.cos(tk))
print(f"вписанная ломаная из {n} звеньев:", round(float(np.sum(np.hypot(np.diff(poly[0]), np.diff(poly[1])))), 4))
vis.plane({"циклоида": (x, y), f"ломаная, {n} звеньев": poly}, title="Длина кривой — предел длин вписанных ломаных")
Длина эллипса
Для эллипса x = a\cos t, y = b\sin t:
где e = \sqrt{1 - b^2/a^2} — эксцентриситет. Этот эллиптический интеграл не выражается через элементарные функции. Рамануджан нашёл замечательно точное приближение:
import numpy as np
import sympy as sp
a, b = 5.0, 3.0
t = np.linspace(0, 2 * np.pi, 200001)
L = np.trapz(np.sqrt(a**2 * np.sin(t)**2 + b**2 * np.cos(t)**2), t)
ram = np.pi * (3 * (a + b) - np.sqrt((3 * a + b) * (a + 3 * b)))
e2 = 1 - b**2 / a**2
print(f"численно: {L:.10f}")
print(f"4a·E(e): {float(4 * a * sp.elliptic_e(e2)):.10f} (в SymPy аргумент — квадрат эксцентриситета)")
print(f"Рамануджан: {ram:.10f}")
Итог
- L = \int\sqrt{1 + y'^2}\,dx для графика, \int\sqrt{x'^2 + y'^2}\,dt для параметрической кривой, \int\sqrt{r^2 + r'^2}\,d\varphi в полярных координатах.
- ds = \sqrt{dx^2 + dy^2} — дифференциал дуги.
- Длины многих кривых (эллипс) выражаются только через специальные функции.
Практика решено 0 из 10
Длина отрезка прямой y = 2x + 1 при x \in [0;\,3] по формуле длины дуги.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
3sqrt(5)Длина дуги полукубической параболы y = x^{3/2}, x \in [0;\,4].
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
(80sqrt(10) - 8)/27Длина цепной линии y = \operatorname{ch} x при x \in [0;\,\ln 2].
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
3/4Длина дуги y = \ln\cos x при x \in \left[0;\,\frac\pi3\right].
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
ln(2 + sqrt(3))Длина окружности x = R\cos t, y = R\sin t при R = 5.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
10piДлина одной арки циклоиды x = t - \sin t, y = 1 - \cos t.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
8Длина астроиды x = \cos^3t, y = \sin^3t (вся кривая).
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
6Длина кардиоиды r = 1 + \cos\varphi.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
8Длина первого витка спирали Архимеда r = \varphi (\varphi \in [0;\,2\pi]) — введите число до тысячных.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
pi sqrt(1 + 4pi^2) + ln(2pi + sqrt(1 + 4pi^2))/2Длина ломаной. Напишите функцию curve_length(x, y, t0, t1, n): x, y — функции параметра,
кривая приближается ломаной из n звеньев с равным шагом по t; верните её длину.
Длина ломаной всегда не больше длины кривой и сходится к ней при n \to \infty.
Какие тесты проверяют код (1)
import math assert abs(curve_length(lambda t: t, lambda t: 2 * t, 0, 3, 1) - 3 * math.sqrt(5)) < 1e-12, "Отрезок — точно одним звеном" L = curve_length(math.cos, math.sin, 0, 2 * math.pi, 6) assert abs(L - 6) < 1e-9, "Правильный шестиугольник, вписанный в единичную окружность, имеет периметр 6" assert abs(curve_length(lambda t: t - math.sin(t), lambda t: 1 - math.cos(t), 0, 2 * math.pi, 20000) - 8) < 1e-6, "Длина арки циклоиды — 8"
import math
def curve_length(x, y, t0, t1, n):
total = 0.0
h = (t1 - t0) / n
px, py = x(t0), y(t0)
for k in range(1, n + 1):
t = t0 + k * h
qx, qy = x(t), y(t)
total += math.hypot(qx - px, qy - py)
px, py = qx, qy
return total
Войдите, чтобы отмечать пройденные уроки.