Создание и работа с символьными переменными, выражениями и функциями

Тема 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():

Наши рекомендации