У меня есть модель устройства с внутренним состоянием между вызовами.
Ранее я передавал это состояние в вызове функции и возвращал новое состояние при выходе из функции.
Затем я узнал о постоянных переменных, которые были именно то, что мне нужно. Но проблема в том, что когда мне нужно отладить модель или дизайн между несколькими вызовами, сложно воспроизвести именно тот вызов, который мне нужен.
Например, у меня есть функция foo:
function [y] = foo(x)
persistent k;
if isempty(k)
k = 0;
end
y = k*x;
k = k+1; %% or even k = rand
end
У меня есть несколько прогонов:
x = 1:5;
for i = 1:5
y = foo(x(i))
end
и произошла ошибка в 4-м вызове. В настоящее время мне нужно выполнить первые три вызова, чтобы получить состояние функции, которое актуально для 4-го вызова (и если k было равно rand, я вообще не смогу достичь этого состояния). Я пытался сохранить рабочее пространство между вызовами, чтобы иметь возможность загружать все состояния, но это не работает:
for i = 1:3
y = foo(x(i))
end
save foo3.mat
for i = 4:5
y = foo(x(i))
end
clear all
load foo3.mat
foo(3)
ans =
0
Так как я могу сохранить это состояние функции? На самом деле, я могу сохранить эту переменную во время работы функции, поместив оператор сохранения в код функции, но для меня это кажется неправильным. Я думаю, что это утверждение должно быть в верхней части сценария.