Материал: Sb97304

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Требования к программе и результатам работы

1. Для расчета функции f t,T T нужно вводить с клавиатуры, вывод значений функции на экран должен соответствовать виду

f(t1, T) = f1 f(t2, T) = f2

Вместо t, T, f должны отображаться вещественные числа, строки должны быть отформатированы так, чтобы их длина была одинакова для всех значений функции.

2. Поскольку T вводится с клавиатуры, необходимо ввести проверку на знак введенного значения: если T не положительное число, следует преобра-

зовать его в положительное число либо вывести сообщение об ошибке (на выбор студента).

3.Исходные данные для эмулятора календаря должны вводиться с клавиатуры символьной строкой, в точности согласно табл. П5.

4.В программе эмулятора календаря должна быть проверка на ввод недопустимой даты.

5.Использование функций работы с датами языка MATLAB не разреша-

ется.

Рекомендации к выполнению программ

1.Для искусственного прерывания программы с выводом сообщения об ошибке нужно использовать функцию ERROR(PROMPT), PROMPT – отображаемая символьная строка.

2.В программе эмулятора календаря целесообразно ввести переменную для хранения числа дней в месяце, и определить ее через SWITCH.

3.Для обработки целочисленных типов можно использовать функции REM(X, Y) (остаток от деления X на Y), IDIVIDE(X, Y) (целочисленное деление

X на Y).

Лабораторная работа 4. ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ

Цели работы: освоение работы с функциями пользователя в среде

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

26

Основные сведения

Скрипты и функции пользователя. Все m-файлы, содержащие исход-

ные коды на языке MATLAB, делятся на два типа: файлы-сценарии и файлы-

функции.

Файлы-сценарии (или script-файлы) представляют просто запись серии команд, которые могли бы быть набраны и выполнены в командном окне MATLAB. Главная их особенность состоит в том, что они не имеют входных и выходных параметров. В них используются переменные из общего рабочего пространства MATLAB. В процессе выполнения они не компилируются в двоичный код. Обычно файл-сценарий имеет следующую структуру:

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

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

Тело сценария, состоящее из любой совокупности операторов.

Основным комментарием служит первая строка текстовых комментариев, а дополнительным – последующие строки. Основной комментарий выво-

дится при выполнении команд lookfor и «help имя_каталога». Полный комментарий выводится при выполнении команды «help имя_файла».

М-файл типа «функция» является типичным элементом языка программирования MATLAB. Файлы-функции обязательно начинаются с объявления function. Структура файла-функции (имя файла f_name.m) с одним выходным параметром выглядит следующим образом:

function var=f_name(список_параметров)

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

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

Тело функции, состоящее из любой совокупности операторов var=выражение

Примечания:

1.При вызовефункции ееидентификатором формально служит имя файла.

2.Если выходных параметров больше одного, то необходимо использо-

вать конструкцию типа

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

Вызов функции можно осуществить из команднойстроки, из скрипта илииз другой функции. Необходимо, чтобы все входные параметры перед вызовом бы-

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

ражениибудетиспользоваться первый извыходныхпараметров.

27

Область видимости переменных. Все переменные, используемые в те-

ле файла-функции, – локальные, т. е. действуют только в пределах тела функции. При этом переменные общего рабочего пространства внутри функ-

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

Иногда возникает необходимость в использовании внутри функции данных, находящихся в рабочем пространстве сценария или функции, откуда осуществляется вызов. В этих случаях используется механизм глобальных переменных, имеющих неограниченную область видимости. Чтобы опреде-

лить переменные как глобальные, используется команда global var1 var2 …

Чтобы несколько программных модулей (функций) могли совместно ис-

пользовать глобальную переменную, ее идентификатор должен быть объявлен как global во всех этих модулях.

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

нится от предыдущего вызова. Для определения статической переменной используется команда

persistent stat1 stat2 …

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

Локальные и встроенные функции. Если некоторая функция пользо-

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

ной функции. При этом вспомогательные функции могут быть локальными и встроенными.

При использовании локальных и встроенных функций необходимо использовать ключевое слово end для обозначения окончания функций. Описа-

ние локальной функции приводится после описания основной функции. Встроенная – описывается непосредственно в теле основной функции. И ло-

28

кальная, и встроенная функции доступны только внутри основной функции,

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

Описание локальной функции

Описание встроенной функции

function val = func(var1, var2)

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

%доп. комментарий xl = sub_func(x1)

операторы

val = выражение

end

val = sub_func(x1) val = выражение

end

function val = func(var1, var2)

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

%доп. комментарий xl = sub_func(x1)

val = sub_func(x1) val = выражение

end

операторы

val = выражение end

Различие между локальными и встроенными функциями состоит в области видимости переменных основной функции. Встроенной функции доступны пе-

ременные основной функции, локальной – недоступны.

Функции с переменным числом параметров. Важным преимуществом

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

EIG(A) дает разные результаты в зависимости от того, сколько при вызове указано выходных переменных. Функции sprintf, sscanf имеют необязатель-

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

nargin – определение числа входных аргументов функции; nargout – определение числа выходных значений функции; varargin – список входных аргументов функции; varargout – список выходных значений функции.

Ключевые слова nargin и nargout указываются в коде функции (строч-

ными буквами, без параметров). Ключевые слова varargin и varargout указываются при определении функции, например:

[V_OUT, varagout] = var_func(V_IN1, V_IN2, varargin)

В примере V_IN1, V_IN2 – обязательные входные параметры функции var_func, которые должны быть указаны при вызове. V_OUT – выходной па-

29

раметр, который, вообще говоря, допускается при вызове не указывать, так как среда MATLAB автоматически создает переменную ans для действий без присваивания. Все остальные аргументы, указанные при вызове, войдут в одномерные массивы ячеек varargin и varargout.

Методика выполнения работы

1.Преобразоватьалгоритмылаб. раб. 2кмодульной структуре.

2.Составить и отладить следующие функции:

для расчета значения функции двух переменных x t,T (табл. П2);

для расчета суммы либо произведения элементов ряда (табл. П3);

для поиска минимальных или максимальных элементов матрицы

(табл. П4).

3. Составить и отладить программу-сценарий для вызова функций поль-

зователя.

Требования к программе и результатам

1. Функция, реализующая расчет x t,T , должна принимать в качестве аргументов t,T числа либо векторы (по выбору студента) и возвращать кро-

ме значения функции вторым параметром порядковый номер условия.

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

зывающий на действие над ними: ‘s’ – сумма, ‘p’ – произведение.

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

кальная функция – для расчета слагаемого/сомножителя.

4. Функция поиска элемента в матрице должна возвращать искомый эле-

мент (строку, столбец) и его индекс. Если в ходе выполнения функции требует-

ся найти несколько элементов, индекс должен быть матрицей индексов.

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

6.Программа-сценарий вызова функции должна обеспечить, кроме вы-

зова функций, вывод результатов на экран в виде таблицы значений x t,T ,

значений суммы и произведения элементов ряда, искомых элементов и их индексов матрицы, а также графика x t .

30