matlab提高了回路中SUB的性能

matlab提高了回路中SUB的性能,matlab,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 re

我有这样的东西。其中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

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

函数
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
函数
lk
中的表达式
subs(p(l,z),z,t)
用于避免函数
RC时出现问题。p14
不能处理多个输入


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

但if@RC.p14复杂函数,其中包括带参数t的函数。可能是因为它返回向量,而RC.p14将返回错误或矩阵。@user1983504我在答案中添加了注释。此外,如果p不允许多个输入,函数lk应该使用中间符号函数计算p。