SymPy — уравнения и производные

Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.

Текущая статья посвящена решить уравнение, найти производную, систему, интеграл; готовые примеры с разбором каждой строки и выводом программы.

Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:

  1. Основы
  2. Система и сеть
  3. Данные и разметка
  4. Код и разработка
  5. Языки
  6. Искусственный интеллект
  7. Проект
  8. Инфраструктура и безопасность
  9. Спин-офф

Обязательно пройдитесь.

А теперь приступим к нашему предмету.


Символьная математика на Python

SymPy — библиотека Python для математики в буквах. Обычный калькулятор и модуль math считают только с числами: sqrt(9)3.0. SymPy работает с формулами: находит корни x² − 5x + 6 = 0, берёт производную sin(x), упрощает (x+1)² до x² + 2x + 1.

Зачем это нужно на практике:

Ситуация Калькулятор / math SymPy
«Сколько будет 2 + 2?» Достаточно Избыточно
«Решить 2x + 3 = 11» Можно в уме Удобно проверить
«Корни x² − 7x + 12 = 0» Только численно Точный ответ [3, 4]
«Производная x³ − 4x» Не умеет 3x² − 4
«Проверить, правильно ли я решил ДЗ» Долго пересчитывать Одна строка кода

SymPy используют школьники (алгебра, начала анализа), студенты (матан, физика, лабораторные) и инженеры, когда нужен точный символьный ответ, а не приближение.

С чего начать

График функции после расчёта — Matplotlib — примеры, теория — Matplotlib — графики.

Красивые формулы в PDF — LaTeX, языки разметки.

Численные массивы — NumPy, обзор — NumPy, SciPy и pandas, Python для анализа данных.

Символьная vs численная математика — Численные методы.

Здесь — решить уравнение и взять производную в Python с разбором

Навигация по примерам

Ищут в интернете (RU / EN) Раздел ниже
sympy решить уравнение / solve equation Линейное уравнение
sympy квадратное уравнение / quadratic Квадратное уравнение
sympy дискримinant / корни через дискримinant Дискримinant
sympy система уравнений / system of equations Система уравнений
sympy производная / derivative example Производная многочлена
sympy производная sin cos Производная sin и cos
python найти производную функции Обязательный шаблон
sympy вторая производная Вторая производная
sympy частная производная Частная производная
sympy упростить выражение / simplify Упрощение
sympy подставить значение / subs Подстановка числа
sympy предел / limit sin x / x Предел
sympy интеграл / integrate Интеграл
sympy latex формула LaTeX для отчёта
sympy экстремум / исследование функции Точки экстремума

Как запустить пример за 2 минуты

Шаг 1. Установите SymPy (один раз):

pip install sympy

Разбор:

  • pip — программа, которая скачивает библиотеки Python; на Windows откройте «cmd» или PowerShell, на macOS — «Терминал».
  • install sympy — скачать и подключить SymPy; интернет нужен только в момент установки.
  • Если pip не найден — Python установлен без галочки «Add to PATH»; переустановите Python с python.org или используйте Google Colab (SymPy там уже есть).

Шаг 2. Скопируйте любой блок кода ниже в файл uravnenie.py.

Шаг 3. Запустите:

python uravnenie.py

Разбор:

  • python — интерпретатор; на некоторых системах команда python3.
  • Имя файла должно совпадать с тем, что вы сохранили.
  • Результат появится в чёрном окне терминала — это нормально, графическое окно SymPy не открывает.

Шаг 4 (необязательно). В Google Colab или Jupyter формулы красивее — добавьте в первую ячейку:

from sympy import init_printing
init_printing(use_unicode=True)

Разбор:

  • init_printing() — включает «типографский» вывод: дроби, степени и корни выглядят как в учебнике, а не как x**2.
  • use_unicode=True — символы вроде π, √, ∈; на старых консолях Windows иногда «квадратики» — тогда оставьте False или смотрите вывод в Colab.
  • В обычном .py-файле на Windows можно обойтись без этого — достаточно print().

Базовые термины

