Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Глава 7 символьные вычисления

Поиск

В предыдущих главах рассматривались численные процедуры MATLAB, выполняемые с аргументами, заданными в виде чисел или числовых массивов. В состав MATLAB входит пакет Symbolic Math ToolBox, который добавил к системе возможность символьных вычислений. Помимо типовых аналитических вычислений (таких, как упрощение математических выражений, подстановка, нахождение пределов, дифференцирование, интегрирование, интегральные преобразования, получение решений уравнений и систем уравнений, включая дифференциальные и т. д.), пакет Symbolic позволяет реализовывать арифметические операции с любой точностью. Функции пакета Symbolic реализуют интерфейс между средой MATLAB и ядром Maple системы аналитических вычислений или системы компьютерной алгебры канадского университета Waterloo, причем работа в MATLAB не требует установки Maple. Система Maple в своем ядре и в расширениях имеет около 3000 функций. Система MATLAB с пакетом Symbolic, включающим в себя около сотни символьных команд и функций, намного уступает Maple по их количеству. Однако пользователь, имеющий опыт работы в Maple, может напрямую обращаться ко всем командам и процедурам этой системы (кроме графических), написанным на встроенном языке Maple (см. раздел 7.17). Способы получения справочной информации по пакету Symbolic рассмотрены в приложении 1.

Символьные переменные, константы и выражения

 

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

Для создания символьных переменных или объектов используется команда sym.

Например, команда

>>x=sym('x')

x =

x

возвращает символьную переменную с именем 'x' и записывает результат в х.

Команда x=sym('x','real') дополнительно определяет x как вещественную переменную. Аналогично x=sym('x','positive') определяет x как положительную (вещественную) переменную, а x=sym('x','unreal') – как чисто формальную переменную (т. е. не обладающую никакими дополнительными свойствами).

Для создания группы символьных объектов служит команда syms.

Команда

>> syms a b c

создает символьные переменные с именами a, b, c.

Команда

>> Pi=sym('pi');

создает символьное число Pi = π, не обладающее погрешностью представления числа π в формате с плавающей запятой. Результаты операций с символьным Pi выражаются не в числовой, а в символьной форме. Следовательно, пакет Symbolic позволяет получить точные значения тригонометрических функций (и их рациональных комбинаций) от аргумента π в виде выражений, включающих квадратные корни из рациональных чисел, если такие выражения существуют и могут быть найдены системой. Например, точное значение sin равно

>> S=sin(Pi/5)

S =

1/4*2^(1/2)*(5-5^(1/2))^(1/2)

Символьное выражение S выведено в командное окно в одну строку.

Команда pretty(S) выводит в командное окно символьное выражение S в формате близком к математическому:

>> pretty(S)

1/2 1/2 1/2

1/4 2 (5 - 5)

Теперь очевидно, что

sin =.

Символьное выражение можно создать при помощи команды sym, входным аргументом которой является строка с выражением, заключенным в апострофы.

Например,

>> F=sym('x+y')

F =

x+y

Команда syms без аргументов выводит список символьных объектов, имеющихся в рабочем пространстве.

При запросе о наличии символьных переменных в памяти после выполнения предыдущего примера

>> syms

'F'

получен ответ 'F', т. е. входящие в выражение переменные x и y не являются символьными. Их нельзя использовать в качестве аргументов в дальнейших символьных вычислениях.

Изменим рассмотренный выше ввод символьного выражения F следующим образом:

>> syms x y

>> F=x+y

F =

x+y

>> syms

'F' 'x' 'y'

Теперь переменные x и y вначале получили статус символьных, а сконструированное из них выражение F приобрело статус символьного автоматически.

Вычисления с использованием арифметики произвольной точности

 

MATLAB обычно ведет вычисления с числами, представленными в формате плавающей точки с двойной точностью. Это довольно высокая точность, обеспечивающая потребности практических вычислений в прикладных задачах. Однако ряд задач теории чисел, численного кодирования и некоторых других требует выполнения вычислений вообще без какой - либо погрешности или со сколь угодно малой погрешностью. Такие вычисления не очень удачно называют арифметикой произвольной точности: правильнее говорить о точной арифметике.

Для проведения вычислений в арифметике произвольной точности служит команда vpa:

R=vpa(S) – возвращает результат вычислений символьного выражения S, используя арифметику произвольной точности с текущим числом цифр D, установленным функцией digits. Результат R имеет тип sym;

R=vpa(S,D) – возвращает результат вычислений выражения S с текущим числом цифр D.

Переменная S может быть символьным массивом.

Примеры:

>>vpa(exp(1),50)

ans =

2.7182818284590455348848081484902650117874145507813

>>vpa([2*pi,exp(1),log(2)],10)

