Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_rab_MATLAB2_1.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
565.25 Кб
Скачать

1.3. Некоторые действия над матрицами

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

1.3.1. Вычисление сумм и транспонирование

Ф ункция sum вычисляет суммы столбцов матрицы, функция diag возвращает столбец диагональных элементов матрицы. Для транспонирования матриц ис­пользуется принятое в математике обозначение . Работа этих функций иллю­стрируется рисунком 1.4 (продолжение рис.1.3).

1.3.2. Работа с файлами

Существует возможность вводить матрицы из текстового файла, сфор­мированного вне среды MATLAB. В текстовом файле матрица должна быть представлена как прямоугольная таблица чисел, разделенных пробелами, с равным количеством элементов в каждой строке. Имя файла должно иметь не­пустое расширение, отличное от .mat. Команда

load имя_файла.расширение

прочитает этот файл в переменную имя_файла. Например, из файла m.txt данные будут считаны в переменную m. По умолчанию файл находится в те­кущей директории среды MATLAB; для изменения директории перед именем файла надо указать путь к нему; например:

load d:\student\m.txt

Для сохранения массива в текстовый файл можно воспользоваться командой:

save [путь к файлу\]имя_файла.расширение имя массива -ASCII

Путь к файлу заключен в квадратные скобки как необязательный элемент ко­манды. Расширение может быть любым, кроме .mat. Команда

save a.txt a -ASCII

сохранит массив а в файле a.txt текущей директории.

Команды load и save имеют другие режимы использования. Кроме того, в MATLAB существуют другие команды чтения данных из файла и сохранения их в файл. Эти возможности, к сожалению, выходят за рамки нашего курса.

1.3.3. Поэлементная обработка матриц

Элемент матрицы с, стоящий в строке с номером i и столбце с номером j обозначается с(i,j). Элементы нумеруются, начиная с единицы. Таким образом, выражение с(1,1)+с(2,2)+с(3,3)+с(4,4) даст тот же результат, что и sum(diag(с)). Кроме того, для обработки матриц можно записывать алгоритмы на языке MATLAB, также как на Паскале (см. п. 1.5). Как правило, применение матрич­ных операций дает более быстродействующие программы, чем поэлементная обработка, за счет распараллеливания вычислений.

1.4. Оператор двоеточия

Оператор двоеточия (:) – один из наиболее часто используемых операто­ров MATLAB. Его вид:

начальное значение : шаг : конечное значение

Оператор предполагает изменение от начального значения до конечного с заданным шагом. Шаг с предшествующим двоеточием может быть опущен, тогда по правилу умолчания шаг равен 1.

О ператор двоеточия входит в состав оператора параметрического цикла for. Он также может использоваться самостоятельно для задания значений эле­ментам массивов или для работы с частью массива. Примеры использования оператора двоеточия представлены на рис. 1.5.

1.5. Решение задач обработки матриц

Для понимания этого раздела необходимо ознакомиться с приложе­нием.

Продемонстрируем приемы программирования на языке MATLAB на примере задачи обработки матрицы (уровня 2.5.2. из [3]).

В отличии от классических универсальных языков программирования (Pascal, C, Fortran), предполагающих компиляцию программ, в MATLAB-про­грамме не требуется вводить размеры массивов; они определяются автомати­чески по присваиваемым или вводимым из файла значениям массива, и могут быть получены с помощью функций size и ndims. Рассмотрим операторы, с по­мощью которых можно определить размеры массива.

Оператор

[n,m] = size(а)

возвращает n и m - размеры матрицы а.

Длину n вектора b можно также определить с помощью оператора:

n= length(b)

Число n индексов массива Х можно вычислить, используя оператор:

n = ndims(Х).

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

Обозначения поясняются таблицей 1. Размеры матрицы (n и m) формально отнесены к промежуточным данным, так как в программе будут вычисляться с применением функции size.

Таблица 1. Состав данных примера 1.

Имя

Смысл

Тип

Структура

Исходные данные

а

заданная матрица

вещественный

двумерный массив

Выходные данные

p

счетчик строк матрицы

целый

простая переменная

s

сумма элементов p-ой строки

вещественный

одномерный массив

k

число строк с положи­тельной суммой эле­ментов

целый

простая переменная

Промежуточные данные

n

число строк матрицы

целый

простая переменная

m

число столбцов

целый

простая переменная

q

счетчик столбцов матрицы

целый

простая переменная

На рис. 1.6 изображена блок-схема алгоритма. Обратите внимание, что блок 6 содержит параметрический цикл, в котором вычисляется сумма элемен­тов строки.

На рис.1.7 показан алгоритм, закодированный на языке MATLAB, и ре­зультаты его выполнения; для сравнения рядом приведена PASCAL-программа. Легко видеть, что текст MATLAB проще и короче. Однако приведенная после­довательность инструкций в командном окне MATLAB в сущности не является автономной программой. Его нельзя повторно запустить (без копирования че­рез буфер обмена), нельзя отредактировать, нельзя транслировать в исполняе­мую программу (файл с расширением .exe). Причина этих ограничений состоит в том, что транслятор командного окна MATLAB является интерпретатором. Чтобы частично снять эти ограничения, надо оформить последовательность MATLAB-команд как M-файл (см. лабораторную работу №2).

Основное преимущество языка PASCAL (как и любого языка, требующего компиляции) состоит в простоте создания обособленного от среды программи­рования исполняемого файла. Заметим, что в работе ин­женера часто требуется получить результат, а не инструмент исследования. В такой ситуации интерактивные пакеты прикладных программ (такие как MATLAB) вне конкуренции. Кроме того, в диалоговом режиме, пробуя раз­личные варианты вычислений, можно построить оптимальный алгоритм реше­ния задачи, на основе которого впоследствии создать исполняемую программу.

Задачу примера 1 можно решить без операторов условия и цикла с по­мощью функции find (массив), которая возвращает индексы ненулевых эле­ментов массива в виде вектор-столбца; нумерация элементов матрицы осуще­ствляется по столбцам. Получаем лаконичное решение:

>> load d:\valentina\a.txt

>> s=sum(a');

>> k=length(find(s>0));

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]