gpt4 book ai didi

matlab - 嵌入式 Matlab : Problem with persistent variables

转载 作者:行者123 更新时间:2023-12-04 06:58:25 32 4
gpt4 key购买 nike

我写了一些使用持久变量的函数,例如:

function y = integrator(x, t)
persistent yr; %result
...

然后,如果我在一个循环中只调用一次,则一切正常:
x = integrator(x_dot, t);

但是如果我想用不同的参数调用它两次,它会给出错误的结果:
x = integrator(x_dot, t);
y = integrator(y_dot, t);

这并不意外,但我该如何处理呢?使用不同的(非持久性)变量还是什么?

我习惯于主要与 Simulink 打交道,解决方案对我来说并不明显。

最佳答案

您可以为此使用闭包:

function integrator_handle = make_integrator(yr)

function y = integrator(x, t)
y = x + yr;
yr = yr + 1;
end

integrator_handle = @integrator; % (1)
end

使用:
>> integrator1 = make_integrator(0); % 0 is the initial value for yr
>> integrator2 = make_integrator(1);

integrator1 和 integrator2 现在是有状态的函数句柄,本质上是捕获 yr 状态的闭包,因为它在创建函数句柄时(标有注释“% (1)”的行)。可以使用括号索引调用它们,这看起来就像函数调用:

y = integrator1(x, t);



在函数句柄执行期间对 yr 的任何修改都将保留在函数句柄中,因此在我上面的示例中, yr 将在每次调用积分器时保持递增 1,但仅限于积分器的特定实例。

关于matlab - 嵌入式 Matlab : Problem with persistent variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261578/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com