Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Matlab_лек.8_Символьные вычисл_Текст.docx
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
183 Кб
Скачать
☆

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