В настоящем пункте рассмотрены некоторые способы повышения эффективности создания программ в системе MATLAB, в том числе рекомендации в части повышения быстродействия программ и ее «читабельности».
1. Следует широко использовать комментарии при написании текста программы. Как уже отмечалось, язык программирования MATLAB является интерпретируемым языком высокого уровня, достаточно наглядным и интуитивно понятным, в нем отсутствуют малоинформативные низкоуровневые функции (подобные машинным кодам). Однако даже для того, чтобы разобраться в хорошо знакомой программе спустя некоторое время, полезно не пренебрегать комментариями. В идеале, можно и вовсе закомментировать каждый шаг выполнения программы.
Многие пользователи ограничиваются лишь добавлением комментария с описанием M-файла в начало программы (например, содержащего описание используемых алгоритмов или особенностей задания аргументов функции). Такие комментарии будут отображаться в командной строке после ввода команды
help имя_M-файла
Заметим, что в файл-программе комментарии с описанием кода необходимо размещать перед первым исполняемым оператором (т.е. перед первой непустой строкой), а в файл-функции – после заголовка функции.
2. Следует использовать поэлементные операции с массивами вместо циклов. При запуске программы на исполнение MATLAB интерпретирует команды, записанные в M-файлах в машинный код и по очереди их выполняет. Заметим, что если программа содержит циклы, то время, затрачиваемое системой на интерпретацию, увеличивается, причем каждая строка цикла интерпретируется столько раз, сколько раз будет прокручиваться цикл. В этой связи при создании программ следует, по возможности, избегать использования циклов. Такой подход тем более правомочен, если вспомнить, что MATLAB – это матричная система и аргументами соответствующих функций могут являться не только скалярные величины, но и массивы. В связи с этим MATLAB, в отличие от многих других языков программирования может заменять циклы for и while поэлементными операциями над массивами, что позволяет существенным образом снизить временные затраты на выполнение соответствующих программ.
3. Следует выделять память под массивы. На практике не всегда можно векторизовать алгоритм, заданный в цикле, однако можно использовать способы повышения скорости работы цикла. Для этого необходимо предварительно выделить память под массивы, заполнение которых осуществляется в цикле.
Так, например, программа решения простейшего примера создания вектор-строки x, длина которой с каждым следующим шагом цикла for увеличивается на один элемент и в результате достигнет 10000 элементов
x=0;
for k=2:10000
x(k)=x(k-1)+7;
end
может быть скорректирована в части использования функции zeros для предварительного создания и заполнения 10000 нулями массива, т.е.
x=zeros(1,10000);
for k=2:10000
x(k)=x(k-1)+7;
end
В результате системе MATLAB не придется каждый раз перераспределять память для увеличения длины вектора x внутри цикла, и, следовательно, такой фрагмент программы будет выполняться существенно быстрее.
4. Следует использовать файл-функции. Программа всегда будет выполняться быстрее, если она реализована в виде файл-функции, а не как файл-программа. Созданную файл-программу несложно переделать в файл-функцию (не имеющую, как правило, входных и выходных параметров), добавив в соответствующем месте объявление function.
5. Следует использовать специальные настройки среды MATLAB. При первой загрузке содержимого M-файла в память компьютера система MATLAB осуществляет синтаксический разбор программного кода, переводит его во внутренний формат, называемый псевдокодом или p-кодом, после чего сохраняет псевдокод в памяти компьютера в течение всего сеанса работы с системой MATLAB. В результате первый вызов файл-функций выполняется медленнее (хотя обычно и ненамного медленнее) повторных вызовов. Можно несколько повысить эффективность первого выполнения M-функций, выполнив команду
pcode имя_файл-функции
которая транслирует содержимое M-файла в псевдокод и записывает на диск файл с тем же именем, но с расширением .p, после чего загрузка файл-функции будет выполняться именно из этого файла и первое исполнение файл-функции пройдет быстрее. Можно будет даже стереть файл с расширением .m, а содержимое оставшегося файла с псевдокодом будет невозможно прочитать в текстовых редакторах в силу бинарного формата этого файла – так можно скрыть детали реализованных в файл-функции алгоритмов.
6. Следует предусматривать многоуровневый контроль входных и выходных параметров файл-функции. Многочисленные проверки входных и выходных параметров файл-функции исключительно полезны, даже несмотря на то, что порой они занимают весьма значительный процент от общего объема программного кода. Связанное с этим документирование последнего важно как для сторонних пользователей функции, так и для самих разработчиков, поскольку документирование помогает им в процессе разработки и отладки алгоритма и деталей кодировки.
Часть 7.
Статьи к прочтению:
Основы программирования — создание и отладка первой программы. Урок 2.
Похожие статьи:
-
Лабораторная работа №7 ЦИКЛЫ Программа начинает и заканчивает свою работу, но это не значит, что каждая инструкция в программе должна выполняться только…
-
Рекомендации по алгоритмизации, программированию и отладке
При разработке алгоритма следует пользоваться методом последовательной (поэтапной) детализации. При этом на первом этапе составляется укрупненный…