ans =

[ 6.283185308, 2.718281828,.6931471806]

Команда digits служит для установки числа цифр в числах арифметики произвольной точности. Она используется в одном из следующих вариантов:

digits – возвращает число значащих цифр в числах арифметики произвольной точности (по умолчанию 32);

digits(D) – устанавливает заданное число цифр D для арифметики произвольной точности.

Примеры вычисления числа π с 32 и 6 значащими цифрами:

>>digits

Digits = 32

>>vpa pi

ans =

3.1415926535897932384626433832795

>> digits 6

>> vpa pi

ans =

3.14159

Команды упрощения выражений – simplify, simple

 

Команда simplify(S) упрощает символьное выражение или массив символьных выражений S. Если упрощение невозможно, то возвращается исходное выражение.

Пример для символьного выражения:

>> syms a b x

>>simplify((a^2-2*a*b+b^2)/(a-b))

ans =

a-b

Пример для вектор-столбца символьных выражений:

>> V=[sin(x)^2+cos(x)^2; log(a*b)]

V =

[ cos(x)^2+sin(x)^2]

[ log(a*b)]

>> simplify(V)

ans =

[ 1]

[ log(a*b)]

Возможности проведения упрощений с помощью команды simplify в Symbolic не обладают возможностями системы Maple в полной мере в связи с отсутствием опций, определяющих путь упрощения. Дополнительные возможности упрощения обеспечивает команда simple.

Команда simple(S) выполняет различные алгебраические преобразования символьного выражения S и выводит как промежуточные результаты, так и самый короткий результат. В модификации [R,HOW] = simple(S) промежуточные результаты не выводятся. Результат упрощений содержится в R, а в HOW указывается выполняемое преобразование. Следующие примеры иллюстрируют работу функции:

>> syms x

>> [R,HOW]=simple(cos(x)^2+sin(x)^2)

R =

HOW =

combine

>> [R,HOW]=simple(2*cos(x)^2-sin(x)^2)

R =

3*cos(x)^2-1

HOW =

simplify

>> [R,HOW]=simple(cos(x)^2-sin(x)^2)

R =

cos(2*x)

HOW =

combine

Существует более короткая модификация [R] = simple(S):

>> [R]=simple(cos(x)^2-sin(x)^2)

R =

cos(2*x)

Команда расширения выражений – expand

 

Команда expand(S) расширяет символьные выражения массива S. Рациональные выражения она раскладывает на простые дроби, полиномы – на полиномиальные выражения и т. д. Функция работает со многими алгебраическими и тригонометрическими функциями.

Примеры:

>>syms a b x

>>S=[(x+2)*(x+3)*(x-4),sin(2*x)];

>>expand(S)

ans =

[ x^3+x^2-14*x-24, 2*sin(x)*cos(x)]

>>expand(sin(a+b))

ans =

sin(a)*cos(b)+cos(a)*sin(b)

>>expand((a+b)^3)

ans =

a^3+3*a^2*b+3*a*b^2+b^3

Разложение выражений на простые множители – команда factor

 

Команда factor(S) поэлементно разлагает символьные выражения массива S на простые множители, а целые числа – на произведение простых чисел.

Примеры:

>>x=sym('x');

>>factor(x^7-1)

ans =

(x-1)*(x^6+x^5+x^4+x^3+x^2+x+1)

>>factor(sym('123456789'))

ans =

(3)^2*(3803)*(3607)

Пусть требуется найти определитель D (команда det) и обратную матрицу A-1 (команда inv) символьной матрицы

 

A =.

>> syms a b

>> A=[a b;a^2 b^2]

A =

[ a, b]

[ a^2, b^2]

>> D=det(A)

D =

a*b^2-b*a^2

>> factor(D)

ans =

-a*b*(-b+a)

>> A1=inv(A)

A1 =

[ -b/a/(-b+a), 1/a/(-b+a)]

[ a/b/(-b+a), -1/b/(-b+a)]

Приведение подобных членов – команда collect

 

Команда collect(S, v) работает с символьными полиномами S нескольких переменных, где v – одна из переменных полинома. Эта функция возвращает разложение полинома S по степеням v (S может быть массивом полиномов).

Примеры:

>>syms x y

>>S=[x^3*y^2+x^2*y+3*x*y^2,x^4*y-y*x^2];

>>collect(S,x)

ans =

[ x^3*y^2+x^2*y+3*x*y^2, x^4*y-x^2*y]

>>collect(S,y)

ans =

[ (x^3+3*x)*y^2+x^2*y, (x^4-x^2)*y]



Поделиться:


Последнее изменение этой страницы: 2016-04-07; просмотров: 410; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.59.244 (0.006 с.)