Лучшее решение изменит то, что у вас есть, на что-то вроде:
function [y, yr] = integrator(x, t, yr)
if nargin < 3
yr = []; % will behave identically to persistent when yr is not given
end
Теперь вы можете совершать повторные звонки как:
[x,xr] = integrator(x, t);
[x,xr] = integrator(x, t, xr);
[y,yr] = integrator(x, t);
[y,yr] = integrator(x, t, yr);
Хотя я бы не рекомендовал этого, есть способ сохранить текущую реализацию, и почти достигнет желаемого результата. Можно очистить постоянные переменные, очистив функцию. Это позволит вам «сбросить» постоянную переменную, что означает, что эта последовательность вызовов должна работать:
x = integrator(x_dot, t);
clear integrator;
y = integrator(y_dot, t);
Но учтите, что это, скорее всего, не даст ожидаемого результата при вызове
x = integrator(x_dot, t);
clear integrator;
y = integrator(y_dot, t);
clear integrator;
x = integrator(x_dot, t);
В то время как в решении, которое я предлагаю сначала, вы можете позвонить
[x,xr] = integrator(x, t);
[y,yr] = integrator(x, t);
[x,xr] = integrator(x, t, xr);
[y,yr] = integrator(x, t, yr);
и результаты будут поддерживать состояние, как и ожидалось.