首页 > 解决方案 > 在matlab中使用持久变量线程化或激活函数

问题描述

Matlab 中有没有办法在同一个循环中使用具有持久变量的同一个函数两次?

这个想法是使用卡尔曼滤波器的通用函数(依赖于持久变量)来分别估计两个系统,而无需复制和重命名卡尔曼滤波器函数。一些语言(例如 G/LabVIEW)允许定义函数是否应该在不同的线程中调用,并且;因此,复制它的一个实例,这有效地分离了持久变量。但是,Matlab 大多只是单线程。我希望这样的命令subplot()可以激活函数的不同实例。

我附上了一个没有目的的虚拟示例(我很清楚这可能是向向量添加常数因子的最愚蠢的方法;))

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

标签: matlabinstancepersistent

解决方案


推荐阅读