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

为什么for循环只读取矩阵的最后一个元素-Matlab,matlab,for-loop,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(P

嗨,我有以下代码

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_输出
WT_输出
是365 x 24矩阵,其中有三组不同的矩阵,我正试图单独检查。
Demand
是365 x 24矩阵

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

有人帮忙吗

当你这样做的时候

    A = [-PV_output(j,i,K) -WT_output(j,i,M)];
在每次迭代中,您都将一个数组指定为1 x 2数组。
-PV_输出(j,i,K)
-WT_输出(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中的特定(适当)元素,而不是像现在这样每次都覆盖它,您应该在每次迭代中计算出适当的索引,从而得到您想要的结果。类似地,如果一个数组是三维数组,那么你需要类似的东西,但是有3个索引

我不能给你们一个代码内的解决方案,因为你们这里有4个循环,我不清楚你们到底在存储什么数据。也许其他人可以给你一个精确的逐行解决方案,但如果不是,我希望这能为你提供足够的帮助,让你知道需要做些什么来解决这个问题

 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
结束 结束


没错,但也许你应该给出一个解决方案,而不是仅仅指出问题所在+1修改后。PV_输出(j,i,K)是一个2x24矩阵,具有3个维度(我正在查看3家光伏制造商)和每小时功率输出性能。WT_输出是一个2x24矩阵,具有3个维度,因为我正在查看3家制造商的风力涡轮机每小时功率。“需求”是一个2x24矩阵,表示光伏和WT供应在同一时间段内的各自需求。这就是为什么我尝试使用4个循环,这将给我一个关于3个光伏和WT制造商的需求的总供应(PV+WT)的元素对元素的比较。可能有一种更有效的方法可以做到这一点,我希望得到任何建议。希望这对我有所帮助,因为我确实需要更多关于你回答的问题的编码方面的帮助-我现在确实了解问题是什么,但我不清楚或者索引编码方面-请让我知道,如果你需要关于上述代码的更多信息来进一步帮助,你建议下面这样做吗?你的问题是PV_输出和WT_输出吗是365 x 24矩阵,但它们必须是三维的,因为您参考PV_输出(:,:,K)。
            x(:,:,:) = linprog(f,A,b,[],[],lb,ub)