2013-04-28 2 views
0

나는 이와 비슷한 것을 가지고있다. 여기서 RC.p14는 일부 매개 변수에 따라 일부 기능이 있습니다.루프에서 잠수함의 성능을 향상시키는 matlab

 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 

그러나 서브 루프에 너무 많은 시간이 걸렸습니다. 그리고 루프를위한 함수를 준비하는 방법이 있습니까?

답변

0

기능 subs 단일 호출에서 여러 값 (예 : 벡터 또는 행렬)을 사용할 수 있습니다. 귀하의 경우에는, 당신은 루프없이 대체를 수행 할 수 있습니다 기능 RC.p14 여러 입력을 작동하지 않는 경우

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의 출력이 nx1 크기의 벡터 인 경우에도 작동합니다.이 경우, f1 함수는 동일한 크기 (nx1)를 갖는 RC.p14의 미분입니다. 함수 lk에서 두 서브 작업의 출력은 크기 n x m을 가지며, 여기서 m은 배열 t의 크기입니다.

+0

그러나 매개 변수 t가있는 함수를 포함하는 @ RC.p14 복합 함수 인 경우. 벡터와 RC.p14가 오류 또는 행렬을 반환하는 문제가 될 수 있습니다. – aleshko

+0

@ user1983504 답변에 댓글을 추가했습니다. 또한, 함수 lk는 p가 다중 입력을 허용하지 않으면 중간 기호 함수를 사용하여 p를 평가해야합니다. –

+0

도와 주셔서 감사합니다. – aleshko

관련 문제