matlab中带持久变量的线程化或激活函数
在Matlab中有没有一种方法可以在同一个循环中两次使用同一个函数和持久变量 其思想是使用卡尔曼滤波器的通用函数(依赖于持久变量)分别估计两个系统,而无需复制和重命名卡尔曼滤波器函数。一些语言(如g/LabVIEW)允许定义是否应在不同的线程中调用函数,以及;因此,复制它的一个实例可以有效地分离持久变量。然而,Matlab主要是单线程的。我希望有一个像matlab中带持久变量的线程化或激活函数,matlab,instance,persistent,Matlab,Instance,Persistent,在Matlab中有没有一种方法可以在同一个循环中两次使用同一个函数和持久变量 其思想是使用卡尔曼滤波器的通用函数(依赖于持久变量)分别估计两个系统,而无需复制和重命名卡尔曼滤波器函数。一些语言(如g/LabVIEW)允许定义是否应在不同的线程中调用函数,以及;因此,复制它的一个实例可以有效地分离持久变量。然而,Matlab主要是单线程的。我希望有一个像subplot()这样的命令来激活函数的不同实例 我附加了一个虚假的例子,这是没有意义的(我很清楚,这可能是向向量添加常量因子的最愚蠢的方法;)
subplot()
这样的命令来激活函数的不同实例
我附加了一个虚假的例子,这是没有意义的(我很清楚,这可能是向向量添加常量因子的最愚蠢的方法;)
不,这是不可能的。您必须重写函数以取出持久变量并将其作为参数传入
[out,lcl]=pers(x,lcl0,lcl)
。另一个选项是编写一个类,以便可以创建它的两个实例。持久变量是类的属性,函数是类方法。
function [i1,i10] = testThredPers()
% test function calling a local function with persistent variables twice
% number of calles | USER
num = 13;
% allocate memory
i1 = NaN(num,1);
i10 = NaN(num,1);
% clear persistent variables
clear pers
% looping
for i = 1:num
% 1st call of function with persistent variables
i1(i) = pers(i,1);
% 2nd call of function with persistent variables
i10(i) = pers(i,10);
end
end
%% --------- LOCAL FUNCTIONS --------- %
function out = pers(x,lcl0)
% function with persistent variables
persistent lcl
if isempty(lcl)
lcl = lcl0;
end
out = x*lcl;
end