Термин Простыми словами Аналог в школе
Symbol / symbols Буква x, y, t — «неизвестная», не число «Пусть x — корень…»
Eq(левая, правая) Запись уравнения a = b Строка в тетради с «=»
solve Найти все x (или x и y), при которых уравнение верно «Решим уравнение…»
diff Производная по x Штрих: f′(x)
integrate Интеграл (первообразная) ∫ f(x) dx
simplify Сократить, привести к простому виду «Приведём подобные…»
expand Раскрыть скобки (x+1)² → x²+2x+1
factor Разложить на множители x²−9 → (x−3)(x+3)
subs Подставить число вместо буквы «При x = 2 получим…»
Rational(1, 3) Точная дробь ⅓ без ошибок float Обыкновенная дробь

Какую функцию выбрать

Задача из учебника Функция SymPy Одна строка
Объявить x и y symbols x, y = symbols("x y")
Записать «2x + 3 = 11» Eq Eq(2*x + 3, 11)
Решить одно уравнение solve solve(Eq(x**2 - 5*x + 6, 0), x)
Решить систему solve + список solve([Eq(..), Eq(..)], x, y)
Производная diff diff(x**3 - 4*x, x)
Вторая производная diff с 2 diff(f, x, 2)
Частная ∂/∂x diff по x diff(f, x) — y «константа»
Упростить sin²+cos² simplify simplify(sin(x)**2 + cos(x)**2)
Подставить x = 5 subs expr.subs(x, 5)
Предел limit limit(sin(x)/x, x, 0)
Формула для LaTeX latex latex(diff(sin(x), x))

Обязательные элементы

Любой скрипт с SymPy — как рецепт: импорт → буквы → формула → действие → print. Запомните этот каркас — дальше меняете только середину.

Что выведет программа (примерно так, вид может чуть отличаться):

Уравнение: Eq(x**2 + 2*x + 1, 0)
Корни: [-1]
Производная: 2*x + 2

Разбор по строкам:

Строка Что делает Зачем
from sympy import symbols, Eq, solve, diff Подключает только нужные функции Короче писать solve, а не sympy.solve
x = symbols("x") Создаёт символ x Без этого x — просто имя переменной Python, формулы не получится
expr = x**2 + 2*x + 1 Многочлен в буквах ** — степень; 2*x — умножение (знак * обязателен)
Eq(expr, 0) Уравнение «многочлен = 0» В SymPy «=» в уравнении — через Eq, не через ==
solve(equation, x) Ищет все x, где уравнение верно Возвращает список корней; здесь один корень −1
diff(expr, x) Производная по x Правило: (x²)′ = 2x, (2x)′ = 2, (1)′ = 0 → 2*x + 2
print(..) Текст в терминал В Jupyter последнюю строку можно без print — в .py нужен всегда

Что поменять под своё задание: замените expr на свой многочлен; если уравнение «= 5», пишите Eq(левая_часть, 5).

Типичные ошибки (и что видите на экране)
  • x = 5 до symbols("x") — x уже число, diff(x**2) даст 0.
  • x**2 + 2x + 1 без * перед x — SyntaxError: Python не понимает «2x».
  • solve(x + 2 == 5, x) — иногда работает, но правильный стиль: solve(Eq(x + 2, 5), x).
  • from math import sin + символ x — sin(x) не дифференцируется; берите from sympy import sin.
  • Ждёте одно число, а solve вернул список [3, 4] — берите roots[0] или перебирайте циклом.

Стартовые примеры

Семь задач, которые чаще всего ищут: линейное, квадратное, система, производная, sin/cos, упрощение, подстановка.


Линейное уравнение

Зачем: в тетради «переносим 3 вправо, делим на 2». В Python — проверить ответ или решить, если коэффициенты неудобные.

Задача из учебника: решить 2x + 3 = 11.

Что выведет:

Уравнение: Eq(2*x + 3, 11)
Список корней: [4]
x = 4
Проверка (подставили x): True

Разбор по строкам:

Строка Смысл
Eq(2*x + 3, 11) «2x + 3 = 11»; 2*x — обязательно звёздочка между числом и буквой
solve(equation, x) SymPy «переносит» и «делит» символьно; ответ список [4]
solution[0] Первый элемент списка — единственный корень линейного уравнения
equation.subs(x, solution[0]) Подставляем x = 4 в уравнение; должно быть True — значит, не ошиблись

