2014-02-14 155 views
0

我試圖使用循環來計算下列公式索引: enter image description hereFor循環在Matlab

但是,由於「T」和「頭」是​​不同的元素個數,我不知道如何正確索引代碼。

這是我迄今所做的:

t = [0:0.1:15]; 
tau = [0:2:10]; 
dtau = tau(2)-tau(1); 

BB = 4*tau; 
u = 2*t; 
B = zeros(1,length(t)); 

for ii = 1:length(t) 
    for jj = 1:length(tau) 
     B(ii) = B(ii) + BB(jj)*u(ii-jj+1)*dtau; 
    end 
end 

更詳細地說明一點 - 在積分上限是在這種情況下,「T」,所以對於每一個B(T)我想從tau(0)到tau = t整合。有什麼建議麼? 謝謝。

+7

所以......你不能只是去'conv(BB,u)'? – Dan

回答

3

你正在做卷積運算,所以只要使用Matlab的內建函數即可,例如conv。但在這裏是你的理解多圈的版本:使用你的數據

t = [0:0.1:15]; 
tau = [0:2:10]; 
dtau = tau(2)-tau(1); 

BB = 4*tau; 
u = 2*t; 
B = zeros(1,length(t)); 

我們翻轉u,然後將其滑到'BB」。用零填充BB是最容易的,所以你不必處理邊緣:

U = fliplr(u); 
BB = [zeros(1,length(u)-1), BB, zeros(1,length(u)-1)]; 

for ii = 1:length(t) %//This should actually go to 21, I don't feel like working out why right now 
    B(ii) = sum(U.*BB(ii:(ii+length(u)-1))); 
end 
2

要回答你的問題:

如果你想那樣做,你只需要定義taufor ii = 1:length(t)內循環,這就是全部。

因此,這將是這個樣子:

t = [0:0.1:15]; 

u = 2*t; 
B = zeros(1,length(t)); 

for ii = 1:length(t) 

    tau = [0:0.2*ii:ii] 
    dtau = tau(2)-tau(1); 
    BB = 4*tau;  

    for jj = 1:length(tau) 
     B(ii) = B(ii) + BB(jj)*u(ii-jj+1)*dtau; 
    end 
end 

話雖這麼說,我覺得丹的評論是對現貨:除非你想用自己的參數玩,你在那裏執行一個簡單的卷積。

+0

另外你的ii循環設置爲1,你可能想將它設置爲0.1,或者任何t步驟。 – McMa

+0

'ii'正在運行't'的指數,所以如果他把'B'繪製在't'上,它就會按預期工作。它不會像'B(some_t)'那樣工作。 – scenia

+0

我不好,你就在那裏;)但是他必須相應地在循環內定義'tau'。 – McMa