您好我有以下代码
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
时,它似乎只是读取上述矩阵的最后一个元素,当我检查A
和b
的大小时,我得到1x2和1x1而我应该得到365x24x3和365x24
任何帮助?!
答案 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)