Основные теоретические сведения. В MATLAB особое значение имеют файлы двух типов — с расширениями .mat и .m

 

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

Многооконный редактор–отладчик с пустым окном редактирования m–файлов можно вызвать командой Edit из командной строки или командой меню File > New > M-fiLe (рисунок 3.1).

 

Рисунок 3.1– Многооконный редактор–отладчик

 

После этого в окне редактора можно создать свой файл, а также пользоваться средствами его отладки и запуска. Для запуска файла его необходимо записать на диск, используя команду Save as в меню File редактора. Редактор–отладчик m–файлов выполняет синтаксическую проверку программного кода по мере ввода текста. При этом используется следующее цветовое выделение:

– ключевые слова языка программирования — синий цвет;

– операторы, константы и переменные — черный цвет;

- комментарии после знака % — зеленый цвет;

- символьные переменные (в апострофах) — коричневый цвет;

- синтаксические ошибки — красный цвет.

Благодаря цветовому выделению вероятность синтаксических ошибок резко снижается

М–файлы, создаваемые редактором-отладчиком, делятся на два класса: файлы-сценарии, не имеющие входных параметров и файлы-функции, имеющие входные параметры. Файл-сценарий, именуемый также script-файлом, является просто записью серии команд без входных и выходных параметров. Он имеет следующую структуру:

 

%Основной комментарий

%Дополнительный комментарий

Тело файла с любыми выражениями

 

Важны следующие свойства файлов – сценариев:

1) они не имеют входных и выходных аргументов;

2) работают с данными из рабочей области;

3) в процессе выполнения не компилируются;

4) представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется в сессии.

Рассмотрим следующий файл-сценарий (рис. 3.2):

 

 

Рисунок 3.2 – Создание файла-сценария в MATLAB

 

Первые три строки здесь — это комментарий, остальные — тело файла. Обратите внимание на возможность задания комментария на русском языке. Знак % в комментариях должен начинаться с первой позиции строки. Необходимо отметить, что такой файл нельзя запустить без предварительной подготовки, сводящейся к заданию значений переменным xmin и xmах, использованным в теле файла. Это следствие первого свойства файлов-сценариев — они работают с данными из рабочей области. Имена файлов-сценариев нельзя использовать в качестве параметров функций, поскольку файлы–сценарии не возвращают значений. Можно сказать, что файл–сценарий — это простейшая программа на языке программирования MATLAB.

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

 

function var= f_name(Cпиcoк_napaмeтpов)

%Основной комментарий

%Дополнительный комментарий

Тело файла с любыми выражениями

vаr=выражение

М–файл-функция имеет следующие свойства:

1) он начинается с объявления function, после которого указывается имя переменной var — выходного параметра, имя самой функции f_name и список ее входных параметров;

2) функция возвращает свое значение и может использоваться в математических выражениях;

3) все переменные, имеющиеся в теле файла-функции, являются локальными, т. е. действуют только в пределах тела функции;

4) файл-функция является самостоятельным программным модулем, который общается с другими модулями через свои входные и выходные параметры;

5) правила вывода комментариев те же, что у файлов-сценариев;

6) при обнаружении файла–функции он компилируется и затем исполняется, а созданные машинные коды хранятся в рабочей области системы MATLAB.

Последняя конструкция var = выражение вводится, если требуется, чтобы функция возвращала результат вычислений. Приведенная форма файла-функции характерна для функции с одним выходным параметром. Если выходных параметров больше, то они указываются в квадратных скобках после слова function. При этом структура модуля имеет следующий вид:

 

function [varl,var2....] = f_name(Список_параметров)

%Основной комментарий

%Дополнительный комментарий

Тело файла с любыми выражениями

vаr1=выражение

vаr2=выражение

 

Если функция используется как имеющая единственный выходной параметр, но имеет ряд выходных параметров, то для возврата значения будет использоваться первый из них. Это зачастую ведет к ошибкам в математических вычислениях. Поэтому, как отмечалось, данная функция используется как отдельный элемент программ вида [varl, var2] = f_nаmе (Список_параметров). После его применения переменные выхода varl, var2 становятся определенными и их можно использовать в последующих математических выражениях и иных сегментах программы.

