2012-06-17 103 views
0

您好我有以下代码为什么for循环只读矩阵的最后一个元素 - Matlab的

for j = 1:2, 

    for i = 1:24, 

     for K = 1:3, 

      for M = 1:3, 
       PV_output(:,:,K) = real(PV_power_output(:,:,K)); 
       WT_output(:,:,M) = WT_power_output(:,:,M); 
       PVenergy = sum(sum(PV_output(:,:,1))); 
       WTenergy = sum(sum(WT_power_output(:,:,1))); 
       f = [((CRF*CC_PV)/PVenergy)+OM_PV; ((CRF*CC_WT)/WTenergy)+OM_WT]; 
       A = [-PV_output(j,i,K) -WT_output(j,i,M)]; 
       b = -Demand(j,i); 
       lb = zeros(2,1); 
       ub = [max_PV_area/PV_area max_WT_area/WT_area]'; 
      end 
     end 
    end 
end 

PV_outputWT_output是365×24点的矩阵有三套不同的矩阵,我想单独检查.. Demand是365 x 24矩阵。

当我运行linprog它似乎只是看了上面矩阵的最后一个元素,也当我检查的Ab大小我得到一个1×2和1x1的,而我应该得到一个365x24x3和365X24

有什么帮助?

回答

1

当这样做

A = [-PV_output(j,i,K) -WT_output(j,i,M)]; 

您正在分配是在每次迭代1×2阵列。由-PV_output(j,i,K)-WT_output(j,i,M)返回的变量是标量,所以您不应该指望A是其他1 x 2大小的东西。

同样

b = -Demand(j,i); 

只是返回Demand矩阵的标量元素等b具有尺寸为1×1

这样看来,希望使用这些值作为在元件大得多的矩阵,因此您应该将它们分配给矩阵A和B中的适当索引。

沿

b(index1,index2) = -Demand(j,i); 

线,其中索引1和索引2指定在其中您希望它们存储b位置的东西。通过将值存储在矩阵b中的特定(适当)元素处,而不是像当前那样每次覆盖它,您应该通过在每次迭代时计算出适当的索引来获得所需的值。同样,如果A是3维数组,那么你需要类似的东西,但有3个索引。

我不能给你一个代码解决方案,因为你在这里有4个循环,而且我不清楚你正在存储什么数据。也许其他人可以给你一个确切的线路解决方案,但如果没有,我希望这能够为你提供足够的帮助,看看需要做些什么来解决问题。

+0

正确的,但也许你应该给一个解决方案,而不是仅仅指出问题。 +1修正后。 – Junuxx

+0

PV_output(j,i,K)是一个2x24矩阵,有3个维度(我在看3个光伏制造商)和小时功率输出性能。 WT_output是一个2维24矩阵,有3个维度,我正在查看3个制造商的风力涡轮机的小时功率。 “需求”是一个2x24的矩阵,代表了PV和WT供应在相同时间段内的相应需求。这就是我试图使用4个回路的原因,这些回路将给出我对PV供应商和WT供应商的总供应量(PV + WT)的要素比较。 – user643469

+0

可能有更有效的方法来做到这一点,我会对任何建议感兴趣。希望这会有所帮助,因为我确实需要更多的帮助来解决你已经回答的问题的编码 - 我现在明白问题是什么,但不清楚,或者是索引编码方面 - 如果你需要更多关于上述内容的信息,请告诉我代码进一步提供帮助 – user643469

0
for j = 1:2 

for i = 1:24 
    for K = 1:3 
     for M = 1:3 

    PV_output(:,:,:) = real(PV_power_output(:,:,:)); 
     WT_output(:,:,:) = WT_power_output(:,:,:); 

     PVenergy = sum(sum(PV_output(:,:,1))); 
     WTenergy = sum(sum(WT_power_output(:,:,1))); 


      f= [((CRF*CC_PV)/PVenergy)+OM_PV; ((CRF*CC_WT)/WTenergy)+OM_WT]; 

     A(:,:,:) = [-PV_output(:,:,K) -WT_output(:,:,M)]; 


      b(:) = -Demand(j,i); 

      lb = zeros(2,1); 


      ub = [max_PV_area/PV_area max_WT_area/WT_area]'; 

     end 
    end 

末 结束

  x(:,:,:) = linprog(f,A,b,[],[],lb,ub) 
相关问题