1.10 Матричные и поэлементные операции над векторами и матрицами
К матричным действиям с матрицами относятся такие операции, которые используются в матричном исчислении в математике. Базовые действия с матрицами (векторами): сложение, вычитание, транспонирование, умножение матрицы на число, умножение матрицы на матрицу, возведение квадратной матрицы в степень – осуществляются в MATLAB с помощью обычных знаков арифметических операций. Условия, при которых эти операции возможны, таковы:
при сложении или вычитании матриц они должны иметь одинаковые размеры;
при умножении матриц число столбцов первого множителя должно совпадать с числом строк второго множителя.
Невыполнение этих условий приводит к появлению сообщения об ошибке.
Приведем примеры базовых действий с матрицами
А = , D = , B = .
>> A=[0 -2 4;3 2 1];D=[-5 4 2;1 3 1];B=[-1 -2 -3;1 3 1;0 2 2];
Пример сложения и вычитания
>> disp(A+D)
-5 2 6
4 5 2
>> disp(D-A)
-5 6 -2
-2 1 0
Пример умножения на число
>> disp(3*D)
-15 12 6
3 9 3
Пример транспонирования матрицы, при котором ее строки становятся столбцами, а столбцы – строками, осуществляется с помощью оператора <'> (апостроф):
>> disp(A')
0 3
-2 2
4 1
В математике транспонированная матрица А обозначается АТ.
Знак <*> закреплен за матричным умножением векторов и матриц в смысле линейной алгебры. При этом число столбцов первой матрицы обязано равняться числу строк второй матрицы. Произведение прямоугольной матрицы An×k (таблицы чисел, расположенных в n строках и в k столбцах) на матрицу Bk×m определяется следующим образом: для того, чтобы получить элемент cij матрицы - произведения C = AB, следует элементы i - й строки матрицы А умножить на соответствующие элементы j - го столбца матрицы В и результаты сложить, т. е.
cij = .
Матрица С = Сn×m занимает n строк и m столбцов.
Пример умножения матрицы на матрицу
>> C=A*B
C =
-2 2 6
-1 2 -5
Умножение двух векторов определено в математике только для векторов одинакового размера и лишь тогда, когда один из векторов сомножителей
является строкой, а второй – столбцом. Иначе говоря, если векторы Х и У являются строками, то математический смысл имеют только две формы умножения этих векторов: U = X*Y' и V = X'*Y. Причем в первом случае результатом будет скалярное произведение векторов Х и У (число), а во втором – внешнее произведение векторов Х и Y (квадратная матрица). Приведем примеры:
>> x=[1 2 3];y=[4 5 6];
>> v=x*y'
v =
32
>> v=x'*y
v =
4 5 6
8 10 12
12 15 18
Скалярное произведение двух векторов вычисляет команда dot:
>> s=dot(x,y)
s =
32
Векторное произведение. Для трехкомпонентных векторов в MATLAB существует команда cross, которая вычисляет векторное произведение двух векторов.
Пример:
>> v1=[1 2 3];v2=[4 5 6];
>> cross(v1,v2)
ans =
-3 6 -3
Команда det(B) вычисляет определитель│B│ квадратной матрицы B.
>> d=det(B)
d =
-6
Команда обращения матрицы inv(B) вычисляет матрицу В-1, обратную заданной матрице B. Исходная матрица B должна быть квадратной, и ее определитель не должен быть равен нулю.
Пример:
>> B1=inv(B)
B1 =
-0.6667 0.3333 -1.1667
0.3333 0.3333 0.3333
-0.3333 -0.3333 0.1667
Матрица, обратная матрице В, обозначается В-1 и удовлетворяет соотношениям (В-1)-1 = B, ВВ-1 = В-1В = E, где E – единичная матрица того же порядка n, что и B.
Проверим правильность результата выполнения операции обращения матрицы B:
>> disp(inv(B1))
-1.0000 -2.0000 -3.0000
1.0000 3.0000 1.0000
0 2.0000 2.0000
В результате получили матрицу B, т. е. соотношение (В-1)-1 = B выполняется.
>> disp(B*B1)
1.0000 0 0
-0.0000 1.0000 -0.0000
0 0 1.0000
>> disp(B1*B)
1.0000 0 0
0 1.0000 0
0 -0.0000 1.0000
Соотношения ВВ-1 = В-1В = E также выполняются.
Примеры возведения квадратной матрицы в степень
>> disp(B^2)
-1 -10 -5
2 9 2
2 10 6
>> disp(B^-1)
-0.6667 0.3333 -1.1667
0.3333 0.3333 0.3333
-0.3333 -0.3333 0.1667
При возведении матрицы в целую положительную степень происходит матричное умножение матрицы на саму себя столько раз, каков показатель степени. Для отрицательных степеней вычисляется степень обратной матрицы.
Если требуется извлечь квадратный корень из матрицы, то лучше применить матричную функцию sqrtm. Матричные экспонента и логарифм вычисляются при помощи матричных функций expm и logm.
В MATLAB вводятся две новых операции (они не относятся к операциям линейной алгебры) деления матриц слева направо и справа налево. Первая операция записывается при помощи знака < / >, а вторая – при помощи знака < \ >, которые помещаются между именами двух матриц – делимого и делителя. Операция B/A эквивалентна операции B*inv(A) и ее удобно использовать для решения матричного уравнения
X*A = B,
а A\B эквивалентна inv(A)*B и является решением матричного уравнения
A*X = B.
Поэлементные действия с матрицами не являются операциями линейной алгебры, они лишь преобразуют элементы матрицы как элементы обычного двумерного массива.
Как правило, если f является одной из встроенных математических функций системы MATLAB или является заданной пользователем векторизованной функцией, то выражение f(A) представляет собой матрицу, полученную поэлементным вычислением f для A.
Пример:
>> A=[1 2 3;-2 4 0]
A =
1 2 3
-2 4 0
>> disp(sin(A))
0.8415 0.9093 0.1411
-0.9093 -0.7568 0
Кроме поэлементного преобразования матриц с помощью математических функций, в MATLAB можно выполнять поэлементные преобразования матриц с помощью арифметических операций. К таким операциям относятся операции поэлементного умножения с помощью оператора <.*> (без пробела между точкой и звездочкой), поэлементного деления <./>, обратного поэлементного деления <.\>, поэлементного возведение в степень <.^>. Операции поэлементного преобразования матриц могут выполнятся только над матрицами одинакового размера и типа. В результате получается матрица такого же размера и типа. Проиллюстрируем поэлементные преобразования матриц на матрицах A и B:
>> A=[1 2 3 4 5;-2 3 1 4 0], B=[-1 3 5 -2 1;1 8 -3 -1 2]
A =
1 2 3 4 5
-2 3 1 4 0
B =
-1 3 5 -2 1
1 8 -3 -1 2
Поэлементное умножение
>> disp(A.*B)
-1 6 15 -8 5
-2 24 -3 -4 0
Результатом поэлементного умножения матриц A и B являеся матрица, каждый элемент которой представляет собой произведение соответствующих элементов матриц A и B.
Поэлементноео деление
>> disp(A./B)
-1.0000 0.6667 0.6000 -2.0000 5.0000
-2.0000 0.3750 -0.3333 -4.0000 0
Результат – матрица, элементы которой являются частным от деления соответствующих элементов матриц A и B.
Обратное поэлементное деление
>> disp(A.\B)
Warning: Divide by zero.
-1.0000 1.5000 1.6667 -0.5000 0.2000
-0.5000 2.6667 -3.0000 -0.2500 Inf
Результатом является матрица, элементы которой являются частным от деления соответствующих элементов матриц B и A.
Поэлементное возведение в степень
>> disp(A.^B)
1.0e+003 *
0.0010 0.0080 0.2430 0.0001 0.0050
-0.0020 6.5610 0.0010 0.0003 0
При поэлементном возведении в степень каждый элемент матрицы A возводится в степень, равную соответствующему элементу матрицы B.
Обратим внимание на результат, полученный при выполнении операции A.^B. Система MATLAB выделила общий множитель 1.0e+003 * для всех элементов результирующей матрицы.
Оригинальной в MATLAB является операция прибавления к матрице числа. Она записывается таким образом: A+x или x+A (где A – матрица, а x – число). Такая операция также не относится к операциям линейной алгебры. Например:
>> disp(A+2)
3 4 5 6 7
0 5 3 6 2
>> disp(4-B)
5 1 -1 6 3
3 -4 7 5 2
При поэлементном возведении в степень показателем степени может быть не только матрица того же размера, что и исходная, но и число:
>> disp(A.^3)
1 8 27 64 125
-8 27 1 64 0
В MATLAB поэлементные операции над векторами аналогичны поэлементным операциям над матрицами.
Таким образом, система MATLAB является совершенным инструментом для работы с массивами. MATLAB позволяет выполнять мощные групповые вычисления над массивами, используя обычные математические операторы и функции. В традиционных языках программирования математические действия производятся только над скалярами. Матричные команды MATLAB чрезвычайно компактны по записи, но выполняют гигантский объем работы. Более того, матричные вычисления в MATLAB выполняются значительно быстрее, чем скалярные. Пример сравнения по быстродействию матричного и скалярного умножения двух матриц приведен в разделе 4.6.
Yandex.RTB R-A-252273-3- Основы работы и программирования, компьютерная математика Учебный курс
- Isbn ооо «Харвест», 2008
- Предисловие
- Введение
- Глава 1 знакомство с matlab и простейшие вычисления
- 1.1. Рабочая средаMatlab
- 1.2. Арифметические вычисления
- 1.3. Вещественные числа
- 1.4. Форматы вывода результата вычислений
- 1.5 Комплексные числа
- 1.6 Векторы и матрицы
- 1.7 Встроенные функции. Функции, задаваемые пользователем
- 1.8 Сообщения об ошибках и их исправление
- 1.9 Просмотр и сохранение переменных
- 1.10 Матричные и поэлементные операции над векторами и матрицами
- 1.11 Решение систем линейных уравнений
- Вопросы для самопроверки
- Глава 2 работа с массивами
- 2.1 Создание векторов и матриц
- 2.2 Применение команд обработки данных к векторам и матрицам
- 2.3 Создание специальных матриц
- 2.4 Создание новых массивов на основе существующих
- 2.5 Вычисление собственных значений и собственных векторов. Решение типовых задач линейной алгебры
- Вопросы для самопроверки
- Глава 3 м-файлы
- 3.1 Файл-программы
- 3.2 Файл-функции
- Вопросы для самопроверки
- Глава 4 программирование
- 4.1 Операторы отношения и логические операторы
- 4.2 Операторы цикла
- 4.3 Операторы ветвления
- 4.4 Оператор переключения switch
- 4.5 Оператор прерывания цикла break
- 4.6 Пример сравнения быстродействия матричных и скалярных операций
- Вопросы для самопроверки
- Глава 5 высокоуровневая графика
- 5.1 2D графика
- 5.1.1 Графики в линейном масштабе
- 5.2 Специальные виды 2d - графиков
- 5.2.1 Представление функции в виде дискретных отсчетов
- 5.2.2 Лестничные графики
- 5.2.3 Графики с указанием погрешности
- 5.2.4 Графики в логарифмическом и полулогарифмическом масштабах
- 5.2.5 Графики параметрических функций
- 5.3 3D графика
- 5.3.1 Линейчатые поверхности
- 5.3.2 Каркасные поверхности
- 5.3.3 Контурные графики
- 5.3.4 Сплошная освещенная поверхность
- 5.4 Оформление, экспорт и анимация
- 5.4.1 Оформление графиков
- 5.4.2 Сохранение и экспорт графиков
- 5.4.3 Анимация
- Вопросы для самопроверки
- Глава 6 прикладная численная математика
- 6.1 Операции с полиномами
- 6.2 Решение уравнений и их систем
- 6.3 Минимизация функции одной переменной
- 6.4 Минимизация функции нескольких переменных
- 6.5 Вычисление определенных интегралов
- 6.6 Решение дифференциальных уравнений
- 6.7 Аппроксимация и интерполяция данных
- 6.8 Интерполяция двумерных и многомерных данных
- Вопросы для самопроверки
- Глава 7 символьные вычисления
- 7.1 Символьные переменные, константы и выражения
- 7.2 Вычисления с использованием арифметики произвольной точности
- 7.3 Команды упрощения выражений – simplify, simple
- 7.4 Команда расширения выражений – expand
- 7.5 Разложение выражений на простые множители – команда factor
- 7.6 Приведение подобных членов – команда collect
- 7.7 Обеспечение подстановок – команда subs
- 7.8 Вычисление пределов – команда limit
- 7.9 Вычисление производных – команда diff
- 7.10 Вычисление интегралов – команда int
- 7.11 Разложение в ряд Тейлора – команда taylor
- 7.12 Вычисление суммы ряда – команда symsum
- 7.13 Решение уравнений и их систем – команда solve
- 7.14 Решение дифференциальных уравнений – команда dsolve
- 7.15 Прямое и обратное преобразования Лапласа – команды laplace,ilaplace
- 7.16 Графики символьных функций – команды ezplot, ezpolar
- 7.17 Прямой доступ к ядру системы Maple – командаmaple
- 7.18 Разложение рациональной дроби на сумму простейших дробей
- 7.19 Интерполяционный полином Лагранжа
- 7.20 Решение неравенств и систем неравенств
- 7.21 Разложение в ряд Тейлора функции нескольких переменных
- 7.22 Решение дифференциальных уравнений с помощью степенных рядов
- 7.23 Решение тригонометрических уравнений
- Вопросы для самопроверки
- Приложения Приложение 1. Справочная система matlab
- Приложение 2. Знакомство с пакетами расширения системыMatlab
- Приложение 3. Задания для самостоятельной работы
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Литература