为什么for循环只读取矩阵的最后一个元素--Matlab

时间:2012-06-17 19:16:33

标签: matlab for-loop

您好我有以下代码

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 x 24矩阵,其中包含三组不同的矩阵,我试图单独检查这些矩阵。Demand是一个365 x 24矩阵。

当我运行linprog时,它似乎只是读取上述矩阵的最后一个元素,当我检查Ab的大小时,我得到1x2和1x1而我应该得到365x24x3和365x24

任何帮助?!

2 个答案:

答案 0 :(得分:1)

当你这样做时

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

您在每次迭代时将A指定为1 x 2数组。 -PV_output(j,i,K)-WT_output(j,i,M)返回的变量是标量,因此您不应期望A为其他任何1 x 2的大小。

同样

    b = -Demand(j,i);

只返回Demand矩阵的标量元素,因此b的大小为1 x 1.

看起来您希望将这些值用作更大矩阵中的元素,因此您应将它们分配给矩阵A和b中的相应索引。

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

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

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

答案 1 :(得分: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)