Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


ЧИСЛЕННЫЕ МЕТОДЫ И ВИЗУАЛИЗАЦИЯ



МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Факультет прикладной математики и информатики

 

Кафедра вычислительной математики

 

ЧИСЛЕННЫЕ МЕТОДЫ И ВИЗУАЛИЗАЦИЯ

ДАННЫХ В СРЕДЕ MATLAB

Методическое пособие

 

 

Для студентов специальности прикладная математика

 

Минск-2001


Утверждено Советом факультета

25 сентября 2001г., протокол № 1

 

Авторы: Краков М.С., доктор физ.-мат. наук, профессор, БГПА;

Никифоров И.В., кандидат физ.-мат. наук, БГУ

 

Предназначено для студентов 3 и 4 курсов


 

ВВЕДЕНИЕ.. 5

КОМАНДНОЕ ОКНО.. 6

Редактирование командной строки. 6

Длинные командные строки. 6

Вывод на печать командного окна. 7

Запуск внешних программ. 7

Команда format. 7

ВЫРАЖЕНИЯ.. 8

Переменные. 8

Числа. 9

Операторы. 9

Функции. 10

Текстовые комментарии и символьные константы. 10

ОПЕРАЦИИ С РАБОЧЕЙ ОБЛАСТЬЮ... 10

ОПЕРАЦИИ С ФАЙЛАМИ.. 12

ДНЕВНИК КОМАНДНОГО ОКНА.. 13

ОПЕРАЦИИ С ВЕКТОРАМИ И МАТРИЦАМИ.. 13

Оператор «двоеточие». 15

Векторные индексы. 15

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

Объединение матриц. 16

Транспонирование матриц. 17

Создание матриц с заданными свойствами. 17

Создание вектора равноотстоящих точек. 18

Создание вектора равноотстоящих точек в логарифмическом масштабе. 19

Разреженные матрицы. 19

ГРАФИКА.. 20

Команда plot. 21

Графические объекты. 23

Окна изображений. 24

Добавление кривых на существующий график. 24

Управление осями. 25

Разбиение графического окна. 26

Подписи к осям и заголовки. 27

Графики в полярной системе координат. 27

Контурные графики и графики полей градиентов. 28

Создание массивов данных для трехмерной графики. 29

Построение графиков трехмерных поверхностей. 29

ПРОГРАММИРОВАНИЕ В СИСТЕМЕ MATLAB. 31

Основные типы данных. 32

Арифметические операторы и массивы. 32

Операторы отношения. 35

Логические операторы и функции. 35

Приоритет выполнения операторов. 36

Структура файлов сценариев. 37

Структура m-файлов функций. 37

Использование подфункций. 38

Операторная функция. 39

Передача данных через глобальные переменные. 39

Параметры функционального типа. 39

Функции с переменным числом аргументов. 40

Управление потоками. 41

Диалоговый ввод. 43

ЧИСЛЕННЫЕ МЕТОДЫ И ОБРАБОТКА ДАННЫХ.. 44

Решение систем линейных алгебраических уравнений. 44

Решение систем линейных уравнений итерационными методами. 47

Обратная матрица и определитель. 47

Факторизация Холецкого. 48

LU факторизация. 48

QR факторизация. 49

Матричная экспонента. 51

Собственные значения и собственные вектора. 52

Нормальная форма Жордана. 52

Разложение Шура. 53

Сингулярное разложение. 54

Численное интегрирование. 55

Представление полиномов в среде MATLAB. 55

Умножение и деление многочленов. 55

Вычисление производной от многочлена. 56

Вычисление значения многочлена. 56

Нахождение корней многочлена. 57

Построение многочлена по его корням. 57

Построение характеристического многочлена. 57

Минимизация функций. 57

Решение систем нелинейных уравнений. 59

Преобразование Фурье. 60

Решение обыкновенных дифференциальных уравнений. 62

Численное решение дифференциальных уравнений в частных производных. 63


ВВЕДЕНИЕ

 

MATLAB – это высокопроизводительный язык для технических расчетов. Он объединяет вычисления, визуализацию и программирование в удобной среде, где задачи и решения выражаются в форме, близкой к математической постановке. Типичное применение:

· математические вычисления;

· создание алгоритмов;

· моделирование;

· анализ данных, исследования и визуализация;

· научная и инженерная графика;

· разработка приложений, включая создание графического интерфейса.

 