Что поменять: Eq(5*x - 7, 18) — ваши коэффициенты; solve и solution[0] те же.


Квадратное уравнение

Зачем: дискримinant, формула корней, разложение на множители — SymPy делает всё сразу.

Задача: x² − 5x + 6 = 0 (ожидаемые корни 2 и 3).

Что выведет:

Многочлен: x**2 - 5*x + 6
Разложение на множители: (x - 2)*(x - 3)
Корни: [2, 3]
  При x = 2 значение многочлена = 0
  При x = 3 значение многочлена = 0

Разбор по строкам:

Строка Смысл
x**2 - 5*x + 6 Стандартный вид ax²+bx+c; для x² − 7x + 12 меняете числа
factor(expr) (x−2)(x−3) — видно корни глазами; полезно для объяснения учителю
solve Тот же ответ [2, 3]; порядок корней может быть [3, 2] — это нормально
for r in roots Цикл проверяет каждый корень; в списке два — перебираем оба

Что поменять: ваши a, b, c в строке expr = ...


Дискримinant (для отчёта и самопроверки)

Зачем: в школе просят «найти D и корни» — SymPy считает D, а solve даёт корни.

Задача: для x² − 4x + 3 = 0 показать D и x₁, x₂.

Что выведет:

Уравнение: Eq(x**2 - 4*x + 3, 0)
D = 4
√D = 2
Корни: [1, 3]

Разбор:

  • discriminant(expr, x) — формула D = b² − 4ac символьно; для этих коэффициентов D = 4.
  • sqrt(D) — корень из D; SymPy оставляет 2, а не 1.999… как float.
  • Коэффициенты a, b, c вынесены в переменные — удобно менять одной строкой.

Система двух уравнений с двумя неизвестными

Зачем: задачи «у двух чисел сумма 10, разность 2 — найти числа»; метод подстановки/сложения SymPy делает сам.

Задача: x + y = 10, x − y = 2.

Что выведет:

Система:
  (1) Eq(x + y, 10)
  (2) Eq(x - y, 2)
Ответ (словарь): {x: 6, y: 4}
x = 6 , y = 4
Проверка (1): True
Проверка (2): True

Разбор по строкам:

Строка Смысл
x, y = symbols("x y") Две неизвестные; пробел в строке "x y" — разделитель
system = [Eq(..), Eq(..)] Список уравнений; порядок строк не важен
solve(system, x, y) Ответ — словарь {x: 6, y: 4}, не два списка
result[x] Достаём x по ключу; надёжнее, чем result[0]
.subs(result) Подставляет оба x и y сразу во всё уравнение

Что поменять: правые части 10 и 2 на числа из вашей задачи.


Производная многочлена

Зачем: домашка «найти f′(x)» для f(x) = x⁴ − 3x² + 5x − 7; SymPy — эталон для сверки.

Правило из учебника: (xⁿ)′ = n·xⁿ⁻¹.

from sympy import symbols, diff

x = symbols("x")

f = x**4 - 3*x**2 + 5*x - 7
df = diff(f, x)

print("f(x)  =", f)
print("f'(x) =", df)
print("f'(1) =", df.subs(x, 1))

Что выведет:

f(x)  = x**4 - 3*x**2 + 5*x - 7
f'(x) = 4*x**3 - 6*x + 5
f'(1) = 3

Разбор по строкам:

Строка Смысл
f = x**4 - 3*x**2 + .. Запись функции; каждый член — отдельное слагаемое
diff(f, x) «Производная f по x»; второй аргумент обязателен
4*x**3 - 6*x + 5 (x⁴)′=4x³, (−3x²)′=−6x, (5x)′=5, (−7)′=0
df.subs(x, 1) Значение производной в точке x = 1; для отчёта «найти f′(1)»

Что поменять: коэффициенты в f = ..; для f′(2) подставьте df.subs(x, 2).


Производная sin x и cos x

Зачем: таблица производных (sin)′ = cos, (cos)′ = −sin; плюс правило произведения для sin x · cos x.

from sympy import symbols, diff, sin, cos, simplify

