- •2. Matlab.
- •2.9. Символьные вычисления в Matlab.
- •2.9.1. Символьные переменные и функции [1, с. 751].
- •2.9.2. Матрицы и векторы.
- •2.9.3. Вычисления с символьными переменными.
- •2.9.4. Графическое представление функций.
- •2.9.5. Упрощение и преобразование символьных выражений [1, с. 760].
- •2.9.6. Другие возможности символьных преобразований в matlab.
- •2.9.7.Решение уравнений и систем в символьном виде.
- •2.10. Интерактивное взаимодействие м-функиий с пользователем [2, с. 185].
- •2.9.6.1. Численное вычисление интегралов в Matlab.
- •2.11. Работа со строками [1, с. 386].
- •2.11.1. Ввод и сцепление строк.
- •2.11.2. Сервисные функции для работы со строками.
- •2.11.3. Массивы строк.
- •2.11.4. Еще некоторые функции для работы со строковыми переменными.
- •2.11.5. Структуры.
- •2.12. Текстовые файлы [1, с. 392].
2.9.2. Матрицы и векторы.
Символьные переменные могут являться элементами матриц и векторов. Элементы строк матриц при вводе отделяются пробелами или запятыми, а столбцов - точкой с запятой, так же как и для обычных матриц. В результате образуются символьные матрицы и векторы, к которым применимы матричные и поэлементные операции и встроенные функции.
» syms a b c d e f g h
» А = [а b; с d]
А =
[ а, b]
[с, d]
» B= [е, f; g, h]
В =
[ e, f]
[ g, h]
» С = А*В
С =
[ а*е + b*g, a*f + b*h]
[ с*е + d*g, c*f + d*h]
» F = A.*B
F =
[ a*e, b*f]
[ g*c, d*h]
Конструирование блочных символьных матриц (конкатенация массивов) не отличается от числовых; также объединение возможно только по одинаковым размерам блоков:
» D = [С А; В С]
D =
[ а*е + b*g, a*f + b*h, a, b]
[ с*е + d*g, c*f + d*h, с, d]
[ e, f, a*e + b*g, a*f + b*h]
[ g, h, c*e + d*g, c*f + d*h]
Обращение к элементам символьных матриц и векторов производится, также как и для числовых, при помощи индексации, в том числе с использованием знака “двоеточия” и вектора со значениями индексов:
» d2 = D(2, :)
d2 =
[ с*е + d*g, c*f + d*h, с, d]
» d = d2([l 3 4])
d =
[ c*e + d*g, c, d]
Для удаления строк или столбцов символьных матриц используется пустой массив
» D(l:2, :) = [ ]
D =
[ e, f, a*e + b*g, a*f + b*h]
[ g, h, c*e + d*g, c*f + d*h]
2.9.3. Вычисления с символьными переменными.
Символьные операции позволяют находить точные значения выражений или значения со сколь угодно большой точностью. Для преобразования значения числовой переменной в символьную служит функция sym. Пример ввода массива типа double array :
» А = [1.3 -2.1 4.9 % используется при вводе клавиша Enter вместо знака ;
6.9 3.7 8.5] ;
Создание символьного массива, соответствующего массиву А :
» B = sym(A)
В =
[ 13/10, -21/10, 49/10]
[ 69/10, 37/10, 17/2]
При переходе от числовых к символьным выражениям по умолчанию используется запись чисел в виде рациональной дроби. Возможны и другие формы представления чисел в символьном виде, которые определяются значением второго входного аргумента функции sym (см. разд. MATLAB: Symbolic Math Toolbox: Function Reference справочной системы).
Создание вектора-столбца :
» с = [3.2; 0.4; -2.1];
Создание символьного представления вектора с :
» d = sym(с);
Результат перемножения матрицы В на вектор d является символьной переменной, причем все вычисления выполняются над рациональными дробями:
» е = B*d
е =
[ -697/100]
[ 571/100]
Использование рациональных дробей при выполнении символьных вычислений означает, что всегда получается точный результат, не содержащий погрешность округления. Убедиться в вышесказанном можно на простом примере. Если установить формат long e для отображения максимально возможного числа значащих цифр для значений числовых переменных и найти сумму чисел 1010 и10-10, то результат будет иметь следующий вид:
» format long e
» 1.0е+10 + 1.0е-10
ans =
1.000000000000000e+010
Если записать каждое из чисел в символьные переменные и снова вычислить сумму, то :
» large = sym(l.0el0);
» small = sym(1.0e-10);
» s = large + small
s = 100000000000000000001/10000000000
Рациональная дробь является точным значением суммы. Разумеется, символьные вычисления требуют больших затрат компьютерных ресурсов по сравнению с обычными.
Вычисления с рациональными дробями позволяют получить значение символьного выражения с любой степенью точности, т. е. найти сколь угодно много значащих цифр результата. Для вычисления символьных выражений предназначена функция vpa:
» с = sym('sqrt(2) ') ;
» cn = vpa(с)
сn = 1.4142135623730950488016887242097
По умолчанию удерживается 32 значащие цифры (с учетом точки). Второй дополнительный входной параметр vpa служит для задания точности:
» cn = vpa(c, 70)
сn =
1.414213562373095048801688724209698078569671875376948073176679737990732
Примечание : второй аргумент vpa задает удерживаемое число значащих цифр только для данного вызова vpa. Для глобальной установки применяется функция digits, во входном аргументе которой указывается требуемое количество цифр.
Важно понимать, что выходной параметр (cn) функции vpa является символьной переменной:
» whos сn
Namе Size Bytes Class
cn 1x1 266 sym object
Для перевода символьных переменных в числовые, т. е. в переменные типа
double array, используется функция double:
» сnun = double(cn)
cnun =
1.41421356237310
