2014-10-05 88 views
0

我有一個由教師提供的功能,它不能讓我們看到內部運作。MATLAB:從for循環轉換爲無循環

該功能基本上集成了您輸入的任何內容。

這裏是我們的循環:

for i = 1:length(time)-1 
    intdefValues(i) = intdef(t, r, time(i), time(i+1)); 
end 

我們正在努力做到這一點:

intdefValues = intdef(t, r, time(1:end-1), time(2:end)); 

難道我們錯了嗎?無論如何,該功能不支持向量?

函數的語法,以防萬一您好奇;

intdef(t, x, a, b) 

其中t =時間矢量,x =函數,a,b是開始/結束參數。

+1

當你嘗試沒有循環,函數會給出錯誤? – 2014-10-05 21:29:06

+0

*我們錯了嗎?反正該函數不支持向量?*是的,該函數可能只接受標量,而不是向量作爲輸入。可以肯定的是,您應該向您的教師詢問有關該功能語法的更多細節。或者像@ ParagS.Chandakkar建議的那樣,嘗試爲它提供載體,並查看是否出現錯誤。 – Jubobs 2014-10-05 23:38:47

+0

另外,即使您找到某種方式來向量化,也可能不會使程序運行得更快,因爲您正在更改函數「intdef()」的工作方式。所以可能不值得調查。 – 2014-10-05 23:50:53

回答

-1
tic();        % ------------ 
            % TEST ALSO 
            % PERFORMANCE: 

            % prepare another "vectorOfTimeENDs", 
            % aligned with your loop-ing strategy 
            % for a fully vectorised call 

startsVector = time(1:end-1);  % just a syntax-sugar, may omit for speed == time(1:end-1) 
    endsVector = time(2:end);   % this one is important 

intdefValues = intdef(tVector, rFunction, startsVector, endsVector); 
toc() 

% --------------------------------------------------------------------------- 
tic();        % COMPARE WITH THE ORIGINAL FOR/LOOP: 
for i = 1:length(time)-1 
    intdefValues(i) = intdef(tVector, rFunction, time(i), time(i+1)); 
end 
toc() 
+0

這是如何回答這個問題的? – Jubobs 2014-10-05 23:41:48

+0

@Jubobs正確的,黑盒測試(因爲OP說明問題屬於)不是一個能夠直接回答你的問題的領域。我們和OP都不知道函數實現的內部細節。儘管如此,即使是黑盒測試,IMHO也可以間接地證明PASS/FAIL的困境,這個函數是否在內部設計,以支持一個嚴格的操作數。 – user3666197 2014-10-06 00:45:32