2017-02-12 98 views
-1

我有一个存储值的for循环。出于某种原因,它正在计算for循环中的所有数字的值,而不仅仅是数组中的值。在循环中计算值

t = 3600:50:172800;x = 0.1;y = 0; ro = 0.1; 

T = zeros(1,length(t)); 

for Cm = 1E6:1E6:4E6 
    for i = 1:length(t) 
     T = T_ILS(x,y,ro,Cm,t); 
     Tall(Cm,:) = [T]; 
    end 
end 

我得到的错误是“请求的2000000x3385数组超出最大数组大小首选项”。我希望for循环只计算Cm值,而不是每个中间的数字。

+0

什么是变量't'? – codeaviator

+0

新增,删除了一些代码以保持简单。 – Scott

+0

您添加的代码行错位。 – codeaviator

回答

1

你不计算中间的每个值,但是你的索引是混乱的。 Cm需要数百万的值,但是您可以使用它来索引Tall(Cm,:)。你可能想

t = 3600:50:172800;x = 0.1;y = 0; ro = 0.1; 

T = zeros(1,length(t)); 

Cm = 1E6:1E6:4E6; 
for j = 1:length(Cm) 
    for i = 1:length(t) 
     T(i) = T_ILS(x,y,ro,Cm(j),t(i)); 
    end 
    Tall(j,:) = [T]; 
end 

注意,主函数调用分配给T(i)和函数参数使用t(i)来证明for环路的存在。

+0

在内部循环中,相同的输出值在'Cm'实际更改之前返回'length(t)'次。 – nikaltipar

+0

好点。从您的移除downvote。我想你想要'T(i)= ...' –

1

在内部循环中,T是函数T_ILS的输出,每次使用相同的参数。

for i = 1:length(t) 
    T = T_ILS(x,y,ro,Cm,t); 
    Tall(Cm,:) = [T]; 
end 

我不知道这个函数计算什么,但你可能要做到这一点,而不是

for i = 1:length(t) 
    T = T_ILS(x,y,ro,Cm,t(i)); 
    Tall(Cm,:) = [T]; 
end 

占载体t的每个值,甚至更好:

for t = 3600:50:172800 
    T = T_ILS(x,y,ro,Cm,t); 
    Tall(Cm,:) = [T]; 
end 

编辑:此外,为了使这个答案完成,我想合并@ MadPhysicist的答案与我的。结果将会是

Cm = 1E6:1E6:4E6; x = 0.1;y = 0; ro = 0.1; 

T = zeros(1,length(t)); 


for i = 1:length(Cm) 
    for t = 3600:50:172800; 
     T = T_ILS(x,y,ro,Cm(i),t); 
     Tall(i,:) = [T]; 
    end 
end 
+0

反馈意见downvote? – nikaltipar

+0

不相同的参数。 Cm更改。分配索引被搞乱了。 –