Интегрирование рациональных функций
Алгоритм
- Целая часть. Если дробь неправильная, делим числитель на знаменатель: \frac{P}{Q} = S(x) + \frac{R}{Q}.
- Разложение знаменателя на линейные множители и неразложимые трёхчлены.
- Запись разложения с неопределёнными коэффициентами: - каждому множителю (x - a) — дробь \frac{A}{x - a}; - каждому (x - a)^k — дроби \frac{A_1}{x - a} + \frac{A_2}{(x - a)^2} + \dots + \frac{A_k}{(x - a)^k}; - каждому x^2 + px + q — дробь \frac{Mx + N}{x^2 + px + q}, каждому (x^2 + px + q)^k — k таких дробей.
- Нахождение коэффициентов.
- Интегрирование простейших дробей (предыдущий урок).
Как найти коэффициенты
Приводим разложение к общему знаменателю и приравниваем числители. Получается тождество многочленов.
Способ 1 — подстановка корней. В тождество подставляем корни знаменателя: большинство слагаемых обнуляются.
Способ 2 — сравнение коэффициентов при одинаковых степенях x: получается система линейных уравнений.
Обычно их комбинируют: корни дают часть коэффициентов сразу, оставшиеся — из сравнения старших коэффициентов или подстановки удобных x.
Пример. \int\frac{2x^2 + 3}{x(x - 1)^2}\,dx.
- x = 0: 3 = A.
- x = 1: 5 = C.
- коэффициент при x^2: 2 = A + B, значит B = -1.
import sympy as sp
x = sp.symbols("x")
f = (2*x**2 + 3) / (x * (x - 1)**2)
print("apart:", sp.apart(f))
print("∫ =", sp.integrate(f, x))
# Тот же расчёт методом неопределённых коэффициентов
A, B, C = sp.symbols("A B C")
identity = sp.expand(A*(x - 1)**2 + B*x*(x - 1) + C*x - (2*x**2 + 3))
print("система:", [sp.Eq(c, 0) for c in sp.Poly(identity, x).all_coeffs()])
print("решение:", sp.solve(sp.Poly(identity, x).all_coeffs(), [A, B, C]))
Комплексные корни
Если у знаменателя есть неразложимый трёхчлен, в разложении появляется дробь \frac{Mx + N}{x^2 + px + q}, и в ответе — логарифм и арктангенс.
Пример. \int\frac{dx}{x^3 + 1}. x^3 + 1 = (x + 1)(x^2 - x + 1).
import sympy as sp
x = sp.symbols("x")
f = 1 / (x**3 + 1)
print("apart:", sp.apart(f))
F = sp.integrate(f, x)
print("∫ =", F)
print("проверка:", sp.simplify(sp.diff(F, x) - f))
Что получается в ответе
Из алгоритма видно: интеграл от рациональной функции всегда выражается через рациональные функции, логарифмы и арктангенсы. Это важный теоретический результат: класс рациональных функций интегрируется полностью. Многие следующие методы (тригонометрические, иррациональные интегралы) работают так: подходящей заменой свести интеграл к рациональному.
Метод Остроградского
Если знаменатель имеет кратные множители высокой степени, разложение получается громоздким. Метод Остроградского выделяет рациональную часть интеграла без интегрирования:
где Q_1 = \text{НОД}(Q, Q'), Q_2 = Q / Q_1 (у Q_2 все корни простые), а коэффициенты P_1, P_2 находятся дифференцированием этого равенства. Интеграл в правой части уже даёт только логарифмы и арктангенсы.
Итог
- Выделить целую часть → разложить знаменатель → записать простейшие с неизвестными коэффициентами → найти их → проинтегрировать.
- Подстановка корней знаменателя быстро даёт коэффициенты при старших степенях каждого множителя.
- Интеграл от рациональной функции — всегда рациональная функция, логарифмы и арктангенсы.
Практика решено 0 из 12
Разложите на простейшие: \dfrac{1}{x(x + 1)} = \;? Введите сумму дробей.
Как вводить формулы
Степень —^ (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).
1/x - 1/(x + 1)Как вводить формулы
Степень —^ (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|x| - ln|x + 1|Как вводить формулы
Степень —^ (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).
2 ln|x - 1| - ln|x + 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).
x^2/2 + x + 2ln|x - 1|Как вводить формулы
Степень —^ (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).
1/x + ln|(x - 1)/x|Как вводить формулы
Степень —^ (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|x + 1| + 1/(x + 1)Как вводить формулы
Степень —^ (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|x| - ln(x^2 + 1)/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).
ln|x + 1| + ln(x^2 + 1)Как вводить формулы
Степень —^ (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).
x^2/2 + ln|x^2 - 1|/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).
ln|(x - 1)/(x + 1)|/4 - arctg(x)/2Как выглядит разложение \dfrac{2x + 3}{(x - 1)^2 (x^2 + 4)} на простейшие?
Метод «закрывания». Если знаменатель — произведение различных линейных множителей (x - a_1)(x - a_2)\cdots(x - a_n), а числитель P имеет степень меньше n, то
partial_fractions(P, roots): P — функция Python (числитель), roots — список
различных корней знаменателя. Верните список коэффициентов A_i в том же порядке.Какие тесты проверяют код (1)
def close(u, v):
return len(u) == len(v) and all(abs(p - q) < 1e-9 for p, q in zip(u, v))
assert close(partial_fractions(lambda x: 1, [0, -1]), [1, -1]), "1/(x(x+1)) = 1/x − 1/(x+1)"
assert close(partial_fractions(lambda x: x + 5, [1, -2]), [2, -1])
roots = [0, 1, 2, -3]
P = lambda x: x**2 - 4*x + 7
A = partial_fractions(P, roots)
for x in [0.5, 1.7, -2.2, 3.3]:
Q = 1
for r in roots:
Q *= x - r
assert abs(sum(a / (x - r) for a, r in zip(A, roots)) - P(x) / Q) < 1e-9, "Сумма простейших дробей не совпадает с исходной дробью"
def partial_fractions(P, roots):
result = []
for i, a in enumerate(roots):
denom = 1
for j, b in enumerate(roots):
if j != i:
denom *= a - b
result.append(P(a) / denom)
return result
Войдите, чтобы отмечать пройденные уроки.