MATLAB – это интерактивная система, в которой основным элементом данных является массив. Система позволяет решать различные задачи, связанные с техническими вычислениями, использующими матрицы и вектора, в несколько раз быстрее, чем позволяют такие скалярные языки программирования как C или FORTRAN.

Слово MATLAB означает матричная лаборатория (matrix laboratory). MATLAB был специально написан для обеспечения легкого доступа к современным программным средствам матричных вычислений - LINPACK и EISPACK. Настоящее учебно-методическое пособие по системе MATLAB основано на программной документации фирмы-разработчика MathWorks, Inc. Более подробное описание можно найти в прилагаемом списке литературы [1-9], а также на сайте фирмы MathWorks, Inc. (http: //www.mathworks.com).

 

Система MATLAB (матричная лаборатория) состоит из пяти основных частей:

 

Среда программирования MATLAB представляет собой набор инструментов и мощных программных средств подготовки, редактирования и отладки приложений.

Язык MATLAB – это язык высокого уровня с управлением потоками, функциями, структурами данных, вводом-выводом и особенностями объектно-ориентированного программирования.

Графическая система MATLAB включает в себя команды высокого и низкого уровней. Первые используются для визуализации двух- и трехмерных данных, обработки изображений, анимации и иллюстрированной графики. Вторые позволяют редактировать внешний вид графики и создавать графический интерфейс пользователя в MATLAB приложениях.

Библиотека математических функций MATLAB представляет обширную коллекцию алгоритмов вычисления как элементарных функций типа синус, косинус, сумма, операции с комплексными числами, так и функций более сложных – обращение матриц, нахождение собственных значений, быстрое преобразование Фурье.

Программный интерфейс – библиотека, позволяющая писать программы на C и FORTRAN, которые взаимодействуют с MATLAB. Позволяет вызывать программы из MATLAB (динамическая связь), вызывать MATLAB как вычислительный инструмент, читать-записывать MAT-файлы.

 

При запуске MATLAB выводит на экран свой рабочий стол (desktop), который можно рассматривать как панель следующих инструментов:

  • Command Window – командное окно, служит для выполнения функций;
  • Command History – список выполненных ранее функций;
  • Launch Pad – панель инструментов, которые не входят в рабочий стол;
  • Current Directory Browser – просмотр файловой структуры;
  • Help Browser – справка, просмотр и поиск документации;
  • Workspace Browser – просмотр рабочей области;
  • Array Editor- редактор массивов;
  • Editor/Debugger – редактор/отладчик M-файлов (файлы с программным кодом).

 

КОМАНДНОЕ ОКНО

 

Командное окно используется для ввода переменных, выполнения функций и M-файлов. Для выполнения команд используется клавиша Enter. Результаты вычислений MATLAB также выдает в командное окно. Работу любой программы можно прервать по команде Ctrl+c или Ctrl+Break.

 

Длинные командные строки.

 

Длинные выражения удобно разбивать на отдельные строки, используя троеточие и Enter:

S = 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + …

1/8 + 1/9 + 1/10 + 1/11 + 1/12;

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

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

 

format short; x = (1: 10)'; logs = [x log10(x)].

Максимальное число символов в одной строке не должно превышать 4096.

 

Управление выводом данных на экран.

Если вы наберете в командной строке выражение и нажмете клавишу Enter, MATLAB выдаст результат на экран. Для отмены вывода данных на экран в конце выражения следует ставить точку с запятой (как в языке Паскаль). Это требуется, например, при создании больших матриц:

A = magic(100);

Большой объем выводимых в командное окно данных можно просмотреть, если предварительно задать режим постраничного вывода командой more on. После вывода первой страницы данных, переход к последующим страницам происходит при нажатии клавиши Space Bar (пробел), переход к следующей строке – при нажатии Enter, отмена вывода – при нажатии клавиши q. Отмена постраничного вывода происходит по команде more off (данный режим используется по умолчанию).

 

Запуск внешних программ.

Вызов внешних приложений из командной строки можно выполнять, используя в качестве префикса перед именем программы знак восклицания. Например, системная программа «Блокнот» вызывается по команде

! notepad

После завершения работы внешней программы операционная система передает контроль MATLAB.

 

Команда format.

Команда format управляет форматом вывода на экран численных значений. Все операции MATLAB проводит с удвоенной точностью и команда format не влияет на вычисления.

Ниже представлены различные форматы представления встроенного числа p.

format short; pi

ans = 3.1416

format short e; pi

ans = 3.1416+000

format short g; pi

ans = 3.1416+000

format long; pi

ans = 3.14159265358979

format long e; pi

ans = 3.14159265358979+000

format long g; pi

ans = 3.14159265358979+000

format hex; pi

ans = 400921fb54442d18

format rat; pi

ans = 355/113

Если вводимое выражение не присваивается переменной MATLAB, то для него автоматически генерируется переменная ans ( ответ ). Значение текущего формата можно узнать по команде get(0, ’ Format ).

 

ВЫРАЖЕНИЯ

Как и другие языки программирования, MATLAB предоставляет возможность использования математических выражений, причем эти выражения могут включать матрицы. Основные составляющие выражения:

· переменные;

· числа;

· операторы;

· функции.

 

Переменные.

MATLAB не требует описания типа переменных или размерности. Когда MATLAB встречает новое имя переменной, он автоматически создает переменную и отводит соответствующий объем памяти. Если переменная уже существует, MATLAB изменяет ее значение, а при необходимости и ее тип. Имена переменных состоят из букв, цифр или символов подчеркивания. Первым символом в имени должна быть буква. Число символов в имени не более 31. MATLAB различает заглавные и строчные буквы, поэтому Abc и аbc – это разные переменные. Чтобы увидеть значение переменной, надо просто ввести ее имя и нажать Enter. В памяти компьютера переменные занимают определенное место, называемое рабочим пространством (workspace). Для уничтожения всех переменных в рабочем пространстве используется команда clear без аргументов. В качестве аргументов указываются имена переменных, которые надо удалить. Например, команда clear аbc, а уничтожает переменные аbc и а.

Ряд переменных генерируется системой при ее загрузке. Такие переменные принято называть системными. Приведем список основных системных переменных:

 

pi 3.14159265...

i корень из -1

j аналогично i

eps относительнаяточность числа с плавающей точкой, 2-52

realmin наименьшеечислос плавающей точкой, 2-1022

realmax наибольшеечислос плавающей точкой, (2-e)1023

Inf бесконечность

NaN не число

 

Бесконечность появляется при делении на нуль или при выполнении математического выражения, приводящего к переполнению, т.е. к превышению realmax. Не число – NaN генерируется при вычислении выражений типа 0/0, или Inf – Inf, которые не имеют определенного математического смысла.

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

eps = 1.e-6

 

Далее можно использовать это значение в последующих вычислениях. Начальное значение системной переменной может быть восстановлено командой clear:

Clear eps.

 

Числа.

MATLAB использует десятичную систему счисления с необязательной десятичной точкой

и знаками плюс-минус. Формат с плавающей точкой использует букву e для определения множителя степени десяти. Мнимые числа используют i или j как суффикс. Функция real(z) возвращает действительную часть комплексного числа z , а функция imag(z) – мнимую. Для получения модуля комплексного числа используется функция abs(z), а для вычисления фазы – angle(z). Примеры правильной записи чисел:

 

3 -99 0.0001

E-20 6.02252e23

I -3.14159j 3e5i

Все числа для хранения используют формат long, определенный стандартом плавающей точки IEEE. Числа с плавающей точкой обладают ограниченной точностью – приблизительно 16 значащих цифр и ограниченным диапазоном – приблизительно от

10-308 до 10+308 .

 

Операторы.

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

+ сложение

– вычитание

* умножение

/ деление

\ левое деление

^ степень

‘ комплексно-сопряженное транспонирование

() определение порядка вычисления

Полный список операторов можно получить, используя команду help ops.

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

v=[1 2 3]; exp(v)

ans =

2.7183 7.3891 20.0855

 

Функции.

MATLAB предоставляет большое количество элементарных математических функций, таких как abs, sqrt, exp, sin и др. Вычисление квадратного корня или логарифма отрицательного числа не является ошибкой: в этом случае результатом является соответствующее комплексное число. MATLAB также предоставляет и более сложные

Функции, включая Гамма-функцию и функции Бесселя. Большинство из этих функций

имеют комплексные аргументы. Для вывода списка всех элементарных математических функций следует выполнить команду help elfun. Перечень более сложных математических и матричных функций можно получить по командам help specfun

и help elmat соответственно. Некоторые функции, такие как sqrt и sin, являются встроенными. Они являются частью MATLAB и очень эффективны, но код их реализации недоступен. Другие функции, такие как gamma и sinh, реализованы в М-файлах. Поэтому можно легко просмотреть их код и, при необходимости, модифицировать его.

Приведем несколько примеров использования выражений в MATLAB вместе с результатами выполнения:

 

rho = (1+sqrt(5))/2

rho =

1.6180

a = abs(3+4i)

a =

z = sqrt(besselk(4/3, rho-i))

z =

0.3730+ 0.3214i

huge = exp(log(realmax))

huge =

1.7977e+308

toobig = pi*huge

toobig =

Inf

ОПЕРАЦИИ С РАБОЧЕЙ ОБЛАСТЬЮ

Сеанс работы с MATLAB принято именовать сессией (session). Сессия отражает работу пользователя с системой. В ней имеются строки ввода-вывода и сообщения об ошибках. Переменные и определения новых функций в системе MATLAB хранятся в особой области памяти – рабочей области. MATLAB позволяет сохранять значения переменных в виде бинарных файлов с расширением mat с помощью команды save:

save filename – рабочая область сохраняется в файле filename.mat,

save filename x y – записываются только переменные x и y.

После параметров команды save можно указать ключи, уточняющие формат записи файлов:

· –mat – двоичный формат, используемый по умолчанию;

· –ascii – ASCII формат одинарной точности (8 цифр);

· –ascii –double – ASCII формат двойной точности (16 цифр);

· –append – добавление в существующий mat –файл.

 

При необходимости можно сохранить не только рабочую область, но и весь текст сессии со всеми сообщениями с помощью команды diary:

diary filename – запись на диск ввода-вывода в тестовый файл с именем filename,

diary off – приостанавливает запись в файл,

diary on – возобновляет запись в файл.

 

Для просмотра текстового файла в командном окне следует использовать команду type, например, type fname.txt.

 

Для загрузки сохраненной ранее рабочей области используется команда load с теми же ключами, что и у команды save. Операции с рабочей областью можно выполнять не только из командной строки, но и с помощью окна броузера рабочей области. Достаточно щелкнуть по нему правой кнопкой мыши и выбрать из контекстного меню требуемую команду. Например, для загрузки рабочей области выбираем из контекстного меню команду Import Data и из диалогового окна выбираем нужный m–файл.

 

MATLAB позволяет загружать переменные и массивы, записанные в двоичный файл из других приложений. Рассмотрим программный код из DELPHI, который записывает трехмерный массив действительных чисел в двоичный файл с именем t.dat.

 

FileHandle: =FileCreate(‘t.dat’);

for k: =1 to 21 do

for i: =1 to 21 do

for j: =1 to 21 do

FileWrite(FileHandle, T[i, j, k], SizeOf(double));

FileClose(FileHandle);

 

Для ввода записанных данных в рабочую область MATLAB достаточно выполнить команды:

 

fid=fopen('t.dat');

T=fread(fid, inf, 'double');

fclose(fid);

T=reshape(T, 21, 21, 21);

 

Следует отметить, что MATLAB имеет возможность импортировать данные из реляционных баз данных, а также экспортировать свои данные в таблицы баз данных.

 

Окно просмотра ресурсов позволяет просматривать существующие в памяти объекты, редактировать их содержимое и удалять из памяти. Для вывода содержимого объекта следует выделить его имя и щелкнуть на кнопке Open Selection. Объект можно открыть и двойным щелчком на его имени в списке. Откроется окно редактора массива (Array Editor). В этом окне надо щелкнуть на ячейке, содержимое которой следует отредактировать и ввести новое значение. Окно редактора позволяет также изменять размерность массивов и численный формат.

 

По мере задания одних переменных и стирания других рабочая область перестает быть непрерывной. Для избежания непроизводительных потерь памяти при работе с объемными данными следует использовать команду pack, осуществляющую дефрагментацию рабочей области.

 

ОПЕРАЦИИ С ФАЙЛАМИ

Файловые операции используют текущий каталог в качестве отправной точки.

Любой файл, который вы собираетесь использовать, должен либо находиться в текущем каталоге, либо входить в маршрут поиска. MATLAB использует маршрут поиска, упорядоченный список директорий, для того, чтобы определить, как выполнять функции, которые вы вызываете. Когда вызывается стандартная функция, MATLAB исполняет первый m-файл на своем пути, который имеет заданное имя. Маршрут поиска можно изменить командами addpath и setpath или, что более удобно, вызвать диалоговое окно настройки путей файловой системы командой Set Path из меню File. В командном режиме пути файловой системы выводятся с использованием функции path.

 

Основным инструментом для работы с файлами является броузер файловой системы. Открыть и закрыть окно броузера можно выбрав опцию Current Directory из меню View.

Проще всего определить или изменить текущий каталог можно с помощью поля со списком Current Directory, которое располагается в верхней части броузера. Сделать новый каталог текущим можно одним из следующих способов:

· ввести в поле Current Directory путь к новому каталогу и нажать Enter;

· щелкнуть кнопку на поле Current Directory и выбрать каталог из списка;

· щелкнуть кнопку просмотра (…) и выбрать новый каталог.

 

Броузер позволяет добавлять каталоги в перечень путей MATLAB. Для этого надо щелкнуть правой кнопкой на окне броузера и выбрать из контекстного меню пункт Add to Path и сделать выбор из перечня:

· Current Directory – добавить текущий каталог к списку путей;

· Selected Folders – добавить каталог, выбранный с помощью броузера, к

списку путей;

· Selected Folder and Subfolders –добавляет вместе с каталогом все

его подкаталоги к списку путей.

 

Отфильтровать файлы в окне просмотра по их типу можно с помощью операции File Filter контекстного меню броузера или пункта Current Directory Filter из меню View. Например, можно вывести в окно броузера только m-файлы.

 

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

 

Создать новый файл в текущем каталоге можно, выбрав в контекстном меню пункт New

а затем M-file. По умолчанию файл получает имя Untitled.m, которое можно заменить на желаемое.

 

Новый каталог создается аналогично, выбором New -> Folder из контекстного меню. Новая папка получает по умолчанию имя NewFolder, которое можно отредактировать.

 

Файлы в текущем каталоге можно переименовать, вырезать или удалить с помощью команд Rename, Cu t и Delete соответственно. Для копирования и вставки файлов следует использовать команды Copy и Paste.

 

Файлы можно открыть для просмотра командой Open из контекстного меню или двойным щелчком на имени. Для запуска m-файла, его надо выделить и выбрать команду Run из контекстного меню.

 

Поиск файла по фрагменту текста, а также поиск с заменой в текущем каталоге можно провести, если щелкнуть на кнопке с изображением бинокля ( Find in Files ). В открывшейся странице поиска находим поле Find what и вводим текст поиска, после чего нажимаем кнопку Поиск ( Find ). Имена найденных файлов выводятся в нижнюю часть страницы поиска. Причем каждая строка кроме имени найденного файла содержит также номер строки, содержащей образец поиска, и текст этой строки.

Для замены фрагмента текста в одном из найденных файлах, надо его открыть двойным щелчком, затем в поле со списком Look in выбрать его имя. В результате кнопки Replace и Replace All в окне поиска станут доступными, можно заполнить поле Replace with текстом замены и провести полную или частичную замену.

 

ДНЕВНИК КОМАНДНОГО ОКНА

Просмотреть выполненные ранее команды текущей сессии, а также предшествующих сессий можно с помощью дневника командного окна (Command History). Дневник каждой сессии начинается с даты и времени. Используя полосы прокрутки и клавиши перемещения можно просмотреть весь дневник. По мере необходимости записи из дневника можно удалять. Для этого следует вызвать контекстное меню и выполнить одну из команд:

 

· Delete Selection – удаление выделенной строки;

· Delete to Selection – удаление всех строк перед выделенной;

· Delete Entire History – полная очистка дневника.

 

Для очистки дневника можно также выполнить команду Clear Command History из меню Edit. Сделав двойной щелчок на записи дневника можно выполнить соответствующую команду. Например, двойной щелчок на записи edit myfile откроет файл myfile.m в режиме редактора. Строчки из дневника можно копировать и переносить в командное окно с помощью команд Copy и Past контекстного меню. Окно дневника выводится и убирается командой Command History из меню View.

2 0 -1

s = 7

s =

 

Задание матрицы требует указания нескольких строк. Каждая строка оканчивается точкой с запятой. Так, ввод

 

M = [1 2 3; 4 5 6; 7 8 9];

задает квадратную матрицу, которую можно вывести, набрав в командной строке M и нажав клавишу Enter:

M=

1 2 3

4 5 6

7 8 9

 

В качестве элементов матриц можно использовать арифметические выражения, например:

 

V = [2+3*5 exp(2) sqrt(2)]

V =

17.0000 7.3891 1.4142

Для указания отдельного элемента матрицы используются индексы. Элемент в строке I и столбце J матрицы A обозначается A(I, J). Если элементу A(2, 3) надо присвоить значение 10, следует ввести команду:

A(2, 3)=10;

 

Выражение M(I) с одним индексом дает доступ к элементам матрицы развернутым в один столбец. В этом случае массив рассматривается как длинный вектор, сформированный из столбцов исходной матрицы. Так, для рассмотренного ранее примера с матрицей M, M(4)– это другой способ ссылаться на значение 2, хранящееся в M(1, 2).

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

 

M(4, 2)

??? Index exceeds matrix dimensions.

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

 

M(2, 5)= 1

M =

1 2 3 0 0

4 5 6 0 1

7 8 9 0 0

Оператор «двоеточие».

Двоеточие – это один из наиболее важных операторов MATLAB. Он используется в различных выражениях. Для создания вектор–строки с целочисленными компонентами от 1 до 10 достаточно выполнить команду:

M = 1: 10

M =

1 2 3 4 5 6 7 8 9 10

Для получения обратного интервала, введем приращение:

 

M = 100: -7: 50

M =

100 93 86 79 72 65 58 51

или

 

M = 0: pi/4: pi

M =

0 0.7854 1.5708 2.3562 3.1416

Оператор “двоеточие” используется для формирования подвекторов и подматриц из векторов, матриц и многомерных массивов:

 

· M(:, J) – это J-й столбец из M;

· M(I,: ) – это I-я строка из M;

· M(:,: ) – это матрица M;

· M(J: K) – это M(J), M(J+1), …, M(K );

· M(:, J: K) – это M(:, J), M(:, J+1), …, M(:, K );

· M(:,:, K) – это K- я страница трехмерного массива M;

· M(I, J, K,: ) – вектор, выделенный из четырехмерного массива M. Вектор включает элементы M(I, J, K, 1 ), M(I, J, K, 2 ), M(I, J, K, 3 ) и т.д.;

· M(: ) записывает все элементы массива M в виде столбца.

 

Векторные индексы.

Из предыдущего примера следует, что в качестве индексов могут использоваться векторы. Если X и V векторы, то X(V) можно представить как вектор [ X(V(1)), X(V(2)), …, X(V(n))]. Элементы вектора V должны быть целыми числами, чтобы их можно было использовать как индексы элементов массива X. Ошибка выдается в том случае, если индекс элемента меньше единицы или больше, чем size(X). Такой же принцип индексирования действителен и для матриц. Если вектор V имеет m компонент, а вектор W n компонент, то M(V, W) будет матрицей размером mxn, сформированной из элементов матрицы M, индексы которой – элементы векторов V и W.

Векторные индексы можно использовать в операциях присваивания, например:

M(I, J) = B присваивает значения массива B элементам прямоугольной подматрицы M, которые определяются векторами I и J. Массив B должен иметь length(I) строк и length(J) столбцов. В следующем примере векторный индекс используется для перестановки 2 и 3 столбцов матрицы B, результат помещается в матрицу A:

A = B(:, [1 3 2 4]);

 

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

Строки и столбцы матрицы можно удалить, используя пустые квадратные скобки [].

Создадим магическую матрицу размером 4x4:

 

M=magic(4)

M =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

Затем удалим второй столбец:

 

M(:, 2) = []

M =

16 3 13

5 10 8

9 6 12

4 15 1

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

 

M(2: 2: 10) = []

M =

16 9 3 6 13 12 1

 

Объединение матриц.

Объединение матриц – это процесс соединения нескольких матриц в одну большую. Фактически, исходная матрица создается объединением ее отдельных элементов. Оператор объединения – это пара квадратных скобок. Так, [A, B] – горизонтальная конкатенация (объединение) матриц A и B, которые должны иметь одинаковое количество строк. Горизонтальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [A, B, C]. При вертикальной конкатенации матрицы в квадратных скобках разделяются точкой с запятой: [A; B; C]. Горизонтальная и вертикальная конкатенации могут использоваться одновременно.

Приведем пример:

 

M=[1 2; 3 4]

M =

1 2

3 4

B=[M M+4; M+6 M+2]

B =

1 2 5 6

3 4 7 8

7 8 3 4

9 10 5 6

Транспонирование матриц.

Матрицы можно транспонировать с помощью оператора ‘ (апостроф), например A ’ – транспонированная матрица A. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Строки транспонированной матрицы соответствуют столбцам исходной матрицы.

 

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

Для создания матриц, все элементы которых – единицы, используется функция ones:

· ones(n) – возвращает матрицу размером nxn, все элементы которых – единицы;

· ones(m, n) – возвращает матрицу размером mxn, состоящую из единиц;

· ones(d1, d2, d3, … ) – возвращает массив из единиц с размером d1 x d2 x d3, …;

· ones(size(A)) – возвращает массив единиц такой же размерности, что и A.

Пример:

 

M = ones(3, 4)

M =

1 1 1 1

1 1 1 1

1 1 1 1

 

Создание нулевой матрицы обеспечивает функция zeros, аргументы которой точно такие же, как и у функции ones.

 

Создавать матрицы с заданными диагональными элементами позволяет функция diag:

· X = diag(v, k) – для вектора v, состоящего из n компонент, возвращает квадратную матрицу X порядка n + abs(k) с элементами v на k -й диагонали, при k = 0 это главная диагональ, при k > 0 – одна из верхних диагоналей, при k < 0 – одна из нижних диагоналей. Остальные элементы матрицы – нули;

· X = diag(v) – помещает вектор v на главную диагональ;

· V = diag(X, k) – для матрицы X возвращает вектор-столбец, состоящий из элементов k -й диагонали матрицы X;

· V = diag(X) – возвращает главную диагональ матрицы X.

 

Для создания матриц, состоящих из других матриц, служат следующие функции:

· repmat(A, m, n) возвращает матрицу A, состоящую из mxn копий матрицы A;

· repmat(A, n) возвращает матрицу A, состоящую из nxn копий матрицы A;

· repmat(A, [m n p ]) возвращает многомерный массив, состоящий из копий матрицы A. Матрица A может быть многомерной;

· repmat(a, m, n) возвращает матрицу размером mxn со значениями элементов, заданных скаляром a.

Пример:

A=[1 2; 3 4]

 

A =

1 2

3 4

 

repmat(A, 2, 3)

ans =

1 2 1 2 1 2

3 4 3 4 3 4

1 2 1 2 1 2

3 4 3 4 3 4

· reshape(A, m, n) возвращает матрицу размером mxn, сформированную из A путем последовательной выборки по столбцам. Если число элементов A не равно mxn, то выдается сообщение об ошибке;

· reshape(A, m, n, p, … ) возвращает N -мерный массив с элементами из A, но имеющий размер mxnxp …равный prod(size(A));

· reshape(A, v ) возвращает N -мерный массив с элементами из A, но перестроенный к размеру, заданному вектором v.

Пример:

 

M=1: 6

M =

1 2 3 4 5 6

 

A=reshape(M, 2, 3 )

A =

1 3 5

2 4 6

 

1.0 1.2500 1.5000 1.7500 2.0000

Разреженные матрицы.

Матрицы, содержащие большое число элементов с нулевыми значениями называются разреженными. Такие матрицы обычно возникают при решении краевых задач для систем дифференциальных уравнений методом сеток. С разреженными матрицами удобно работать, используя компактные схемы хранения только ненулевых элементов матрицы. Помимо ненулевых элементов в разреженном формате необходимо хранить индексную информацию, указывающую расположение каждого элемента в регулярном массиве. Эта дополнительная информация является ценой, которую приходится платить за отказ от хранения нулей. Для разреженных матриц в MATLAB имеется ряд функций, подборка из которых приводится ниже:

 

· [B, d] = spdiags(A) создает разреженную матрицу B, столбцами которой являются ненулевые диагонали матрицы A. Вектор d содержит номера ненулевых диагоналей;

· B = spdiags(A, d) создает разреженную матрицу B, столбцами которой являются ненулевые диагонали матрицы A, определенные вектором d;

· A = spdiags(B, d, A) заменяет диагонали матрицы A, определенные вектором d, столбцами матрицы B;


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 372; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.228 с.)
Главная | Случайная страница | Обратная связь