Сохранить файл кода в файл .mat - PullRequest
0 голосов
/ 28 мая 2018

Прямо сейчас я помещаю функцию симуляции вместе с .mat, содержащим результаты симуляции и параметры в файле .zip.Затем файл является окончательным результатом моей функции симуляции.Эта процедура гарантирует, что я могу отследить ошибки - своего рода примитивный контроль версий.Функция имитации обычно занимает около 10-100 строк кода.

Было бы более элегантно, если бы я мог загрузить один файл и получить все - поэтому я хотел бы создать один файл .mat, который содержит обафайл кода, а также переменные, и при загрузке поместить этот файл кода в текущую папку при загрузке данных.Возможно ли это (кажется, нет - я не могу найти ничего, кроме сохранения переменных и цифр в .mat)?

Помещение всего содержимого функции в переменную является возможной альтернативой, которую я рассматриваю, но я не нахожу это очень убедительным, так как не могу легко прочитать этот код, пока не воссоздаю файл.

1 Ответ

0 голосов
/ 28 мая 2018

Далее предполагается, что функция, которая сохраняет результаты моделирования, является той же самой функцией, для которой вы хотите сохранить код.Это работает с использованием mfilename для получения имени файла, а затем с помощью evalc для захвата вывода type для получения его кода:

function test
a = 1;
b = 2;
c = 1:10; % ... create result variables
code = evalc(['type ' mfilename]); % this variable stores the code of current function
save results % save in a file called 'results.mat'

Или, если вы предпочитаете избегать evalc, вы можете прочитать содержимое файла с помощью fread:

function test
a = 1;
b = 2;
c = 1:10; % ... create result variables
fid = fopen([mfilename('fullpath') '.m']); % open file of current function
code = fread(fid, '*char').'; % read its code
fclose(fid); % close file
clear fid % delete variable
save results % save in a file called 'results.mat'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...