
- •Министерство образования и науки российской федерации федеральное агентство по образованию
- •Введение в matlab
- •Введение
- •Лабораторная работа №1. Решение простейших задач обработки матриц в системе matlab
- •1. Теоретическая часть
- •1.1. Интегрированная среда matlab
- •1.2. Простейшие примеры работы в matlab
- •1.3. Некоторые действия над матрицами
- •1.3.1. Вычисление сумм и транспонирование
- •1.3.2. Работа с файлами
- •1.3.3. Поэлементная обработка матриц
- •1.4. Оператор двоеточия
- •1.5. Решение задач обработки матриц
- •2. Задание
- •Лабораторная работа №2. Скрипты и функции в matlab
- •1. Теоретическая часть
- •Скрипты
- •1.3. Функции
- •1.4. Глобальные переменные
- •1.5. Отладка м-файлов
- •1.6. Профилирование м-файлов
- •2 . Задание
- •Лабораторная работа №3. Построение графиков в matlab
- •1. Теоретическая часть
- •Создание графиков функций одной переменой
- •1.2. Окна изображения
- •1.3. Расположение нескольких графиков в одном окне
- •1.4. Визуализация функций двух переменных
- •1.5. Сохранение графика
- •2. Задание
- •Лабораторная работа №4. Решение задач с функциями-параметрами в системе matlab
- •Теоретическая часть
- •Назначение подпрограмм-параметров
- •Манипулятор функции (Function Handle)
- •1.3. Класс Function Functions
- •П ример использования глобальных переменных
- •2. Задание
- •Лабораторная работа №5. Разработка простейших оконных приложений в системе matlab
- •1. Теоретическая часть
- •Среда визуального программирования guide
- •Разработка простейшего оконного приложения
- •Приложения, работающие с числовыми данными
- •Создание меню
- •1.5. Пример приложения с выводом графика
- •Задание
- •Приложение. Описание алгоритмического языка matlab
- •П.1. Имена в matlab
- •П.2. Типы данных
- •П.3. Константы
- •П.4. Операции и выражения
- •П.5. Кодирование основных алгоритмических структур
- •Библиографические ссылки
- •Содержание
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));