x = symbols("x")

print("(sin x)' =", diff(sin(x), x))
print("(cos x)' =", diff(cos(x), x))

prod = sin(x) * cos(x)
d_prod = diff(prod, x)
print("(sin x * cos x)' =", d_prod)
print("Упрощённо:", simplify(d_prod))

Что выведет:

(sin x)' = cos(x)
(cos x)' = -sin(x)
(sin x * cos x)' = -sin(x)**2 + cos(x)**2
Упрощённо: cos(2*x)

Разбор:

  • from sympy import sin, cosне math.sin: модуль math не знает символ x.
  • (sin x · cos x)′ — правило произведения; simplify сворачивает в cos(2x) через формулу двойного угла.
  • Минус у (cos x)′ — частая ошибка в ДЗ; сверяйте знак.

Вторая производная и точка перегиба

Зачем: «найти f''(x)», «где f''(x) = 0» — черновик к исследованию функции.

from sympy import symbols, diff, solve, Eq

x = symbols("x")

f = x**3 - 6*x**2 + 9*x
f1 = diff(f, x)
f2 = diff(f, x, 2)

print("f(x)   =", f)
print("f'(x)  =", f1)
print("f''(x) =", f2)
print("f''(x) = 0 при x =", solve(Eq(f2, 0), x))

Что выведет:

f(x)   = x**3 - 6*x**2 + 9*x
f'(x)  = 3*x**2 - 12*x + 9
f''(x) = 6*x - 12
f''(x) = 0 при x = [2]

Разбор:

  • diff(f, x, 2) — вторая производная; то же, что два раза diff(f, x).
  • solve(Eq(f2, 0), x) — где f'' обнуляется; x = 2 — кандидат в точку перегиба (нужна ещё смена знака f'').
  • Полный график — Matplotlib; SymPy даёт формулы, график — «картинка для отчёта».

Частная производная (2–3 курс, несколько переменных)

Зачем: f(x, y) = x²y + sin y — «найти ∂f/∂x и ∂f/∂y»; одна буква «замирает», как константа.

from sympy import symbols, diff, sin

x, y = symbols("x y")

f = x**2 * y + sin(y)

df_dx = diff(f, x)
df_dy = diff(f, y)

print("f(x,y) =", f)
print("∂f/∂x =", df_dx, "  (y как константа)")
print("∂f/∂y =", df_dy, "  (x как константа)")

Что выведет:

f(x,y) = x**2*y + sin(y)
∂f/∂x = 2*x*y   (y как константа)
∂f/∂y = x**2 + cos(y)   (x как константа)

Разбор:

  • diff(f, x) — y не меняется → множитель y остаётся при (x²)′ = 2x.
  • diff(f, y) — x² как число → производная y равна x²; (sin y)′ = cos y.
  • Смешанная ∂²f/∂x∂y: diff(f, x, y).

Упрощение — раскрыть скобки, sin²+cos², разложить

Зачем: «приведите к виду…», «докажите тождество» — SymPy сокращает рутину.

from sympy import symbols, expand, factor, simplify, sin, cos

x = symbols("x")

expr1 = (x + 3)**2
expr2 = sin(x)**2 + cos(x)**2
expr3 = x**2 - 9

print("Раскрыть (x+3)²     :", expand(expr1))
print("sin²x + cos²x       :", simplify(expr2))
print("Разложить x² - 9    :", factor(expr3))

Что выведет:

Раскрыть (x+3)²     : x**2 + 6*x + 9
sin²x + cos²x       : 1
Разложить x² - 9    : (x - 3)*(x + 3)

Разбор:

Функция Когда использовать
expand Нужны слагаемые без скобок
factor Нужны множители (корни видны)
simplify «Сделайте проще» — SymPy сам выбирает шаги

Подстановка числа — найти f(2) и f′(2)

Зачем: формула уже есть, нужно число для таблицы или ответа «в точке x₀».

from sympy import symbols, diff, Rational

x = symbols("x")

f = x**3 - 2*x
df = diff(f, x)

x0 = 2
print("f(2)  =", f.subs(x, x0))
print("f'(2) =", df.subs(x, x0))