Для организации диалогового ввода и вывода используются следующие операторы, представленные в таблице 3.1.

 

Таблица 3.1 Операторы диалогового ввода/вывода

Оператор Синтаксис Назначение
INPUT x = input(‘<приглашение>’) Для ввода данных с клавиатуры
DISP disp (<переменная или текст в апострофах>) Для вывода на дисплей  

 

Приведем простой пример диалоговой программы, которая служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса r (рис.3.3).

 

 

Рисунок 3.3 – Пример диалоговой программы

 

Для организации ветвлений служат условные операторы.

Конструкции условных операторов:

1)

if <условие>

<операторы>

End

Операторы (тело выражения) выполняются только в том случае, если условие истинно, если условие ложно, то тело выражения не выполняется.

2) if <условие>

<операторы 1>

Else

<операторы 2>

End

Если ход программы должен изменяться в зависимости от нескольких условий, то следует использовать полную конструкцию if-elseif-else. Каждая из ветвей elseif в этом случае должна содержать условие выполнения блока операторов, размещенных после нее. Важно понимать, что условия проверяются подряд, первое выполненное условие приводит к работе соответствующего блока, выходу из конструкции if-elseif-else и переходу к оператору, следующему за end. У последней ветви else не должно быть никакого условия. Операторы, находящиеся между else и end, работают в том случае, если все условия оказались невыполненными. Например, требуется написать файл-функцию для вычисления кусочно-заданной функции:

 

 

Рисунок 3.4 – Листинг программы для вычисления значения функции

 

В системе MATLAB могут применяться следующие операторы сравнения, приведенные в таблице 3.2.

Таблица 3.2 Операторы сравнения

Символ Назначение Имя функции
< Меньше lt
>= Больше или равно ge
> Больше gt
<= Меньше или равно le
== Равно eq
~= Не равно ne

 

Операции (==, ~=) проводят сравнение вещественных и мнимых частей комплексных чисел, а операции (>, <, >=, <=) – только вещественных частей.

Логические операции можно записывать в виде функций (табл. 3.3).

 

Таблица 3.3 Логические операции

Символ Назначение Имя функции
& Логическое «и» and
| Логическое «или» or
~ Отрицание not

 

Результатом логических операций являются числа 0 (false) и 1(true).

В системе MATLAB есть две разновидности операторов цикла – условный и арифметический. Для повторения операторов нефиксированное число раз используется оператор цикла с предусловием:

while <условие>

<операторы>

End

Операторы выполняются, если переменная <условие> имеет ненулевые элементы.

Арифметический оператор цикла имеет следующий вид:

for <имя> = <НЗ>: <Шаг>: <КЗ>

<операторы>

end,

где <имя> – имя управляющей переменной цикла,

<НЗ> – начальное значение управляющей переменной,

<КЗ> – конечное значение управляющей переменной,

<Шаг> – приращение значений переменной <имя> в ходе ее изменения от значения <НЗ> до значения <КЗ>. Если параметр <Шаг> не указан, по умолчанию его значение принимается равным единице.

При работе с циклом forдопустимо использование оператора прерывания цикла break. При работе данного оператора работа цикла завершается, и управление передается на следующий после конца цикла оператор.

Ход работы программы может определяться значением некоторой переменной (переключателя). Такой альтернативный способ ветвления программы основан на использовании оператора переключения switch.. Оператор switch содержит блоки, начинающиеся со слова case, после каждого case записывается через пробел то значение переключателя, при котором выполняется данный блок. Последний блок начинается со слова otherwise, его операторы работают в том случае, когда ни один из блоков case не был выполнен. Если хотя бы один из блоков case выполнен, то происходит выход из оператора switсh и переход к оператору, следующему за end.

Предположим, что требуется найти количество единиц и минус единиц в заданном массиве и, кроме того, найти сумму всех элементов, отличных от единицы и минус единицы. Листинг программы содержит файл–функцию, которая по заданному массиву возвращает число минус единиц в первом выходном аргументе, число единиц — во втором, а сумму — в третьем (рис.3.5).

 

 

Рисунок 3.5 – Листинг программы

 

Для остановки программы используется оператор pause. Он используется в следующих формах:

