Вообще говоря, достижение работоспособности программы — лишь один из этапов ее отладки. Не менее важным вопросом является оптимизация программы по минимуму времени исполнения или по минимуму объема кодов. Современные компьютеры, в которых используется система MATLAB, имеют достаточные резервы памяти, так что размеры программы, как правило, не имеют особого значения. Намного важнее проблема оптимизации программы в части быстродействия.
Оценка времени исполнения отдельных частей программы называется ее
профилированием.
profile fun — запуск профилирования для функции fun;
profile report — вывод отчета о профилировании;
profile plot — графическое представление результатов профилирования в виде диаграммы Парето;
profile filename — профилирование файла с заданным именем и путем;
prof ile report N — вывод отчета по профилированию заданных N строк;
profile report frac — выводит отчет по профилированию тех строк, относительная доля выполнения которых в общем времени выполнения составляет не менее чем frac (от 0.0 до 1.0);
profileon — включение профилирования;
profile off — выключение профилирования;
profile reset — выключение профилирования с уничтожением всех накопленных данных;
INFO = profile — возвращает структуру со следующими полями:
file — полный путь к профилируемому файлу;
interval — интервалы времени в секундах;
count — вектор измерений;
state — состояние профилировщика: 'on' (включен) или 'off (выключен).
Ниже приводится пример на профилирование m-файла ellipj (эллиптическая функция Якоби):
» profile on
» profile ellipj
» ellipj([0:0.01:1].0.5); .
» profile report
Total time in "C:\MATLAB\toolbox\matlab
\specfun\ellipj.m": 0.16 seconds
100% of the total time was spent on lines:
[96 97 86]
85: if -isempty(in)
0.01s. 6% 86: phin(i.in) = 0.5 * ...
87:(asin(c(i+l.in).*sin(rem(phin(i+l.in)
.2*pi))./a(i+l,in))
95: ml = find(m==l):
0.11s. 69% 96: sn(ml) = tanh(u(ml)): 0.04s. 25*97:
cn(ml) = sech(u(ml));
98: dn(ml) = sech(udnl)):
» INFO=profile INFO=file:
'С:\MATLAB\toolboxNmatlab\specfun\el11pj.m'
interval: 0.0100
count: [98x1 double]
state: 'off '
» profile plot
Нетрудно заметить, что при профилировании выводятся номера строк программы, у которых время выполнения превосходит 0.01 с. С использованием этого интервала и оценивается время исполнения программного кода. Последняя команда выводит графическую диаграмму профилирования, показанную на рис. 21.1.