Строит график синусоиды линией красного цвета
с выведенной масштабной сеткой в интервале [xmin, xmax]
>>
4. Затем запустить сценарий на выполнение:
>> pcr
??? Undefined function or variable 'xmin'.
Error in ==> C:\MATLAB6p1\work\pcr.m
On line 4 ==> x=xmin:0.1:xmax;
На экран выводится сообщение об ошибке, так как сценарий использует глобальные переменные, которые не определены. Для успешного выполнения примера необходимо задать следующие действия:
5. Определить переменные xmin и xmax
>> xmin=-10;
>> xmax = 10;
6. Запустить сценарий на выполнение
>> pcr
Задание 2. Разработать файл-функцию для решения предыдущей задачи, выполнив следующие действия:
1. Запустить редактор m-файлов и ввести следующую программу:
%Plot with color red
%Строит график синусоиды линией красного цвета
%с выведенной масштабной сеткой в интервале [xmin, xmax]
function x=fun(xmin,xmax)
x=xmin:0.1:xmax;
Plot(x,sin(x),'r')
Grid on
2. Сохранить файл под именем «fun.m».
3. Выполнить в командном окне MATLAB следующую команду:
fun(-10,10);
Обратите внимание на то, что xmin и xmax передаются как параметры и объявлять глобальные переменные не требуется.
Задание 3. Разработать файл-сценарий для решения предыдущей задачи с возможностью ввода значений пользователем, выполнив следующие действия:
1.Запустить редактор m-файлов и ввести следующую программу:
%Plot with color red
%Строит график синусоиды линией красного цвета
%с выведенной масштабной сеткой в интервале [xmin, xmax]
disp('введите xmin и xmax ');
xmin=input('xmin = ');
xmax=input('xmax = ');
x=xmin:0.1:xmax;
Plot(x,sin(x),'r')
Grid on
2.Сохранить файл под именем «pcrdialog.m».
3.Выполнить в командном окне MATLAB следующие команды:
>> pcrdialog
Обратите внимание на то, что xmin и xmax объявляются в теле сценария, поэтому объявлять глобальные переменные не требуется.
Лабораторная работа № 2
Массивы, структуры, ячейки
и классы системы MATLAB
Цель работы: изучение принципов работы с матрицами, структурами, ячейками и классами в MATLAB, а также приобретение навыков их применения для построения моделей нейронных сетей и их исследования.
Теоретические сведения
Векторы, матрицы и многомерные массивы
В системе MATLAB любые данные представляются только в виде массивов: одномерных (векторов), двумерных (матриц) и многомерных любой размерности.
Система MATLAB выполняет сложные и трудоемкие операции над векторами и матрицами даже в режиме прямых вычислений без какого-либо программирования. Поддерживается множество операций над матрицами, таких как:
1. Создание матриц с заданными свойствами: ones, zeros, rand;
2. Конкатенация матриц: cat (dim, А, В), cat (dim, A1, A2, A3, ...);
3. Перестановка элементов: fliplr, flipud, perms;
4. Вычисление произведений и суммирование: prod, cumprod, sum;
5. Поворот: rot 90(A), rot 90(A,k);
6. Выделение треугольных частей матриц: tril (x), tril (x,k), triu ;
7. Вычисление сопровождающей матрицы: compan;
8. Матричные операции векторной алгебры: cand, det, rank, norm;
9. Операции с многомерными массивами: +, -, *, .*, /, ./, ^, .^ .
Интересно отметить, что даже обычные числа и переменные в MATLAB рассматриваются как матрицы размера 1х1, что дает единообразные формы и методы проведения операций над обычными числами и массивами. Данная операция называется векторизацией. Векторизация обеспечивает и упрощение записи операций, и существенное повышение скорости их выполнения. Это также означает, что большинство функций может работать с аргументами в виде векторов и матриц.
Структуры
Массив записей – это новый тип массива, в котором разрешается накапливать в виде записей разнородные данные. Отличительная особенность такого массива – наличие именованных полей.
MATLAB поддерживает следующие функции при работе с массивами записей:
Функция | Описание |
struct | Создать массив записей |
fieldnames | Получить имена полей |
getfield | Получить содержимое поля |
setfield | Установить содержимое поля |
rmfield | Удалить поле |
isfield | Истинно, если это поле массива записей |
isstruct | Истинно, если это массив записей |
Пользователь может расширить состав функций, создавая специальные М-файлы для обработки конкретных данных.
Определение структуры
Структура – это массив записей с именованными полями, предназначенными для хранения данных; причем поле может содержать данные любого типа: векторы, матрицы, массивы и структуры.
Структуру можно построить двумя способами:
а) используя операторы присваивания;
б) используя функцию struct.
Для того чтобы сформировать простейшую структуру размера 1х1, необходимо присвоить данные соответствующим полям. Система MATLAB автоматически формирует структуру по мере ее заполнения.
Функция struct имеет следующий синтаксис:
str_array=struct('<имя_поля1>’,'<значение1>','<имя_поля2>','<значение2>',...).
Используя индексацию, можно легко определить значение любого поля или элемента структуры. Точно также можно присвоить значение любому полю или элементу поля. Чтобы обратиться к некоторому полю, необходимо ввести точку (.) после имени структуры, за которым должно следовать имя поля.
Непосредственная индексация – это, как правило, наиболее эффективный способ определить или присвоить значение полю записи. Однако если использовалась функция fieldnames и известно имя поля, то можно воспользоваться функциями setfieldи getfield.
Функция getfield позволяет определить значение поля или элемента поля:
f = getfield(array, {array_index}, 'field', {field_index})
где аргументы array_index и field_index задают индексы для структуры и поля; они не являются обязательными для структуры размера 1х1. Результат применения функции getfield соответствует элементу следующей структуры
f = array(array_index).field(field_index);
По аналогии функция setfield позволяет присваивать значения полям, используя обращение следующего вида:
f = setfield(array, {array_index}, 'field', {field_index}, value)
Выполнение операций с полями и элементами полей абсолютно аналогично операциям с элементами обычного числового массива. В обоих случаях надо использовать индексные выражения.
Для обработки структур со специфической архитектурой полей могут понадобиться специальные функции обработки полей и их элементов. При написании М-файлов для обработки структур необходимо помнить, что пользователь должен сам выполнить анализ возникновения возможных ошибок, связанных с обработкой полей.
Массивы ячеек
В систему MATLAB включен специальный тип массивов ячеек, элементы которого сами, в свою очередь, являются массивами. Имеются следующие функции для работы с массивами ячеек:
Функция | Описание |
cell | Создать массив ячеек |
celldisp | Показать содержимое массива ячеек |
cellplot | Показать графическую структуру массива ячеек |
num2cell | Преобразовать числовой массив в массив ячеек |
deal | Обмен данными между любыми классами массивов |
cell2struct | Преобразовать массив ячеек в структуру |
struct2cell | Преобразовать структуру в массив ячеек |
iscell | Истинно, если это массив ячеек |
Пользователь может расширить состав этих функций, создавая специальные М-файлы для обработки конкретных данных.
Определение массива ячеек
Массив ячеек – это массив, где элементами являются ячейки, которые могут содержать любой тип массива, в том числе и массив ячеек. Массивы ячеек позволяют хранить массивы с элементами разных типов и разных размерностей.
Создать массивы ячеек можно двумя способами:
а) используя операторы присваивания;
б) используя функцию cell, которая позволяет предварительно разместить массив, а затем присвоить данные ячейкам.
Можно построить массив ячеек, присваивая данные отдельным ячейкам. В этом случае система MATLAB автоматически строит массив по мере ввода данных. Существует два способа присвоения данных отдельным ячейкам.
Индексация ячеек
В этом случае необходимо заключить индексы ячейки в круглые скобки, используя стандартные обозначения для массива. Заключить содержимое ячейки в правой части оператора присваивания в фигурные скобки { }.
Индексация содержимого
Для того чтобы индексировать массив ячеек, надо в левой части оператора присваивания указать элемент ячейки в виде индексов в фигурных скобках по аналогии с элементами обычного массива, а также указать содержимое ячейки в правой части оператора присваивания.
Существует также два способа для извлечения данных из массива ячеек и передачи их либо в некоторый числовой массив, либо в новый массив ячеек:
а) доступ к содержимому ячейки с помощью индексации содержимого;
б) доступ к подмножеству ячеек с помощью индексации ячеек.