2013-04-28 45 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 

但是循環中的subs需要太多的時間。有沒有辦法爲循環準備函數?

回答

0

函數subs允許在單次調用時替換幾個值(例如向量或矩陣)。你的情況,你可以做替換,而不循環:在功能lk

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)是爲了避免萬一的問題,如果功能RC.p14不具有多種輸入工作。

該解決方案將也工作,如果從RC.p14輸出是大小爲n X 1的矢量。在此情況下,功能是f1以相同尺寸衍生物RC.p14(N×1)。來自函數lk中的兩個子操作的輸出將具有尺寸n×m,其中m是陣列t的尺寸。

+0

但是,如果@ RC.p14複雜的函數,其中包含函數與參數噸。可能是它返回向量的問題,並且RC.p14將返回錯誤或矩陣。 – aleshko 2013-04-28 14:34:56

+0

@ user1983504我在答案中添加了評論。另外,如果p不允許多個輸入,函數lk應該使用中間符號函數來評估p。 – 2013-04-28 15:41:00

+0

感謝您的幫助。 – aleshko 2013-04-28 17:19:09