Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
ГЛАВА 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] |
Последнее изменение этой страницы: 2017-03-17; Просмотров: 388; Нарушение авторского права страницы