Вывод формул и LaTeX; SymPy против SciPy

SymPy не только считает — он красиво печатает формулы в LaTeX для научных статей. И финальный вопрос раздела: символьное или численное?

LaTeX — стандарт набора математических формул в научных публикациях; SymPy умеет автоматически переводить свои выражения в LaTeX-код.

Зачем печатать LaTeX

Учёный выводит формулу — и ему надо вставить её в статью, презентацию или диссертацию, где математика набирается в LaTeX. Переписывать вручную сложную формулу — мучительно и чревато опечатками. SymPy решает это: вывел формулу символьно, нажал latex(expr) — получил готовый код для вставки. Никаких ручных \frac и \sqrt.

SymPy печатает LaTeX

import sympy as sp
x = sp.symbols("x")

expr = sp.Integral(x**2, (x, 0, 1))
print(sp.latex(expr))     # \int\limits_{0}^{1} x^{2}\, dx

deriv = sp.diff(sp.sin(x)/x, x)
print(sp.latex(deriv))    # \frac{\cos{(x)}}{x} - \frac{\sin{(x)}}{x^{2}}

quad = sp.solve(x**2 + sp.symbols("b")*x + 1, x)
print(sp.latex(quad[0]))  # формула корня в LaTeX

В Jupyter ещё лучше: SymPy рендерит формулы как настоящую математику прямо в блокноте — без ручного LaTeX вообще.

Простой «LaTeX-генератор» руками

Чтобы понять идею, напишем крошечный конвертер дроби в LaTeX на stdlib — SymPy делает то же, но для любых выражений:

def fraction_to_latex(numerator, denominator):
    return "\\frac{" + str(numerator) + "}{" + str(denominator) + "}"

def power_to_latex(base, exp):
    return str(base) + "^{" + str(exp) + "}"

print(fraction_to_latex("x", "2"))        # \frac{x}{2}
print(power_to_latex("x", "3"))           # x^{3}
print(fraction_to_latex(power_to_latex("x", 2), "y"))  # \frac{x^{2}}{y}

Вывод:

\frac{x}{2}
x^{3}
\frac{x^{2}}{y}

Видно правило: SymPy рекурсивно обходит дерево выражения и для каждого узла вставляет нужную LaTeX-конструкцию (\frac, ^{}, \sqrt). Наш пример делает это для двух случаев — SymPy для всех.

SymPy против SciPy: финальная таблица

Теперь, изучив оба мира, сведём выбор в одну таблицу — это главный практический вывод курса:

КритерийSymPy (символьно)SciPy (численно)
Результатточная формулаприближённое число
Скоростьмедленноочень быстро
Размер задачималый/среднийогромный
Когда братьвывод формулы, точность, анализ «в буквах»данные, симуляции, массовый счёт
Пример«выведи формулу производной»«посчитай производную в 10⁶ точках»

Правило выбора и связка

Простое правило: нужна формула или точность — SymPy; нужны числа и скорость — SciPy. Но самое мощное — их связка, которую мы уже видели: SymPy выводит формулу, lambdify компилирует её, SciPy/NumPy считает массово. Так инженерную задачу решают красиво: символьно получают аналитическую зависимость (понятную, проверяемую), а потом численно подставляют конкретные данные с полной скоростью.

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

Генерация LaTeX — это, как и lambdify, обход дерева выражения, но с другим «принтером» на выходе. Где lambdify печатает Python-код, LaTeX-принтер печатает математическую разметку: узел деления → \frac{...}{...}, степень → ^{...}, корень → \sqrt{...}, функция → \sin{(...)}. SymPy имеет несколько таких «принтеров» (для LaTeX, для обычного текста, для кода на C/Fortran, для Python) — все они обходят одно и то же дерево, но по-разному его форматируют. Это элегантный пример паттерна «посетитель»: структура одна, представлений много.

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

  • Экранирование в строке. LaTeX полон обратных слешей; в Python-строке их надо удваивать или брать «сырую» строку.
  • Брать SymPy для больших численных задач. Это медленно; выведите формулу и переходите на SciPy/NumPy.
  • Забывать про связку lambdify. Не выбирайте «или-или» — самое сильное решение часто использует оба инструмента.

Итог

  • SymPy печатает формулы в LaTeX (latex(expr)) для статей и презентаций.
  • Генерация LaTeX и кода — это обход дерева разными «принтерами».
  • SymPy — для формул и точности, SciPy — для чисел и скорости.
  • Сильнейший приём — связка: SymPy выводит формулу → lambdify → SciPy считает.
Проверьте себя
1. Зачем SymPy умеет выводить LaTeX?
AДля ускорения вычислений
BЧтобы автоматически получить код формулы для вставки в научную статью/презентацию без ручного набора
CДля решения уравнений
DДля хранения данных
2. Как правильно выбирать между SymPy и SciPy?
AВсегда SymPy — он точнее
BНужна формула или высокая точность — SymPy; нужны числа и скорость на больших данных — SciPy; сильнее всего — их связка через lambdify
CВсегда SciPy — он быстрее
DОни взаимозаменяемы
3. Что общего у генерации LaTeX и работы lambdify в SymPy?
AНичего
BОба обходят одно и то же дерево выражения, но печатают его по-разному (LaTeX-разметка vs Python-код) — паттерн «посетитель»
CОба решают уравнения
DОба ускоряют SciPy