half = Rational(1, 2)
print("f(1/2) =", f.subs(x, half))

Что выведет:

f(2)  = 4
f'(2) = 10
f(1/2) = -7/8

Разбор:

  • .subs(x, x0) — «везде вместо x поставь x0»; работает и для df.
  • Rational(1, 2) — точная дробь ½; результат −7/8, а не −0.8750000001.
  • Несколько букв: expr.subs({x: 1, y: 2}).

Предел — замечательный lim sin x / x

Зачем: первый курс, «доказать, что предел равен 1» — SymPy знает таблицу.

from sympy import symbols, limit, sin, oo

x = symbols("x")

L1 = limit(sin(x)/x, x, 0)
L2 = limit(1/x, x, oo)

print("lim sin(x)/x при x→0 =", L1)
print("lim 1/x при x→+∞     =", L2)

Что выведет:

lim sin(x)/x при x→0 = 1
lim 1/x при x→+∞     = 0

Разбор:

  • limit(выражение, x, точка) — x стремится к точке; 0 — обычное число.
  • oo — бесконечность SymPy (две буквы o); импорт from sympy import oo.
  • Для предела слева/справа: limit(.., x, 0, dir='+').

Неопределённый интеграл

Зачем: «найти первообразную» — обратная операция к производной; константу C в школе дописывают от руки.

from sympy import symbols, integrate, diff

x = symbols("x")

f = x**3 - 3*x
F = integrate(f, x)

print("f(x) =", f)
print("∫f dx =", F, "+ C")
print("Проверка: (F)' =", diff(F, x))

Что выведет:

f(x) = x**3 - 3*x
∫f dx = x**4/4 - 3*x**2/2 + C
Проверка: (F)' = x**3 - 3*x

Разбор:

  • integrate(f, x) — первообразная; SymPy не пишет + C — добавьте в отчёт сами.
  • diff(F, x) снова даёт f — лучшая самопроверка.
  • Определённый интеграл от 0 до 1: integrate(f, (x, 0, 1)).

Примеры по темам

1. Уравнения посложнее

1.1. Уравнение с дробью

Задача: (x + 1)/(x − 2) = 3.

from sympy import symbols, Eq, solve

x = symbols("x")

eq = Eq((x + 1)/(x - 2), 3)
solutions = solve(eq, x)

print("Уравнение:", eq)
print("Корни:", solutions)
for s in solutions:
    print(f"  x = {s}: левая часть = {(x + 1)/(x - 2).subs(x, s)}")

Что выведет:

Уравнение: Eq((x + 1)/(x - 2), 3)
Корни: [7/2]
  x = 7/2: левая часть = 3

Разбор:

  • SymPy умножает обе части на (x − 2) символьно.
  • ОДЗ: x ≠ 2; если корень обнуляет знаменатель — отбросить вручную.
  • Дробный ответ 7/2 — это 3.5; для отчёта можно float(7/2).

1.2. Уравнение с параметром a

Задача: ax + 2 = 8 → выразить x через a.

from sympy import symbols, Eq, solve

x, a = symbols("x a")

eq = Eq(a*x + 2, 8)
sol = solve(eq, x)

print("x =", sol[0])
print("При a = 2:", sol[0].subs(a, 2))

Что выведет:

x = 6/a
При a = 2: 3

Разбор:

  • Ответ 6/a — общая формула; при a = 0 уравнение 2 = 8нет решений; SymPy это отдельно не расписывает.
  • Для курсовой с параметром перебирайте a = 0 вручную.

2. Исследование функции

2.1. Экстремумы — где f′(x) = 0

Задача: f(x) = x³ − 3x² + 2 — найти критические точки и знак f''.

Что выведет:

f'(x) = 3*x**2 - 6*x
f'(x) = 0 при x = [0, 2]

  x = 0, f'' = -6 → максимум?
  x = 2, f'' = 6 → минимум?

Разбор:

  • critical — точки, где касательная горизонтальна.
  • f'' > 0 → «чаша вверх» → минимум; f'' < 0 → максимум (для гладких f).
  • График для наглядности — построить f(x) в Matplotlib.

2.2. Сложная функция — sin(x² + 1)

