АрхитектураNo4
.pdf
из текстового файла, получить результат и записать его в файл.
Считывание и запись данных
Перед нами стоит задача — решить систему линейных уравнений, матрица и вектор правой части которой хранятся в текстовых файлах matr.txt, rside.txt, и записать результат в файл sol.txt. Матрица записана в файле построчно, элементы в строке отделены пробелом, вектор правой части записан в столбик, как показано на рис. 2.8.
Файлы с матрицей и вектором правой части системы
Подготовьте файлы с данными, например, в стандартной программе
Windows Блокнот (Notepad). Скопируйте файлы matr.txt, rside.txt в подка-
талог work основного каталога MATLAB. Для считывания из файла используйте команду load, для записи— save. Примение load и save для сохранения и считывания переменных рабочей среды описано в главе 7, однако при работе с файлами данных используется функциональный способ вызова этих команд с выходными аргументами:
Параметр -ascii означает запись в текстовом формате. После выполнения данных команд в каталоге work создастся файл sol.txt, в котором в столбик будет записано решение системы. Посмотреть содержимое файла можно, используя любой текстовый редактор. Для записи результата в файл с двойной точностью следует использовать команду save ' s o l . t x t 1 x -ascii - double. На рис. приведено содержимое файла sol.txt в случае использования команды save с параметром -double и без него.
Содержимое файла sol.txt
Аналогично можно записать матрицу в текстовый файл. Запись, например, матрицы А, хранящейся в массиве А, В файл matrA.txt осуществляется командой save 'matrA.txt1 A -ascii. Запись в файл и считывание из файла осуществляются по строкам.
Блочные матрицы
Очень часто в приложениях возникают так называемые блочные матрицы, т. е. матрицы, составленные из непересекающихся подматриц (блоков). Соответствующие размеры блоков должны совпадать.
Конструирование блочных матриц
Введите матрицы
и создайте из них блочную матрицу
учитывая, что матрица К состоит из двух строк, в первой строке матрицы А и В, а во второй — С и D:
Блочная матрица получена. Можно было поступить и по-другому, а именно, считать, что матрица К состоит из двух столбцов, в первом — матрицы А и С , а во втором — В и D. Как бы тогда следовало записать команду для создания блочной матрицы? Проверьте себя
Вот еще один пример для проверки знаний о работе с массивами в MATLAB. Требуется составить блочную матрицу
где
Решение этой задачи следующее:
Последний оператор можно заменить на эквивалентный м = [ [S; b] [а;
2.5]].
MATLAB позволяет конструировать блочно-диагональные матрицы с помощью функции blkdiag. Рассмотрим пример:
Блоки, используемые функцией blkdiag, не обязательно должны быть квадратными и одного размера Обратной задачей к конструированию блочных матриц является выделение блоков.
Выделение блоков
Выделение блоков матриц осуществляется индексацией при помощи двоеточия, которая уже использовалась в предыдущих разделах для выделения блоков из векторов. Введите матрицу
затем выделите очерченный блок, задав номера строк и столбцов при помощи двоеточия:
Для выделения из матрицы столбца или строки (т. е. массива, у которого
один из размеров равен единице) следует в качестве одного из индексов использовать номер столбца или строки матрицы, а другой индекс заменить на двоеточие без указания пределов. Например, запишите вторую строку Р в вектор р
При выделении блока до конца матрицы можно не указывать ее размеры, а использовать end:
Удаление строк и столбцов
Как уже было сказано, в MATLAB парные квадратные скобки [ ] обозначают пустой массив, который, в частности, позволяет удалять строки и столбцы матрицы. Для удаления строки следует присвоить ей пустой массив. Удалите, например, первую строку квадратной матрицы:
Обратите внимание на соответствующее изменение размеров массива, которое можно посмотреть в окне Workspace или проверить при помощи size. Аналогичным образом удаляются и столбцы. Для удаления нескольких идущих подряд столбцов (или строк) им нужно присвоить пустой массив. Удалите второй и третий столбец в м
Индексация существенно экономит время при вводе матриц, имеющих определенную структуру.
Заполнение матриц при помощи индексации
Выше было описано несколько способов ввода матриц в MATLAB, в том числе считывание из файла и использование редактора массивов. Однако если матрица обладает простой структурой, то бывает проще сгенерировать ее, чем вводить. Рассмотрим пример такой матрицы:
Генерация матрицы Т осуществляется в три этапа:
1.Создание массива т размера пять на пять, состоящего из нулей.
2.Заполнение первой строки единицами.
3.Заполнение части последней строки минус единицами до последнего элемента.
Соответствующие команды MATLAB приведены ниже (они записаны в три колонки с целью экономии места, но набирать их надо последовательно). Команды не завершаются точкой с запятой для вывода промежуточных результатов в командное окно с целью слежения за процессом формирования матрицы
Создание некоторых специальных матриц в MATLAB осуществляется при помощи встроенных функций
Создание матриц специального вида
Заполнение прямоугольной матрицы нулями производится встроенной
функцией zeros, аргументами которой являются число строк и столбцов матрицы:
Один аргумент функции zeros приводит к образованию квадратной матрицы заданного размера:
Единичная матрица инициализируется при помощи функции eye:
Функция eye с двумя аргументами создает прямоугольную матрицу, у которой на главной диагонали стоят единицы, а остальные элементы равны нулю:
Матрица, состоящая из единиц, образуется в результате вызова функции ones:
Использование одного аргумента в ones приводит к созданию квадратной матрицы, состоящей из единиц.
MATLAB предоставляет возможность заполнения матриц случайными элементами. Результатом функции rand является матрица чисел, распределенных случайным образом между нулем и единицей, а функции randn— матрица чисел, распределенных по нормальному закону:
Обращение к функциям rand и randn с одним входным аргументом приводит к формированию квадратных матриц.
Вопрос об автоматическом заполнении вектор-столбцов или вектор-строк не должен поставить нас в тупик, поскольку мы знаем, что вектор-столбец или вектор-строка в MATLAB являются матрицей, у которой один из размеров равен единице. Заполните вектор-строку шестью случайными числами. Проверьте себя, выполнив следующий пример:
Часто возникает необходимость создания диагональных матриц, т. е. матриц, у которых все внедиагональные элементы равны нулю. Функция diag формирует диагональную матрицу из вектор-столбца или вектор-строки, располагая их элементы по диагонали матрицы:
Для заполнения не главной, а побочной диагонали предусмотрена возможность вызова функции diag с двумя аргументами. В этом случае второй аргумент означает, насколько побочная диагональ отстоит от главной, а его знак указывает на направление, плюс — вверх, минус — вниз от главной диагонали:
Функция diag служит и для выделения диагонали матрицы в вектор, например
Все функции MATLAB для создания матриц специального вида описаны в справочной системе, см. пункт Arrays and Matrices подраздела Mathematics
раздела Functions — Categorical List.
Проделайте следующее упражнение для того, чтобы убедится, что вы освоили автоматическое заполнение матриц, работу с блочными матрицами и запись данных в файл. Заполните и запишите в файлы матрицы:
Матрицу М можно представить в виде блочной матрицы из четырех квадратных блоков размера пять, диагональные блоки формируются при помощи eye, а внедиагональные — с использованием ones:
Квадратная матрица tk размера семь является трехдиагональной. Заполняя эту матрицу, можно использовать то обстоятельство, что G является сум-
