Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中带持久变量的线程化或激活函数_Matlab_Instance_Persistent - Fatal编程技术网

matlab中带持久变量的线程化或激活函数

matlab中带持久变量的线程化或激活函数,matlab,instance,persistent,Matlab,Instance,Persistent,在Matlab中有没有一种方法可以在同一个循环中两次使用同一个函数和持久变量 其思想是使用卡尔曼滤波器的通用函数(依赖于持久变量)分别估计两个系统,而无需复制和重命名卡尔曼滤波器函数。一些语言(如g/LabVIEW)允许定义是否应在不同的线程中调用函数,以及;因此,复制它的一个实例可以有效地分离持久变量。然而,Matlab主要是单线程的。我希望有一个像subplot()这样的命令来激活函数的不同实例 我附加了一个虚假的例子,这是没有意义的(我很清楚,这可能是向向量添加常量因子的最愚蠢的方法;)

在Matlab中有没有一种方法可以在同一个循环中两次使用同一个函数和持久变量

其思想是使用卡尔曼滤波器的通用函数(依赖于持久变量)分别估计两个系统,而无需复制和重命名卡尔曼滤波器函数。一些语言(如g/LabVIEW)允许定义是否应在不同的线程中调用函数,以及;因此,复制它的一个实例可以有效地分离持久变量。然而,Matlab主要是单线程的。我希望有一个像
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