matlab提高了循环中subs的性能

时间:2013-04-28 14:08:29

标签: matlab

我有类似的东西。其中RC.p14是一些依赖于某些参数的函数。

        t=ogj.a:ogj.s:ogj.b;
        lk1 = zeros(1,length(t));

        f1=RC.lkPrepare(@RC.p14,l1);

        for i=1:length(t)
            lk1(i)=RC.lk(@RC.p14,l1,t(i),f1);
        end            
    end

    function res=lk(p,l,t,f)           
        res=subs(f, 'z', t)/p(l,t);
    end

   function res=lkPrepare(p,l)
        syms z
        res=diff(1-p(l,z));            
    end

但是循环中的潜艇花费了太多时间。有没有办法为循环准备函数?

1 个答案:

答案 0 :(得分:0)

函数subs允许在单次调用时替换多个值(例如向量或矩阵)。在您的情况下,您可以在没有循环的情况下进行替换:

    t=ogj.a:ogj.s:ogj.b;

    f1=RC.lkPrepare(@RC.p14,l1);

    lk1=RC.lk(@RC.p14,l1,t,f1);
end

function res=lk(p,l,t,f)
    syms z   
    res=subs(f, z, t)./subs(p(l,z), z, t);
end

函数subs(p(l,z), z, t)中的表达式lk用于避免在函数RC.p14不能与多个输入一起使用时出现问题。

如果来自RC.p14的输出是大小为n x 1的向量,则此解决方案也将起作用。在这种情况下,函数f1是具有相同大小(n x 1)的RC.p14的导数。函数lk中的两个子操作的输出将具有n×m的大小,其中m是数组t的大小。