Читайте также: |
|
Цель работы
Получение практических навыков работы с пакетом MatLab при вычислениях в символическом виде.
Основы СимВоЛиЧЕСКИХ выЧИСЛЕНИЙ В MATLAB
Символические переменные и функции
В состав MatLab входит ToolBox Symbolic Math, предназначенный для вычислений в символическом виде. Преобразование выражений, определение аналитических решений задач линейной алгебры, дифференциального и интегрального исчисления, получение численных результатов с любой точностью - вот далеко не полный перечень возможностей, предоставляемых ToolBox.
Символические переменные и функции являются объектами класса sym object, в отличие от числовых переменных, которые содержатся в массивах double array. Символический объект создается при помощи функции syms.
Команда
>> syms x a b
создает три символические переменные x, a, b. Конструирование символических функций от переменных класса sym object производится с помощью обычных арифметических операций и обозначений для встроенных математических функций, например:
>> f=(sin(x)+a)^2*(cos(x)+b)^2/sqrt(abs(a+b))
f=
(sin(x)+a)^2*(cos(x)+b)^2/abs(a+b)^(1/2)
Запись формулы в одну строку не всегда удобна, более естественный вид в виде дроби позволяет получить функция pretty:
>> pretty(f)
2 2
(sin(x) + a) (cos(x) + b)
---------------------------
1/2
| a + b |
Определенная функция f также является символической, в чем не трудно убедиться при помощи команды whos.
Имеющиеся символические переменные и функции позволяют образовывать новые символические выражения:
>> syms y
>> g=(exp(-y)+1)/exp(y)
g =
(exp(-y)+1)/exp(y)
>> h=f*g
h =
(sin(x)+a)^2*(cos(x)+b)^2/abs(a+b)^(1/2)*(exp(-y) +1)/exp(y)
>> pretty(h)
2 2
(sin(x) + a) (cos(x) + b) (exp(-y) + 1)
-----------------------------------------
1/2
| a + b | exp(y)
Символическую функцию можно создать без предварительного объявления переменных при помощи функции sym, входным аргументом которой является строка с выражением, заключенным в апострофы:
>> z=sym('c^2/(d+1)')
z =
c^2/(d+1)
>> pretty(z)
c
-----
d + 1
Замечание 1
Функция sym может быть использована для объявления символических переменных. Команда syms a b с эквивалентна последовательности команд a=sym('a'), b=sym('b'), с=sym('c'):
>> syms a b c
>> whos a b c
Name Size Bytes Class
a 1x1 126 sym object
b 1x1 126 sym object
c 1x1 126 sym object
Grand total is 6 elements using 378 bytes
>> a1=sym('a1'), b1=sym('b1'), c1=sym('c1')
a1 =
a1
b1 =
b1
c1 =
c1
>> whos a1 b1 c1
Name Size Bytes Class
a1 1x1 128 sym object
b1 1x1 128 sym object
c1 1x1 128 sym object
Grand total is 9 elements using 384 bytes
При работе в области комплексных чисел следует указать, что определяемые переменные являются в общем случае комплексными. Комплексные символические переменные задаются командой syms с опцией unreal. Опция real означает, что переменные трактуются как вещественные.
Рассмотрим пример, где результат символических вычислений зависит от того, какие символические переменные используются - вещественные или комплексные. Объявим две вещественные переменные a и b, и образуем комплексное число, считая, что a является действительной частью, а b - мнимой, затем найдем сопряженное к нему число при помощи conj:
>> syms a b real
>> p=conj(a+i*b)
p =
a-i*b
Произведем аналогичные действия, предварительно объявив a и b комплексными символьными переменными:
>> syms a b unreal
>> q=conj(a+i*b)
q =
conj(a+i*b)
Таким образом, в общем случае p ¹ q.
Символические переменные могут являться элементами векторов и матриц. Элементы строк матриц при вводе отделяются пробелами или запятыми, а столбцов - точкой с запятой, так же как и при вводе обычных матриц. В результате образуются символические матрицы и векторы, к которым применимы матричные и поэлементные операции, а также встроенные функции. Рассмотрим пример ввода и умножения двух символических матриц:
>> syms a b c d e f g h
>> A=[a b;c d]
A =
[ a, b]
[ c, d]
>> B=[e f; g h]
B =
[ e, f]
[ g, h]
>> C=A*B
C =
[ a*e+b*g, a*f+b*h]
[ c*e+d*g, c*f+d*h]
Функция sym позволяет преобразовывать значения числовых переменных в символические. Введите числовую матрицу A и преобразуйте ее в символическую матрицу B:
>> A=[1.3 -2.1 4.9
6.9 3.7 8.5]
A =
1.3000 -2.1000 4.9000
6.9000 3.7000 8.5000
>> B=sym(A)
B =
[ 13/10, -21/10, 49/10]
[ 69/10, 37/10, 17/2]
При переходе от числовых выражений к символическим используется запись числа в виде рациональной дроби. Использование рациональных дробей при выполнении символических вычислений позволяет всегда получать точный результат, не содержащий погрешности округления. Убедиться в этом можно на следующем простом примере. Установите формат long для отображения максимально возможного числа значащих цифр для значений числовых переменных и найдите сумму чисел и .
>> format long
>> 1.0e10+1.0e-10
ans =
1.000000000000000e+010
Теперь преобразуйте числа в символические переменные и снова вычислите сумму:
>> large=sym(1.0e10);
>> small=sym(1.0e-10);
>> s=large+small
s =
100000000000000000001/10000000000
Рациональная дробь является точным значением суммы. Понятно, что символические вычисления требуют больших временных затрат по сравнению с обычными.
Вычисление символических выражений производится с помощью функции vpa, например:
>> c=sym('sqrt(2)');
>> cn=vpa(c)
cn =
1.4142135623730950488016887242097
По умолчанию сохраняется тридцать две значащие цифры. Второй входной параметр функции vpa позволяет задавать вычисления с заданным числом разрядов, например, с 50 разрядами:
>> cn=vpa(c,50)
cn =
1.4142135623730950488016887242096980785696718753769
Выходное значение функции vpa является символической переменной, но его можно использовать в обычных вычислениях, например:
>> cn=vpa(c,50)
cn =
1.4142135623730950488016887242096980785696718753769
>> cn+2
ans =
3.4142135623730950488016887242096980785696718753769
>> cn*2
ans =
2.8284271247461900976033774484193961571393437507538
Результат арифметических операций в этих случаях получается в символических переменных. Для перевода символических переменных в числовые, т.е. переменные типа double array, используется функция double:
>> cnd=double(cn)
cnd =
1.41421356237310
Визуализация символических функций одной переменной осуществляется при помощи ezplot. Самый простой вариант использования ezplot состоит в указании символической функции в качестве единственного входного аргумента, при этом в графическое окно выводится график функции на отрезке [-2p, 2p]. Например:
>> f=sym('x*sin(x^2)^3');
>> ezplot(f)
Обратите внимание (рис. 1), что автоматически создается соответствующий заголовок. Вторым аргументом может быть задан вектор с границами отрезка, на котором требуется построить график функции:
>> ezplot(f,[-9 7])
Рис.1. График символической функции
Функция ezplot имеет некоторые отличия от своего аналога - функции fplot, применяемой к числовым функциям. В частности, возможно указание символической функции, зависящей от двух аргументов:
>> z=sym('x^2+a^3');
>> ezplot(z,[-2 1 -3 4])
Пределы изменения аргументов определяются их названиями. Первые два числа соответствуют первому по алфавиту аргументу, а последние - второму. В рассматриваемом примере a изменяется от -2 до 1, а x изменяется от -3 до 4. В графическое окно выводится линия, удовлетворяющая выражению x^2+a^3=0.
ToolBox Symbolic Math предоставляет пользователю целый набор средств для визуализации символических функций [1, 2].
Дата добавления: 2015-07-20; просмотров: 78 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
II. Актуализация | | | Упрощение и преобразование выражений |