Зачем: цепное правило (сложная функция) — частая ошибка в ДЗ.

from sympy import symbols, diff, sin

x = symbols("x")

f = sin(x**2 + 1)
df = diff(f, x)

print("f(x)  =", f)
print("f'(x) =", df)

Что выведет:

f(x)  = sin(x**2 + 1)
f'(x) = 2*x*cos(x**2 + 1)

Разбор:

  • Внешняя sin → cos; внутренняя (x²+1) → 2x; перемножаем: 2x·cos(x²+1).
  • Сверьте с ручным решением — если совпало, цепочка правильная.

2.3. Физика — путь и скорость (производная по времени)

Задача: s(t) = 5t² + 2t — найти v(t) = s′(t) и v при t = 3.

from sympy import symbols, diff

t = symbols("t")

s = 5*t**2 + 2*t
v = diff(s, t)

print("s(t) =", s, "  (метры)")
print("v(t) = s'(t) =", v, "  (м/с)")
print("v(3) =", v.subs(t, 3), " м/с")

Что выведет:

s(t) = 5*t**2 + 2*t   (метры)
v(t) = s'(t) = 10*t + 2   (м/с)
v(3) = 32  м/с

Разбор:

  • Буква t — время; symbols("t") так же, как x.
  • (5t²)′ = 10t, (2t)′ = 2 — равномерное ускорение в модели.

3. Красивый вывод и LaTeX

Зачем: вставить формулу в Word/Overleaf без ручного набора дробей.

from sympy import symbols, diff, sin, latex

x = symbols("x")
f = sin(x)/x
df = diff(f, x)

print("Производная (обычный print):")
print(df)
print()
print("LaTeX для отчёта:")
print(latex(df))

Что выведет (LaTeX-строка):

LaTeX для отчёта:
\frac{x \cos{\left(x \right)} - \sin{\left(x \right)}}{x^{2}}

Разбор:


4. Переиспользуемые шаблоны

4.1. Решить уравнение и проверить корни

Разбор:

  • equation.lhs / .rhs — левая и правая части уравнения.
  • Цикл для каждого корня — у квадратного их два, проверять оба.
  • Вынесите в функцию — для контрольной меняете только Eq(..).

4.2. Производная n-го порядка

from sympy import symbols, diff, sin

def nth_derivative(expr, variable, n=1):
    return diff(expr, variable, n)

x = symbols("x")
print("4-я производная sin(x) =", nth_derivative(sin(x), x, 4))

Что выведет: sin(x) — цикл sin → cos → −sin → −cos → sin.


4.3. Шаблон «своя задача за 30 секунд»

Скопируйте, заполните три строки с # ←:

from sympy import symbols, Eq, solve, diff

x = symbols("x")

# ← Ваше уравнение, например 3*x - 1 = 8
equation = Eq(3*x - 1, 8)

# ← Или ваш многочлен для производной
f = x**3 - x

print("Корни:", solve(equation, x))
print("f'(x) =", diff(f, x))

Частые задания из школы и вуза

Задание Раздел
Решить 2x + 5 = 13 Линейное
x² − 7x + 12 = 0 Квадратное
Найти D и корни Дискримinant
x + y = 5, x − y = 1 Система
Производная x³ − 4x Многочлен
(sin x · cos x)′ sin и cos
f''(x), точка перегиба Вторая производная
∂f/∂x для x²y Частная
lim sin x / x Предел
∫ (x³ − 3x) dx Интеграл
Экстремум x³ − 3x² Экстремумы
Формула в LaTeX LaTeX
Как сдавать работу

В тетради — полное решение от руки с обоснованием.

SymPy — проверка и черновик, если преподаватель разрешает калькулятор/компьютер. Для отчёта: формула из `latex(..)` → LaTeX; график f(x) → Matplotlib.

SymPy и Wolfram Alpha / калькулятор

Wolfram Alpha в браузере делает то же символьно — удобно на телефоне.

SymPy выгоден, когда ответ нужно встроить в Python-скрипт (лабораторная, автопроверка ДЗ, 100 задач в цикле).

Калькулятор Casio — только числа;

SymPy — формулы и точные дроби.


См. также