0

嗨,我有以下代码

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

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

有什么帮助吗?!

4

2 回答 2

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 个循环,我不清楚你到底存储了什么数据。也许其他人可以为您提供准确的线路解决方案,但如果不是,我希望这可以为您提供足够的帮助,让您了解需要做些什么来解决问题。

于 2012-06-17T19:28:36.000 回答
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)
于 2012-06-17T20:10:24.940 回答