Тема 3.3. Символьные (аналитические) вычисления и алгебраические преобразования
Введение в символьные вычисления
Создание и работа с символьными переменными, выражениями и
Функциями
Упрощение выражений, подстановки и разложение на множетели
Вычисление сумм рядов и произведений
Вычисление пределов
Вычисление производной
Графические возможности Simbolic
Введение в символьные вычисления
Система является MatLab самой крупной системой компьютерной математики, ориентированной на матричные и численные вычисления. Однако MatLab имеет также и средства аналитических вычислений. Пакет Symbolic Math Toolbox добавил системе MatLab качественно новые возможности, связанные с выполнением символьных вычислений и преобразований, которые были доступны только в системе принципиально иного класса, относящихся к компьютерной алгебре. Теперь MatLab, с учетом новых средств, становится в полной мере универсальной системой. Последняя реализация системы символьной математики Mapleв своем ядре и в расширениях имеет около 3000 функций. Система MatLab с пакетом Symbolic, включающим в себя чуть больше сотни символьных команд и функций, намного уступает Maple по количеству таких команд и функций. Однако в данный пакет включены лишь наиболее важные и широко распространенные функции. Кроме того, есть специальная команда, которая дает доступ к ядру Maple, что заметно расширяет круг используемых функций.
С помощью команды help symbolic можно получить перечень входящих в пакет команд и функций. Для получения справки по любой команде или функции можно использовать команду help sym / name.m, где name – это имя соответствующей команды или функции, а name.m — имя m-файла, задающего данную команду или функцию. Пакет Symbolic Math Toolbox включает следующие типы математических вычислений, которые приведены в таблице 3.3.1.
Таблица 3.3.1.
Вычисления | Дифференцирование, интегрирование, пределы, суммы и произведения, разложение в ряд Тейлора |
Линейная алгебра | |
С демонстрационными примерами пакета Symbolic можно ознакомиться с помощью директории Symbolic Toolbox.
Создание и работа с символьными переменными, выражениями и функциями
Поскольку переменные системы MatLab по умолчанию не определены и традиционно задаются как векторные, матричные, числовые и т. д., то есть не имеющие отношения к символьной математике, для реализации символьных вычислений нужно прежде всего, позаботиться о создании специальных символьных переменных. В простейшем случае их можно определить как строковые переменные, заключив имена в апострофы. Например,
>> sin(x)^2 + соs(х)^2 ??? Undefined function or variable 'x'. >> sin('x')^2 + cos('x')^2 ans = >> |
Мы видим, что система MatLaв «возмутилась» нашей небрежностью и сообщила, что функция или переменная х не определена и ни о каких вычислениях синуса и косинуса речи быть не может. Вместе с тем она подсказала, как надо поступить - заключить имя переменной в апострофы, ибо таким образом система получает информацию о необходимости включить символьный режим вычислений. Поэтому во второй раз получен вполне осмысленный результат - сумма квадратов синуса и косинуса переменной 'х' выдана равной 1.
Таким образом для работы с командами ядра Mаple в MatLab необходимо создать новый символьного объекта, который фактически является строковой переменной. То есть для проведения аналитических (символьных) операций нужно, чтобы соответствующие переменные были предварительно объявлены с помощью функции sym():
имя_переменной = sym( ' имя_переменной ' )
Например,
>>х = sym ('x') x= x >>a=sym ('alfa') a alfa >> |
Рассмотрим пример иллюстрирующий различие между стандартными типами данных MatLabсимвольных объектов.
>>sqrt(2) ans= 1.4142 >>a=sqrt(sym(2)) a= 2^(1/2) >>double(a) ans= 1.4142 >> |
Пакет Symbolic может работать с числами различных форматов, применяемых в MatLab. Рассмотрим следующий пример:
>>1/2+3/4 ans= 1.2500 >>sym(1/2+3/4) ans= 5/4 >>pi/2 ans= 1.5708 sym(pi/2) ans= pi/2 >>sin(pi/3) ans= 0.8660 >>sym(sin(pi/3)) ans= sqrt(3/4) >>exp(1) ans= 2.7183 >>sym(exp(1)) ans= 6121026514868074*2^(-51) >> |
Необходимо обратить внимание на то, что MatLab производить вычисления с
представлением чисел в формате с плавающей точкой с двойной точности (double), в то время как пакет Symbolic стремиться представить числа в наиболее точном виде, то есть в целом или рациональном виде.
Необходимо также обратить внимание и на то, что результат символьных
преобразований отображается при выводе без отступа, которым сопровождается выдача иных результатов. Это позволяет сразу опознать его как символьный, в отличии от обычных численных результатов.
Для создания группы символьных объектов служит команда syms:
Syms argl arg2...
Например, набор команд
>>a=sym('a '); >>b=sym('b'); >>c=sym('c'); >>x=sym('x '); >> |
соответствует следующей команде
>>syms a b c x >> |
Рассмотрим еще один пример на применение команды syms.
>>syms x y1 y2 >>y1=sin(x)^2; >>y2=cos(x)^2; >>y1+y2 ans= sin(x)^2+cos(x)^2 >> |
Для работы с действительными и комплексными числами существует ряд возможностей. Прежде всего это применение опций 'real', 'unreal', 'imag'. Например,
>>x=sym('x', real); >>y=sym('y', real); >>z=x+i*y z= x+i*y >>real(z) ans= x >>imag(z) ans= y |
Функции real(z) и imag(z) обеспечивают выделение действительной и мнимой частей комплексного числа z.
Снятие наложенных ограничений на возможные значения переменных, например, определенной выше действительной переменной х, осуществляется командой
>>sym 'x', 'unreal' % или >>syms x unreal |
что делает переменную х не вещественной.
Из вышеприведенных примеров видно, что создание символьного выражения осуществляется командой
sym('символьное_выражение ')
Символьные выражения стоятся на основе переменных, констант, арифметических операторов и функций – как встроенных, так и определяемых пользователем. В выражениях могут использоваться арифметические операции. В общем случае это векторные и матричные операции. Например,
>> sym x a b >> f=(sin(x)+a)^2*(cos(x)+b^2/sqrt(abs(a+b)) f=(sin(x)+a)^2*(cos(x)+b^2/sqrt(abs(a+b)) >> |
В математических выражениях могут использоваться как обычные, так и символьные переменные. Функция findsym(S) позволяет выделить символьные переменные в составе выражения S. Онавозвращает в алфавитном порядке список всех символьных переменных выражения S. При отсутствии таковых возвращается пустая строка. Например:
>>sym x, z, y >> а =2; b = 4; >> findsym (a*x^2 + b*y + z) ans = х, у, z >>findsym(a + b + x + y + z,) ans = х, у, z >> |
Символьные переменные могут являться элементами матриц и векторов, причем с ними можно выполнять различные операции. Например,
>>syms a b c d >>M=[a b; c d] M= [ a, b] [ c, d] >> inv(M) ans= [ d/(a*d-b*c), -b/(a*d-b*c)] -c/(a*d-b*c), a/(a*d-b*c)] >> |
MatLab в отличие от современных систем MathCad, Maple или Mathematica, пока не способна выводить выражения и результаты их преобразований в естественной математической форме с использованием общепринятых спецзнаков для отображения интегралов, сумм, произведений и т. д. Тем не менее некоторые ограниченные текстовым форматом возможности близкого к математическому виду вывода обеспечивает функция pretty(S). Она позволяет вывести выражения S в формате, приближенном к математическому формату, например,
>> syms x a b >> f=(sin(x)+a)^2*(cos(x)+b)^2/sqrt(abs(a+b)) f=(sin(x)+a)^2*(cos(x)+b)^2/sqrt(abs(a+b)) >> pretty(f) 2 2 (sin(x) + a) (cos(x) + b) ------------------------------- 1/2 | a + b | >> |
Символьные операции позволяют находить или точные значения выражения или значения со сколь угодно большой точностью. Как известно для преобразования значения числовой переменной в символьную служит функция sym(). Причем при переходе от числовых к символьным выражениям по умолчанию используется запись чисел в виде рациональной дроби. Использование рациональных дробей при выполнении символьных вычислений означает, что всегда получается точный результат, не содержащий погрешность округления.
Для вычисления символьного выражения с заданной точностью предназначена функция vpa():