ОВИ_ЛР_2012
.pdfможно ввести при помощи команды:
» С = [[3; 4] [-1; 2] [7; 0]]
С =
3 -1 7
4 2 0
Посмотрите переменные рабочей среды, набрав в командной строке
whos:
А2x3 48 double array
В3x3 72 double array
С2x3 48 double array
Итак, в рабочей среде содержится три матрицы, две прямоугольные и одна квадратная.
3.2.2. Обращение к элементам матриц в пакете MATLAB
Доступ к элементам матриц осуществляется при помощи двух индексов номеров строки и столбца, заключенных в круглые скобки,
например
» С(2, 3)
ans =
0
Элементы матриц могут входить в состав выражений:
» С(1, 1) + С(2, 2) + С(2, 3)
51
ans =
5
Расположение элементов матрицы в памяти компьютера определяет еще один способ обращения к ним. Матрица А размера m на n хранится в виде вектора длины mn, в котором элементы матрицы расположены один за другим по столбцам
[А(1,1) А(2,1)...А(m,1)...А(1,n) А(2,n)...А(m,n)].
Для доступа к элементам матрицы можно использовать один индекс,
задающий порядковый номер элемента матрицы в векторе.
Матрица С, определенная в предыдущем подразделе, содержится в векторе
[C(1,1) C(2,1) C(1,2) С(2,2) С(1,3) С(2,3)]
который имеет шесть компонент. Доступ к элементам матрицы осуществляется следующим образом:
» С(1)
ans =
3
» С(5)
ans =
7
52
3.2.3. Операции над матрицами в пакете MATLAB: сложение,
вычитание, умножение, транспонирование и возведение в степень
При использовании матричных операций следует помнить, что для сложения или вычитания матрицы должны быть одного размера, а при перемножении число столбцов первой матрицы обязано равняться числу строк второй матрицы. Сложение и вычитание матриц, так же как чисел и векторов, осуществляется при помощи знаков плюс и минус. Найдите сумму и разность матриц С и А, определенных выше:
» S = А+С |
|
|
S = |
|
|
6 |
0 |
6 |
6 |
6 |
3 |
» R = С-А |
|
|
R = |
|
|
0 |
-2 |
8 |
2 |
-2 |
-3 |
Следите за совпадением размерности, иначе получите сообщение об ошибке:
» S = А+В
??? Error using ==>
Matrix dimensions must agree.
Для умножения матриц предназначена звездочка:
» Р = С*В
53
P =
-25 9 11
20 26 -4
Умножение матрицы на число тоже осуществляется при помощи звездочки, причем умножать на число можно как справа, так и слева:
» Р = А*3
Р =
9 3 -3
6 12 -3
» Р = 3*А
Р =
9 3 -3
6 12 9
Транспонирование матрицы, так же как и вектора, производится при помощи .', а символ ' означает комплексное сопряжение. Для вещественных матриц эти операции приводят к одинаковым результатам:
» В' ans =
4 2 -5
3 7 1 -1 0 2
» В.' ans =
4 2 -5
3 7 1 -1 0 2
54
Замечание 1.
Если матрица A aik , i 1, n, k 1, m, есть произвольная матрица размера n m, то матрица, транспонированная по отношению к А, есть матрица размера m n: A aki , k 1, m, i 1, n . Таким образом, строки матрицы A становятся столбцами матрицы A , а столбцы матрицы A
становятся строками матрицы A .
Комплексно-сопряженная матрица получается из исходной в два этапа: выполняется транспонирование исходной матрицы, а затем все комплексные числа заменяются на комплексно-сопряженные.
Сопряжение и транспонирование матриц, содержащих комплексные числа, приведут к созданию разных матриц:
» К = [l-i, 2+3i; 3-5i, l-9i] |
|
||
К = 1.0000 – 1.0000i |
2.0000 + 3.0000i |
||
3.0000 |
– 5.0000i |
1.0000 |
– 9.0000i |
» К ' |
|
|
|
ans = |
|
|
|
1.0000 |
+ 1.0000i |
3.0000 |
+ 5.0000i |
2.0000 |
– 3.0000i |
1.0000 |
+ 9.0000i |
» К.' |
|
|
|
ans = |
|
|
|
1.0000 |
- 1.0000i |
3.0000 |
- 5.0000i |
2.0000 |
+ 3.0000i |
1.0000 |
- 9.0000i |
Замечание 2.
При вводе вектор-строк их элементы можно разделять или пробелами, или запятыми. При вводе матрицы К применены запятые для более наглядного разделения комплексных чисел в строке.
55
Возведение квадратной матрицы в целую степень производится с использованием оператора ^:
» В2 = В^2
B2 =
27 32 -6
22 55 -2 -28 -6 9
Проверьте полученный результат, умножив матрицу саму на себя.
Убедитесь, что вы освоили простейшие операции с матрицами в
MATLAB. Найдите значение следующего выражения
(A + С) В3 (A С)Т.
Учтите приоритет операций, сначала выполняется транспонирование, потом возведение в степень, затем умножение, а
сложение и вычитание производятся в последнюю очередь.
» (А+С)*В^3*(А-С)' ans =
1848 1914
10290 3612
3.2.4. Умножение матриц и векторов
Вектор-столбец или вектор-строка в MATLAB являются матрицами,
у которых один из размеров равен единице, поэтому все вышеописанные операции применимы и для умножения матрицы на вектор-столбец или вектор-строки на матрицу. Например, вычисление выражения
56
|
2 |
0 |
1 |
8 |
||
[1 3 2] |
|
4 |
8 |
1 |
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
9 |
2 |
|
4 |
|
|
|
|
|
|
|
можно осуществить следующим образом:
»a = [1 3 -2];
»B = [2 0 1; -4 8 -1; 0 9 2];
»c = [-8; 3; 4];
»a*B*c
ans = 74
3.2.5.Решение систем линейных уравнений
Вматематике ничего не говорится про деление матриц и векторов,
однако в MATLAB символ \ используется для решения систем линейных уравнений. Решим систему из трех уравнений с тремя неизвестными:
1.2x1 0.3x2 0.2x3 1.3; |
||||
|
0.5x1 2.1x2 1.3x3 3.9; |
|||
|
||||
|
0.9x 0.7x |
5.6x 5.4. |
||
|
||||
1 |
2 |
3 |
||
Введем матрицу коэффициентов системы в массив A, а вектор правой части системы в массив b. Решим систему при помощи при помощи символа \:
» x = A\b
x =
1.0000
57
1.0000
1.0000
Проверьте правильность ответа, умножив матрицу коэффициентов системы A на вектор-столбец x.
3.2.6. Блочные матрицы
Очень часто в приложениях возникают так называемые блочные матрицы, т.е. матрицы, составленные из непересекающихся подматриц
(блоков). Рассмотрим вначале конструирование блочных матриц. Введите матрицы:
1 |
4 |
2 |
0 |
3 |
3 |
8 |
9 |
||||||||
A |
1 |
4 |
|
, B |
0 |
5 |
|
, C |
3 |
3 |
|
, D |
1 |
10 |
|
|
|
|
|
|
|
|
|
||||||||
A |
B |
и создайте из них блочную матрицу K |
. |
C |
D |
Учитывая, что матрица К состоит из двух строк, в первой строке матрицы А и B, а во второй С и D, блочную матрицу можно сформировать следующим образом:
» К = [А В; С D]
K =
-1 |
4 |
2 |
0 |
-1 |
4 |
0 |
5 |
3 |
-3 |
8 |
9 |
-3 |
3 |
1 |
10 |
58
Блочную матрицу можно получить и другим способом, если считать,
что матрица К состоит из двух столбцов, в первом матрицы А и С, а во втором В и D:
» К = [[А; С] [В; D]]
Обратной задачей к конструированию блочных матриц является задача выделения блоков. Выделение блоков матриц осуществляется индексацией при помощи двоеточия. Введите матрицу
1 |
2 |
0 |
2 |
||
|
4 |
10 |
12 |
5 |
|
|
|
||||
P |
0 |
11 |
10 |
5 |
|
|
|
|
|
|
|
|
9 |
2 |
3 |
5 |
|
|
|
||||
и затем выделите подматрицу с элементами a42, a43, a52, a53 , задав номера строк и столбцов при помощи двоеточия:
»Р1 = Р(2:3,2:3)
Р1 =
1012
1110
Для выделения из матрицы столбца или строки (то есть массива, у
которого один из размеров равен единице) следует в качестве одного из индексов использовать номер столбца или строки матрицы, а другой индекс заменить двоеточием без указания пределов. Например, запишите вторую строку матрицы Р в вектор р
»p = P(2, :)
59
p =
4 10 12 5
При выделении блока до конца матрицы можно не указывать ее размеры, а использовать элемент end:
»p = Р(2, 2:end) p =
10 12 5
3.2.7. Удаление строк и столбцов
В MATLAB парные квадратные скобки [ ] обозначают пустой массив, который, в частности, позволяет удалять строки и столбцы матрицы. Для удаления строки следует присвоить ей пустой массив.
Удалите, например, первую строку квадратной матрицы:
»М =[2 0 3; 1 1 4; 6 1 3];
»M(1,:)=[];
»M
M =
1 1 4
6 1 3
Обратите внимание на соответствующее изменение размеров массива, которое можно проверить при помощи size:
» size(M)
ans =
2 3
60
