Материал: Matlab. Практический подход. Самоучитель

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

Глава 9. Символьные вычисления

После имени процедуры через оператор присваивания указывается ключевое слово proc, после которого в круглых скобках перечисляются аргументы процедуры. Если в процедуре используются локальные переменные, они перечисляются после ключевого слова local. Эта часть кода не является обязательной. Тело кода процедуры размещается между ключевыми словами begin и end_proc.

На заметку

Переменные могут быть локальными и глобальными. Локальные переменные доступны только в пределах кода процедуры в том смысле, что любые изменения, вносимые в такие переменные в теле процедуры, отменяются после выполнения процедуры. По умолчанию все переменные (не объявленные в разделе local) полагаются глобальными. При совпадении имен глобальной и локальной переменных приоритет остается за локальной переменной.

Если процедура возвращает результат, то для этого обычно используют инструкцию return(). Аргументом указывается возвращаемое значение. Но в принципе можно обойтись и без этой инструкции. В этом случае возвращается последнее вычисленное значение в процедуре. Пример процедуры для вычисления чисел Фибоначчи приведен ниже:

FibNums:=proc(n) local i,a,b; begin

a:=1:

b:=1:

for i from 3 to n do b:=a+b:

a:=b-a: end_for: return(b); end_proc:

Использование этой процедуры в рабочем документе MuPAD показано на рис. 9.44.

Еще один пример процедуры (тоже для вычисления чисел Фибоначчи) показан в документе на рис. 9.45.

В этом случае использована рекурсия – вызов процедуры в теле этой же процедуры. Код процедуры следующий:

FNums:=proc(n) begin

if n=1 or n=2 then return(1):

else return(FNums(n-1)+FNums(n-2)): end_if:

end_proc

401

Самоучитель Matlab

Рис. 9.44. Документ с описанием процедуры

Рис. 9.45. Процедура с рекурсией

402

Глава 9. Символьные вычисления

Здесь реализован такой алгоритм. Проверяется значение аргумента процедуры. Если значение аргумента равно 1 или 2, то в качестве значения процедуры возвращается 1. В противном случае в качестве результата возвращается выражение, в котором значение вычисляется путем вызова определяемой процедуры, но уже с другими аргументами.

На заметку

В качестве завершающей инструкции вместо ключевых слов end_for, end_ while, end_repeat, end_if, end_case и end_proc в соответствующих местах можно использовать ключевое слово end.

Редактор кодов

Странный способ украшать дом монограммой королевы.

К/ф "Приключения Шерлока Холмса и доктора Ватсона. Кровавая надпись"

При работе со средой MuPAD существует возможность создавать и сохранять отдельными файлами программные коды, а затем вызывать их в рабочем документе в случае необходимости. Коды создаются в специальном редакторе, который может быть запущен из окна заставки среды MuPAD – для этого следует выбрать команду New Editor (см. рис. 9.46). Можно открыть окно редактора кодов, воспользовавшись командой File New Editor (рис. 9.46).

Рис. 9.46. Запуск редактора кодов

В результате открывается окно редактора кодов, представленное на рис. 9.47.

403

Самоучитель Matlab

Рис. 9.47. Окно редактора кодов

В окне вводится код и сохраняется файл (команда File Save). Например, вводим код и сохраняем в файл с именем MyCode.mu, как показано на рис. 9.48.

Рис. 9.48. Окно редактора кодов с командами после сохранения

В данном случае файл содержит такой код:

404

Глава 9. Символьные вычисления

SEED:=123; rnd:=random(-10..10); L:=[];

for k from 1 to 10 do L:=L.[rnd()];

end;

ones:=random(2);

n:=5; A:=matrix(n,n,[ones()$i=1..n*n])

Этим кодом создается список L из десяти целых случайных чисел, а также квадратная матрица A, заполненная случайным образом нулями и единицами. Важное место в этом коде занимает процесс генерирования случайных чисел. Первой командой SEED:=123 выполняется инициализация генератора случайных чисел. Это позволяет каждый раз при выполнении кода генерировать одну и ту же "случайную" последовательность. Команда не обязательная (ее можно было не использовать), а нужна скорее для удобства.

На заметку

Пикантность ситуации состоит в том, что при генерировании случайных чисел на самом деле генерируются неслучайные числа. Это так называемые псевдослучайные числа. Для генерирования последовательности таких чисел необходимо задать некое "затравочное" число, которое генератор случайных чисел использует в расчетах при вычислении первого псевдослучайного числа. Обычно при запуске генератора случайных чисел в качестве такого "затравочного" числа используется, например, системное время. Это создает иллюзию случайности. Но можно "затравочное" значение задать и в явном виде. Если каждый раз использовать одно и то же значение, будет генерироваться одна и та же последовательность чисел.

Командой rnd:=random(-10..10) определяется функция rnd() для генерирования случайных чисел. При определении функции rnd() в свою очередь использована встроенная функция random(), которой генерируются целые случайные числа. Если аргументом функции random() указать диапазон, то генерироваться будут случайные целые числа, равномерно распределенные в этом диапазоне (включая граничные точки диапазона). Таким образом, функцией rnd() будут генерироваться числа в диапазоне от -10 до 10.

Командой L:=[] создается пустой список L. После этого с помощью оператора цикла (индексная переменная k пробегает значения от 1 до 10) этот список заполняется случайными числами. В теле цикла использована команда L:=L.[rnd()]. Она буквально означает добавление в конец списка L элемента, который вычисляется инструкцией rnd(), то есть случайного числа в диапазоне от -10 до 10.

405

Источник: https://studfile.net/preview/16433384/