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_outputWT_outputは、私が個別に調べようとしている3つの異なる行列のセットを持つ365x24の行列です。..Demandは365x24の行列です。

実行linprogすると、上記のマトリックスの最後の要素のみを読み取っているように見えます。また、サイズを確認するAb、1x2と1x1が得られますが、365x24x3と365x24が得られるはずです。

何か助けがありますか?!

4

2 に答える 2

1

あなたがこれをするとき

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

反復ごとにAを1x2配列に割り当てます。によって返される変数 はスカラーであるため、Aのサイズが1x2以外のものであると期待しないでください-PV_output(j,i,K)-WT_output(j,i,M)

同様に

    b = -Demand(j,i);

Demand単純に行列のスカラー要素を返すため、bサイズは1x1です。

これらの値をはるかに大きなマトリックスの要素として使用したいように思われるので、マトリックス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 に答える