Пятница, 2025-06-20, 7:22 PM
Приветствую Вас Гость | RSS
Главная | Урок 6 | Регистрация | Вход
Меню сайта
Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Программирование

    Урок 6 — Матрицы. Работа с матрицами в MatLab. Примеры

     

     

    1. Различные способы ввода матриц в пакете MatLab

    Вводить небольшие по размеру матрицы удобно прямо из командной строки. Введите матрицу размерностью два на три

    .

    Для хранения матрицы используйте двумерный массив с именем A. При вводе учтите, что матрицу А можно рассматривать как вектор-столбец из двух элементов, каждый из которых является вектор-строкой длиной три, следовательно, строки при наборе отделяются точкой с запятой:

    » А = [3  1  -1;  2  4  3] 
    А = 
    3 1   -1 
    2    4    3

    Для изучения простейших операций над матрицами приведем еще несколько примеров. Рассмотрим другие способы ввода. Введите квадратную матрицу размера три так, как описано ниже:

    .

    Начните набирать в командной строке

    » В = [4  3  -1

    Нажмите клавишу <Enter>. Обратите внимание, что пакет ничего не вычислил. Курсор мигает на следующей строке без символа ». Продолжите ввод матрицы построчно, нажимая в конце каждой строки <Enter>. Последнюю строку завершите закрывающей квадратной скобкой, получается:

    2  7  0
    -5 1  2]
    B = 
    4  3 -1
    2  7  0
    -5  1  2

    Еще один способ ввода матриц состоит в том, что матрицу можно трактовать как вектор-строку, каждый элемент которой является вектор-столбцом. Например, матрицу два на три

    можно ввести при помощи команды:

    » С = [[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

    Итак, в рабочей среде содержится три матрицы, две прямоугольные и одна квадратная.

    2. Обращение к элементам матриц в пакете MatLab

    Доступ к элементам матриц осуществляется при помощи двух индексов - номеров строки и столбца, заключенных в круглые скобки, например

    » С(2, 3) 
    ans = 
    0

    Элементы матриц могут входить в состав выражений:

    » С(1, 1) + С(2, 2) + С(2, 3) 
    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 = 

    » С(5) 
    ans = 
    7

    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.

    Для умножения матриц предназначена звездочка:

    » Р = С*В 
    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

    Замечание 1

    Если матрица  есть произвольная матрица размера n m, то матрица, транспонированная по отношению к А,есть матрица размера m n:    Таким образом, строки матрицы  становятся столбцами матрицы , а столбцы матрицы  становятся строками матрицы .
    Комплексно-сопряженная матрица получается из исходной в два этапа: выполняется транспонирование исходной матрицы, а затем все комплексные числа заменяются на комплексно-сопряженные. 

    Сопряжение и транспонирование матриц, содержащих комплексные числа, приведут к созданию разных матриц:

    »K= [l-i, 2+3i; 3-5i, l-9i] 
    К = 1.0000 – 1.0000i     2.0000 + 3.0000i
    3.0000 – 5.0000i     1.0000 – 9.0000i
    »K' 
    ans = 
    1.0000 + 1.0000i     3.0000 + 5.0000i
    2.0000 – 3.0000i     1.0000 + 9.0000i

    » K.' 
    ans = 
    1.0000 - 1.0000i     3.0000 - 5.0000i
    2.0000 + 3.0000i     1.0000 - 9.0000i

    Замечание 2

    При вводе вектор-строк их элементы можно разделять или пробелами, или запятыми. При вводе матрицы К применены запятые для более наглядного разделения комплексных чисел в строке.

    Возведение квадратной матрицы в целую степень производится с использованием оператора ^:

    » В2 = В^2
    B2 =
    27    32   -6
    22    55   -2
    -28    -6    9

    Проверьте полученный результат, умножив матрицу саму на себя. 
    Убедитесь, что вы освоили простейшие операции с матрицами в MatLab. Найдите значение следующего выражения

    (A + СВ3 (A-С)Т.

    Учтите приоритет операций, сначала выполняется транспонирование, потом возведение в степень, затем умножение, а сложение и вычитание производятся в последнюю очередь.

    »(А+С)*В^3*(А-С)' 
    ans =
    1848   1914 
    10290   3612

    4.  Умножение матриц и векторов

    Вектор-столбец или вектор-строка в MatLab являются матрицами, у которых один из размеров равен единице, поэтому все вышеописанные операции применимы и для умножения матрицы на вектор-столбец или вектор-строки на матрицу. Например, вычисление выражения

    можно осуществить следующим образом:

    » a = [1 3 -2];
    » B = [2 0 1; -4 8 -1; 0 9 2]; 
    » c = [-8; 3; 4];
    » a*B*c 
    ans =
    74

    5. Блочные матрицы

    Очень часто в приложениях возникают так называемые блочные матрицы, т.е. матрицы, составленные из непересекающихся подматриц (блоков). Рассмотрим вначале конструирование блочных матриц. Введите матрицы:  ,  ,  ,   и создайте из них блочную матрицу 
    Учитывая, что матрица К состоит из двух строк, в первой строке матрицы А и B, а во второй - С и D, блочную матрицу можно сформировать следующим образом:

    » К = [А В; С D]
    K = 
    -1   4   2   0
    -1   4   0   5
    3  -3   8   9
    -3   3   1  10

    Блочную матрицу можно получить и другим способом, если считать, что матрица Ксостоит из двух столбцов, в первом - матрицы А и С, а во втором - В и D:

    » К = [[А; С]  [В; D]]

    Обратной задачей к конструированию блочных матриц является задача выделения блоков. Выделение блоков матриц осуществляется индексацией при помощи двоеточия. Введите матрицу

    и затем выделите подматрицу с элементами    , задав номера строк и столбцов при помощи двоеточия:

    »Р1 = Р(2:3,2:3)
    Р1 =
    10   12
    11   10

    Для выделения из матрицы столбца или строки (то есть массива, у которого один из размеров равен единице) следует в качестве одного из индексов использовать номер столбца или строки матрицы, а другой индекс заменить двоеточием без указания пределов. Например, запишите вторую строку матрицы Р в вектор р

    »p = P(2, :) 
    p = 
    4  10  12  5

    При выделении блока до конца матрицы можно не указывать ее размеры, а использовать элемент end:

    »p = Р(2,  2:end) 
    p = 
    10  12  5

    6. Удаление строк и столбцов

    В 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

    Аналогичным образом удаляются и столбцы. Для удаления нескольких идущих подряд столбцов (или строк) им нужно присвоить пустой массив. Удалите второй и третий столбец в массиве M

    » М(:,  2:3) = [] 
    M = 

    6

    Индексация существенно экономит время при вводе матриц, имеющих определенную структуру.

    7. Заполнение матриц при помощи индексации

    Выше было описано несколько способов ввода матриц в MatLab. Однако часто бывает проще сгенерировать матрицу, чем вводить ее, особенно если она обладает простой структурой. Рассмотрим пример такой матрицы:

    .

    Генерация матрицы Т осуществляется в три этапа: 
    1. Создание массива T размера пять на пять, состоящего из нулей. 
    2. Заполнение первой строки единицами. 
    3. Заполнение части последней строки минус единицами до последнего элемента. 
    Соответствующие команды MatLab приведены ниже.

    » A(1:5, 1:5) = 0
    A=
    0   0   0   0   0
    0   0   0   0   0
    0   0   0   0   0
    0   0   0   0   0
    0   0   0   0   0
    » A(1, :) = 1
    A=
    1   1   1   1   1
    0   0   0   0   0
    0   0   0   0   0
    0   0   0   0   0
    0   0   0   0   0
    » A(end, 3:end) = -1
    A=
    1   1   1   1   1
    0   0   0   0   0
    0   0   0   0   0
    0   0   0   0   0
    0   0  -1  -1  -1

    Создание некоторых специальных матриц в MatLab осуществляется при помощи встроенных функций. 

    8. Создание матриц специального вида

    Заполнение прямоугольной матрицы нулями производится встроенной функцией zeros, аргументами которой являются число строк и столбцов матрицы:

    » A = zeros(3, 6)
    A = 
    0  0  0  0  0  0
    0  0  0  0  0  0
    0  0  0  0  0  0

    Один аргумент функции zeros приводит к образованию квадратной матрицы заданного размера:

    » A = zeros(3)
    A = 
    0  0  0
    0  0  0
    0  0  0

    Единичная матрица инициализируется при помощи функции eye:

    » I = eye(4)
    I= 
    1  0  0  0
    0  1  0  0
    0  0  1  0
    0  0  0  1

    Функция eye с двумя аргументами создает прямоугольную матрицу, у которой на главной диагонали стоят единицы, а остальные элементы равны нулю:

    » I = eye(4, 8)
    I = 
    1  0  0  0  0  0  0  0
    0  1  0  0  0  0  0  0
    0  0  1  0  0  0  0  0
    0  0  0  1  0  0  0  0

    Матрица, состоящая из единиц, образуется в результате вызова функции 
    ones:

    » E = ones(3, 7) 
    E =
    1  1  1  1  1  1  1
    1  1  1  1  1  1  1
    1  1  1  1  1  1  1

    Использование одного аргумента в ones приводит к созданию квадратной матрицы, состоящей из единиц.

    MatLab предоставляет возможность заполнения матриц случайными элементами. Результатом функции rand является матрица чисел, распределенных случайным образом между нулем и единицей, а функции randn — матрица чисел, распределенных по нормальному закону:

    » R = rand(3,   5) 
    R = 
    0.9501  0.4860  0.4565  0.4447  0.9218
    0.2311  0.8913  0.0185  0.6154  0.7382
    0.6068  0.7621  0.8214  0.7919  0.1763

    Один аргумент функций rand и randn приводит к формированию квадратных матриц:
    Часто возникает необходимость создания диагональных матриц, т.е. матриц, у которых все недиагональные элементы равны нулю. Функция diag формирует диагональную матрицу из вектор-столбца или вектор-строки, располагая их элементы по диагонали матрицы:

    » d = [1; 2; 3; 4]; 
    » D = diag(d)
    D = 
    1  0  0  0
    0  2  0  0 
    0  0  3  0
    0  0  0  4

    Функция diag служит и для выделения диагонали матрицы в вектор, например

    » A = [10 1 2; 1 20 3; 2 3 30];
    » d = diag(A)
    d = 
    10
    20
    30

    9. Поэлементные операции с матрицами

    Поскольку векторы и матрицы хранятся в двумерных массивах, то применение математических функций к матрицам и поэлементные операции производятся так же, как для векторов. 
    Введите две матрицы

    ,  .

    Умножение каждого элемента одной матрицы на соответствующий элемент другой производится при помощи оператора .*:

    » С = А.*В 
    С = 
    -2   10  -8
    21  -12 -45

    Для деления элементов первой матрицы на соответствующие элементы второй используется оператор ./, а для деления элементов второй матрицы на соответствующие элементы первой служит .\:

    » R1 = А./В1 
    R1 =
    -2.0000   2.5000  -0.1250
    0.4286  -1.3333  -1.8000
    » R2 = А.\В1 
    R2 =
    -0.5000   0.4000  -8.0000
    2.3333  -0.7500  -0.5556

    Поэлементное возведение в степень осуществляется при помощи оператора  .^. Показатель степени может быть числом или матрицей того же размера, что и матрица, возводимая в степень. Во втором случае элементы первой матрицы возводятся в степени, равные элементам второй матрицы. 

    10. Визуализация матриц

    Матрицы с достаточно большим количеством нулей называются разреженными.Часто необходимо знать, где расположены ненулевые элементы, т.е. получить так называемый шаблон матрицы. Для этого в MatLab служит функция spy. Посмотрим шаблон матрицы G 
    .

    » spy(G)

    После выполнения команды spy на экране появляется графическое окно Figure No. 1. На вертикальной и горизонтальной осях отложены номера строк и столбцов. Ненулевые элементы обозначены маркерами, внизу графического окна указано число ненулевых элементов (nz = 19). 
    Наглядную информацию о соотношении величин элементов матрицы дает функция imagesc, которая интерпретирует матрицу как прямоугольное изображение. Каждый элемент матрицы представляется в виде квадратика, цвет которого соответствует величине элемента. Для того чтобы узнать соответствие цвета и величины элемента следует использовать команду colorbar, выводящую рядом с изображением матрицы шкалу цвета (Insert (в графическом окне Figure  No.  1),colorbar). Наконец, для печати на монохромном принтере удобно получить изображение в оттенках серого цвета, используя команду colormap(gray) (Edit (в графическом окне Figure No. 1), ColormapColormap Editor, Tools, gray). Мы будем работать с матрицей G. Набирайте команды, указанные ниже, и следите за состоянием графического окна:

    » imagesc(G) 
    » colorbar 
    » colormap(gray)

    В результате получается наглядное представление матрицы.

    uCozCopyright MyCorp © 2025