Символьные вычисления: Symbolic Toolbox
До сих пор всё было численным; теперь — точная алгебра с символами, как в учебнике математики.
Символьные вычисления оперируют формулами и переменными точно, без перевода в числа с плавающей точкой.
Числа против символов
Всё, что мы делали раньше, было численным: 1/3 превращалось в 0.3333. Symbolic Math Toolbox позволяет работать иначе — держать 1/3 как точную дробь, а x — как настоящую неизвестную. Символьные переменные объявляют командой syms.
syms x
expr = (x + 1)^2;
expanded = expand(expr) % x^2 + 2*x + 1
factored = factor(x^2 - 1) % (x-1)(x+1)
Это уже не вычисление, а преобразование формул — раскрытие скобок, разложение на множители, упрощение. Так MATLAB становится системой компьютерной алгебры, подобной Mathematica или SymPy.
Производные и интегралы символьно
Символьное дифференцирование diff и интегрирование int дают точную формулу, а не число. Это незаменимо для вывода уравнений и проверки выкладок.
syms x
diff(x^3) % 3*x^2 — производная
int(x^2) % x^3/3 — первообразная
int(x^2, 0, 1) % 1/3 — определённый интеграл точно
Решение уравнений
Функция solve решает уравнения символьно, возвращая точные корни. Сравните с численным поиском корня fzero из прошлого раздела: solve даёт формулу, fzero — приближённое число.
syms x
solve(x^2 - 5*x + 6 == 0, x) % корни: 2 и 3 (точно)
Параллель с SymPy
Symbolic Math Toolbox — близкий аналог библиотеки SymPy в Python: те же идеи символьных переменных, упрощения, дифференцирования, решения уравнений. Если вы знакомы с SymPy, переход прост: syms x соответствует x = symbols('x'), diff и int называются почти так же. Разница в том, что в MATLAB символьный движок — отдельный платный тулбокс, тогда как SymPy — бесплатная часть экосистемы Python.
Как работает под капотом
Символьный движок MATLAB (исторически на базе ядра MuPAD) хранит выражения как деревья: узлы — операции, листья — переменные и числа. Упрощение и дифференцирование — это преобразования этого дерева по правилам алгебры, а не вычисления с числами. Поэтому символьные операции точны, но заметно медленнее численных, и не масштабируются на большие данные. Практический вывод: символику применяют для вывода формул и теоретических выкладок, а массовые расчёты — численно, переведя итоговую формулу в функцию через matlabFunction.
Частые ошибки
- Забыть
syms xперед использованиемxкак символа — иначеxвоспримется как обычная переменная. - Ждать от символики скорости численных методов — она для точности, а не для больших массивов.
- Смешивать символьные и числовые типы без явного
double(...)для финального значения.
Где символика незаменима
Символьные вычисления решают задачи, недоступные численным методам в принципе. Вывести общую формулу производной сложной функции, упростить громоздкое алгебраическое выражение, получить точное решение уравнения в радикалах, разложить функцию в ряд Тейлора, проверить тождество — всё это работа с формулами, а не с числами. Инженер использует символику на этапе вывода уравнений модели: получает аналитические соотношения, проверяет выкладки, упрощает выражения, — а уже потом переходит к численному счёту по готовым формулам. Связка двух режимов естественна: символьно вывели — численно посчитали. Функция matlabFunction как раз превращает символьное выражение в обычную численную функцию, перекидывая мост между этими мирами.
Точность против масштаба
У символики есть и обратная сторона, которую важно сознавать. Точность даётся ценой скорости: преобразование деревьев выражений несравнимо медленнее арифметики с плавающей точкой, и на больших данных символьный подход неприменим. Кроме того, не всякая задача вообще имеет символьное решение — многие уравнения принципиально не решаются в формулах, и тогда символьный движок честно вернёт неразрешённый результат или предложит численное приближение. Поэтому символику применяют точечно — там, где нужна именно формула или абсолютная точность малой задачи, — а не как замену численным методам. Понимание границ каждого инструмента и есть зрелость вычислителя.
Итоги
symsобъявляет символьные переменные для точной алгебры.diff,int,solveдают формулы и точные корни, а не числа.- Символика точна, но медленна — аналог SymPy; для расчётов переводите в численные функции.