2014-02-14 157 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