
- •1. Цель работы
- •2. Основы применения м-Файлов и основы программирования в matlab
- •2.1. Работа в редакторе м-файлов
- •2.2. Типы м-файлов
- •2.3. Установка путей
- •2.4. Файл-функции
- •2.4.1. Файл-функции с одним входным аргументом
- •2.4.2. Файл-функции с несколькими входными аргументами
- •2.4.3. Файл-функции с несколькими выходными аргументами
- •2.5. Основы программирования в MatLab
- •2.5.1. Оператор цикла for
- •2.5.2. Оператор цикла while
- •2.5.3. Условный оператор if
- •2.5.4. Оператор ветвления if-elseif-else
- •2.5.5. Оператор ветвления switch
- •2.5.6. Оператор прерывания цикла break
- •3. Индивидуальные задания
- •4. Содержание отчета
2.4.2. Файл-функции с несколькими входными аргументами
Написание
файл-функций с несколькими входными
аргументами практически
не отличается от случая с одним аргументом.
Все входные аргументы размещаются в
списке через запятую. Например, следующий
листинг содержит файл-функцию, вычисляющую
длину радиус-вектора точки трехмерного
пространства
Листинг файл-функции с несколькими аргументами
function r = radius3(x, у, z)
r = sqrt(х.^2 + у.^2 + z.^2);
Для вычисления длины радиус-вектора теперь можно использовать функцию radius3, например:
» R = radius3(1, 1, 1)
R =
1.732
Кроме функций с несколькими входными аргументами, MatLab позволяет создавать функции, возвращающие несколько значений, т.е. имеющие несколько выходных аргументов.
2.4.3. Файл-функции с несколькими выходными аргументами
Файл-функции с несколькими выходными аргументами удобны при вычислении функций, возвращающих несколько значений (в математике они называются вектор-функциями). Выходные аргументы добавляются через запятую в список выходных аргументов, а сам список заключается в квадратные скобки. Хорошим примером является функция, переводящая время, заданное в секундах, в часы, минуты и секунды. Данная файл-функция приведена в следующем листинге.
Листинг функции перевода секунд в часы, минуты и секунды
function [hour, minute, second] = hms(sec)
hour = floor(sec/3600);
minute = floor((sec-hour*3600)/60);
second = sec-hour*3600-minute*60;
При вызове файл-функций с несколькими выходными аргументами результат следует записывать в вектор соответствующей длины:
» [Н, М, S] = hms(10000)
H =
2
М =
46
S =
40
2.5. Основы программирования в MatLab
Файл-функции и файл программы, используемые в предыдущих подразделах, являются самыми простыми примерами программ, Все команды MatLab, содержащиеся в них, выполняются последовательно. Для решения многих более серьезных задач требуется писать программы, в которых действия выполняются циклически или в зависимости от некоторых условий выполняются различные части программ. Рассмотрим основные операторы, задающие последовательности выполнения команд MatLab. Операторы можно использовать как в файл-процедурах, так и в функциях, что позволяет создавать программы со сложной разветвленной структурой.
2.5.1. Оператор цикла for
Оператор предназначен для выполнения заданного числа повторяющихся действий. Самое простое использование оператора for осуществляется следующим образом:
for count = start:step:final
команды MatLab
end
Здесь count переменная цикла, start ее начальное значение, final конечное значение, а step шаг, на который увеличивается count при каждом следующем заходе в цикл. Цикл заканчивается, как только значение count становится больше final. Переменная цикла может принимать не только целые, но и вещественные значения любого знака. Разберем применение оператора цикла for на некоторых характерных примерах.
Пусть
требуется вывести семейство кривых для
,
которое задано функцией, зависящей от
параметра
для значений параметра от 0.1
до 0.1.
Наберите текст файл-процедуры в редакторе М-файлов и сохраните в файле FORdem1.m, и запустите его на выполнение (из редактора М-файлов или из командной строки, набрав в ней команду FORdem1 и нажав <Enter>):
% файл-программа для построения семейства кривых
x = [0:pi/30:2*pi];
for a = -0.1:0.02:0.1
y = exp(-a*x).*sin(x);
hold on
plot(x, y)
end
Замечание 4
Редактор М-файлов автоматически предлагает расположить операторы внутри цикла с отступом от левого края. Используйте эту возможность для удобства работы с текстом программы.
В результате выполнения FORdem1 появится графическое окно, которое содержит требуемое семейство кривых.
Напишите файл-программу для вычисления суммы
.
Алгоритм вычисления суммы использует накопление результата, т.е. сначала сумма равна нулю (S = 0), затем в переменную k заносится единица, вычисляется 1/k!, добавляется к S и результат снова заносится в S. Далее k увеличивается на единицу, и процесс продолжается, пока последним слагаемым не станет 1/10!. Файл-программа Fordem2, приведенная в следующем листинге, вычисляет искомую сумму.
Листинг файл-программы Fordem2 для вычисления суммы
% файл-программа для вычисления суммы
% 1/1!+1/2!+ … +1/10!
Обнуление S для накопления суммы
S = 0;
% накопление суммы в цикле
for k = 1:10
S = S + 1/factorial(k);
End
% вывод результата в командное окно
S
Наберите файл-программу в редакторе М-файлов, сохраните её в текущем каталоге в файле Fordem2.m и выполните. Результат отобразится в командном окне, т.к. в последней строке файл-программы S содержится без точки с запятой для вывода значения переменной S
S =
1.7183
Обратите внимание, что остальные строки файл-программы, которые могли бы повлечь вывод на экран промежуточных значений, завершаются точкой с запятой для подавления вывода в командное окно.
Первые две строки с комментариями не случайно отделены пустой строкой от остального текста программы. Именно они выводятся на экран, когда пользователь при помощи команды help из командной строки получает информацию о том, что делает Fordem2
>> help Fordem2
файл-программа для вычисления суммы
1/1!+1/2!+ … +1/10!
При написании файл-программ и файл-функций не пренебрегайте комментариями!
Все переменные, использующиеся в файл-программе, становятся доступными в рабочей среде. Они являются, так называемыми, глобальными переменными. С другой стороны, в файл-программе могут использоваться все переменные, введенные в рабочей среде.
Рассмотрим задачу вычисления суммы, похожую на предыдущую, но зависящую от переменной x
.
Для вычисления данной суммы в файл-программе Fordem2 требуется изменить строку внутри цикла for на
S = S + x.^k/factorial(k);
Перед запуском программы следует определить переменную x в командной строке при помощи следующих команд:
>> x = 1.5;
>> Fordem2
S =
3.4817
В качестве x может быть вектор или матрица, так как в файл-программе Fordem2 при накоплении суммы использовались поэлементные операции.
Перед запуском Fordem2 нужно обязательно присвоить переменной x некоторое значение, а для вычисления суммы, например из пятнадцати слагаемых, придется внести изменения в текст файл-программы. Гораздо лучше написать универсальную файл-функцию, у которой в качестве входных аргументов будут значение x и верхнего предела суммы, а выходным значение суммы S(x). Файл-функция sumN приведена в следующем листинге.
Листинг файл-функции для вычисления суммы
function S = sumN(x, N)
% файл-функция для вычисления суммы
% x/1!+x^2/2!+ … +x^N/N!
% использование: S = sumN(x, N)
% обнуление S для накопления суммы
S = 0;
% накопление суммы в цикле
for m = 1:1:N
S = S + x.^m/factorial(m);
end
Об использовании функции sumN пользователь может узнать, набрав в командной строке help sumN. В командное окно выведутся первые три строки с комментариями, отделенные от текста файл-функции пустой строкой.
Обратите внимание, что переменные файл-функции не являются глобальными (m в файл-функции sumN). Попытка просмотра значения переменной m из командной строки приводит к сообщению о том, что m не определена. Если в рабочей среде имеется глобальная переменная с тем же именем, определенная из командной строки или в файл-программе, то она никак не связана с локальной переменной в файл-функции. Как правило, лучше оформлять собственные алгоритмы в виде файл-функций для того, чтобы переменные, используемые в алгоритме, не изменяли значения одноименных глобальных переменных рабочей среды.
Циклы for могут быть вложены друг в друга, при этом переменные вложенных циклов должны быть разными.
Цикл for оказывается полезным при выполнении повторяющихся похожих действий в том случае, когда их число заранее определено. Обойти это ограничение позволяет более гибкий цикл while.