a) pause — останавливает вычисления до нажатия любой клавиши;

b) pause(N) — останавливает вычисления на N секунд;

c) pause on — включает режим отработки пауз;

d) pause off — выключает режим отработки пауз.

Порядок выполнения

1. Из файла-сценария с помощью функции диалогового ввода ввести с клавиатуры все необходимые данные. Выполнить расчет с использованием условных операторов и вывести результаты в командное окно (таблица 3.4).

 

Таблица 3.4 Варианты заданий

№ варианта Задание
Найти сумму положительных из четырех заданных переменных.
Найти максимальное значение из четырех заданных переменных и вывести ее.
Заданы четыре переменные. Наименьшую из них заменить на сумму остальных.
Заданы четыре переменные. Подсчитать количество отрицательных и количество нулевых из них.
Найти произведение отрицательных из четырех заданных переменных.
Заданы две фигуры: квадрат задан длиной стороны, а круг – длиной радиуса. Определить, какая из них имеет большую площадь и во сколько.
Заданы четыре переменные. Все отрицательные из них заменить абсолютными значениями и увеличить в 2 раза.
Заданы четыре переменные, подсчитать количество равных нулю, положительных и отрицательных.
Даны четыре переменные. Найти среди них переменные, наиболее близкие по значению к .
Заданы четыре переменные. Все положительные из них заменить отрицательными значениями, умноженными на 5.
Найти минимальное и максимальное значения из четырех заданных переменных.
Заданы четыре значения. Определить какие из них целые.
Заданы четыре переменные. Подсчитать количество и произведение значений, попавших в интервал [1 5].
Заданы четыре переменные. Подсчитать количество отрицательных и количество нулевых из них.
Найти произведение отрицательных из четырех заданных переменных.

 

2. Написать файл-функцию с использованием операторов ветвления и циклов, на основании вариантов задания, представленных в таблице 3.5.

 

Таблица 3.5 Варианты заданий

Вход.массив Формируемый массив Задача
Сформировать массив А1 из минимальных элементов строк матрицы А и массив В1 из минимальных элементов строк матрицы В. Среди элементов А1 и В1 найти максимальный
Сформировать массив С – сумму элементов массивов А и В. Найти максимальное значение массивов А, В, С.
Определить минимальные элементы в матрицах А и В ( и ). Вычислить С=А*В**.
Сформировать массив А1 из максимальных элементов строк матрицы А и массив В1 из максимальных элементов строк матрицы В. Упорядочить массив А1 по возрастанию, а массив В1 – по убыванию.
Определить максимальные элементы в матрице А и массиве В ( и ). Вычислить С=А*В**.
Сформировать массив А1 из средних значений элементов строк матрицы А. Упорядочить массив А1 по возрастанию, а В – по убыванию. Осуществить поэлементное умножение А1 и В.
Заменить строку матрицы А, содержащую максимальный элемент, массивом В. Вычислить сумму элементов полученной матрицы.
Массив А упорядочить по возрастанию и заменить им последнюю строку матрицы В.
Упорядочить по возрастанию массивы А и В. Осуществить поэлементное деление упорядоченных массивов. Определить произведение элементов результирующего массива.
Вычислить произведение элементов матрицы А (рА) и сумму элементов матрицы В (сВ). Вычислить матрицу С=рА*сВ*А*В'.
Определить минимальные элементы в матрицах А и В ( и ). Вычислить С=А*В**.
Сформировать массив А1 из максимальных элементов строк матрицы А. Осуществить поэлементное умножение А1*В. Упорядочить массив А1 по возрастанию.
Заменить строку матрицы А, содержащую минимальный элемент, массивом В. Вычислить произведение элементов полученной матрицы.
Продолжение таблицы 3.5
Массив А упорядочить по убыванию и заменить им первую строку матрицы В.
Сформировать массив С – произведение элементов массивов А и В. Найти максимальные и минимальные значения массивов А, В, С.

Содержание отчета

1. Цель занятия.

2. Листинг программ и результаты выполнения программ.

 

Контрольные вопросы

1. Как осуществляется диалоговый ввод и вывод?

2. Для чего используются условные операторы?

3. Чем отличаются файлы-сценарии от файлов-функций?


Практическое занятие № 4