По мере задания одних переменных и стирания других рабочая область перестает быть непрерывной и начинает содержать «дыры» и всякий «мусор». Это рано или поздно может привести к ухудшению работы системы или даже к нехватке оперативной памяти. Подобная ситуация становится возможной, если вы работаете с достаточно большими массивами данных. Во избежание непроизводительных потерь памяти при работе с объемными данными (а векторы, матрицы и массивы относятся к таковым) следует использовать команду pack, осуществляющую дефрагментацию рабочей области. Эта команда переписывает все определения рабочей области на жесткий диск, очищает рабочую область и затем заново считывает все определения без «дыр» и «мусора» в рабочую область.
Сохранение рабочей области сессии
Переменные и определения новых функций в системе MATLAB хранятся в особой области памяти, именуемой рабочей областью. MATLAB позволяет сохранять значения переменных в виде бинарных файлов с расширением .mat Для этого служит команда save, которая может использоваться в ряде форм:
· save fname — записывается рабочая область всех переменных в файле бинарного формата с именем fname.mat;
· save fname X — записывает только значение переменной X;
· save fname X Y Z — записывает значения переменных X, Y и Z.
После этих параметров можно указать ключи, уточняющие формат записи файлов:
· -mat — двоичный МАТ-формат, используемый по умолчанию;
· -ascii -double -tabs — формат с разделителем и метками табуляции;
· V4 — запись МАТ-файла в формате версии MATLAB 4;
· -append — добавление в существующий МАТ-файл.
Возможно использование слова save и в формате функции, а не команды, например: save ('fname', 'varT . 'var2') В этом случае имена файлов и переменных задаются строковыми константами. Следует отметить, что возможности сохранения всего текста сессии, формируемой в командном режиме, команда save не дает. И не случайно! Дело в том, что сессия является результатом проб и ошибок, и ее текст наряду с правильными определениями содержит сообщения об ошибках, переопределения функций и переменных и много прочей «шелухи». Необходимости сохранять такое «творчество» обычно нет. А если есть — для этого служит команда diary, описанная чуть ниже. Тем не менее это не значит, что вы не имеете возможности записать только то рациональное зерно, которое родилось в ходе попыток реализации ваших алгоритмов и методов решения задач. Надо просто воспользоваться редактором и отладчиком, которые позволяют (после отладки программы) получить документ в корректной форме без синтаксических и иных ошибок. Такой документ сохраняется в текстовом формате в виде файла с расширением .m.
Ведение дневника
Мы отмечали, что сессии не записываются на диск стандартной командой save. Однако если такая необходимость есть, можно воспользоваться специальной командой для ведения так называемого дневника сессии:
· diary filename — ведет запись на диск всех команд в строках ввода и полученных результатов в виде текстового файла с указанным именем;
· diary off — приостанавливает запись в файл;
· diary on — вновь начинает запись в файл.
Таким образом, чередуя команды diary off и diary on, можно сохранять нужные фрагменты сессии в их формальном виде. Команду diary можно задать и в виде функции diary('file'), где строка 'file' задает имя файла. Следующий пример поясняет технику применения команды diary: » diary myfile.m
» 1+2
ans =
3 » diary off
» 2+3
ans = 5
» diary on » sin(l)
ans = 0.8415
» diary off Нетрудно заметить, что в данном примере первая операция — 1+2=3 — будет записана в файл myfile.m, вторая — 2+3=5 — не будет записана, третья операция — sin(1)=0.8415 — снова будет записана. Таким образом, будет создан файл сценария (Script-файл) следующего вида: 1+2
ans =
3 diary off sin(1) ans = 0.8415
diary off Он приведен в том виде, как записан, т. е. с пробелами между строк. Одна из распространенных ошибок начинающих пользователей — попытка запустить подобный файл в командной строке указанием его имени: » myfile ??? ans = |
Missing variable or function. Error in ==> С:\MATLAB\bin\niyfile.m
On line 3 --> ans = Обычно это приводит к ошибкам, так как данный файл — это просто текстовая запись команд и результатов их выполнения, не проверяемая на корректность и содержащая ряд строк, ошибочных с позиций синтаксиса языка программирования MATLAB — например, выражения ans =. Зато команда type позволяет просмотреть текст такого файла со всеми записанными действиями: » type myfile 1+2 ans= 3
diary off. ans= 0.8415
diary off Во избежание отмеченных казусов рекомендуется записывать файл с расширением, отличным от .m, например .txt. Это позволит встраивать подобные текстовые файлы дневника сессии в документы, содержащие ее описание.
Загрузка рабочей области сессии
Для загрузки рабочей области ранее проведенной сессии (если она была сохранена) можно использовать команду load:
· load fname ... — загрузка ранее сохраненных в файле fname.mat определений со спецификациями на месте многоточия, подобными описанным для команды save (включая ключ -mat для загрузки файлов с расширением .mat обычного бинарного формата, используемого по умолчанию);
· 1oad( 'fname'....) — загрузка файла fname.mat в форме функции.
Если команда (или функция) load используется в ходе проведения сессии, то произойдет замена текущих значений переменных теми значениями, которые были сохранены в считываемом МАТ-файле.
Для задания имен загружаемых файлов может использоваться знак *, означающий загрузку всех файлов с определенными признаками. Например, load demo*.mat означает загрузку всех файлов с началом имени demo, например demol, demo2, demoa, demob и т. д. Имена загружаемых файлов можно формировать с помощью операций над строковыми выражениями.