0

コードに次の変更を加えましたが、「if ステートメント」が呼び出される行で「インデックスがマトリックスの次元を超えています」というエラーが引き続き表示され、2:25 から始まる「h」をループするためです。現在の次元の方程式式で前の次元の要素を使用する方法をまだ理解していません

  number_of_days = 3;
number_of_hours = 24*number_of_days;
number_panels = 1:5;


for idx_number_panels = 1:length(number_panels) % range of PV panel units examined

for number_turbines = 0:1 % range of wind turbine units examined

    for number_batteries = 1:2 % range of battery units examined


        for h=2:25 %# hours
               battery_capacity(:,:,:,1,1) = max_battery_capacity*number_batteries;

            for d = 1:number_of_days %# which day

                n = h + 24*(d-1);



                if   (max_battery_capacity*number_batteries) - (battery_capacity(idx_number_panels, number_turbines+1 ,number_batteries, h-1,d)*number_batteries) >0

                    storage_availability(idx_number_panels, number_turbines+1 ,number_batteries, h,d) =  (max_battery_capacity*number_batteries) - (battery_capacity(idx_number_panels, number_turbines+1 ,number_batteries, h-1,d)) ;

                else


                    storage_availability(idx_number_panels, number_turbines+1 ,number_batteries, h,d) = 0;


                end
4

2 に答える 2

2

これを時間単位で見てみましょう。

for h = 1:24
    battery_capacity(1) = initial_battery_capacity*number_batteries

    if hourly_total_RES(h) > hourly_annual_demand(n), % battery charging
        battery_capacity(h) = battery_capacity(h-1);
    else
        battery_capacity(h) = battery_capacity(h-1);
    end
end

まず、if文の両辺は書いてある通りです。あなたの実際のコードは、以前のデータで何らかの作業を行っていると思います。そうでなければ、それは問題です。

また、曜日と時間のループの順序を入れ替えると、コードが少し考えやすくなるかもしれません。私にとっては、1 日の最初の 1 時間、次に 2 番目の時間を見るよりも、一度に 1 日のすべての時間を調べる方が理にかなっています...

battery_capacity(h-1)索引付けに関しては、ループの最初の反復で索引付けを行うという明確な誤りが 1 つあります。つまり、hが 1 の場合、 を定義battery_capacity(1)してから を見ようとするとbattery_capacity(0)、おそらくエラーがスローされます。

これを修正するには、 if を確認できますがh == 1、よりエレガントな方法は、そのループに入る前にループしh = 2:24て設定することだと思います。battery_capacity(1)このコードが機能するかどうかを確認します。

for d = 1:number_of_days
    battery_capacity(1) = initial_battery_capacity*number_batteries
    for h = 2:24
        if hourly_total_RES(h) > hourly_annual_demand(n), % battery charging
            battery_capacity(h) = battery_capacity(h-1);
        else
            battery_capacity(h) = battery_capacity(h-1);
        end
    end
end
于 2012-07-26T17:42:26.220 に答える
0

私が理解していることから、最後の2つの次元にはそれぞれ時間と日が格納されています。したがって、最初の日の値を hour=1 に設定するには (これは午前 0 時の開始を意味すると仮定します):

battery_capacity(:,:,:,1,1) = 2;    %# 2kWh

2これにより、すべての「パネル」、すべての「タービン」、およびすべての「バッテリー」の値が設定されます。

コードのどこかに既に行列が事前に割り当てられていると思います。


その価値のためbattery_capacityに、コードで最初に言及した場所にタイプミスがあると思います(パラメーターが欠落していhます)

于 2012-07-26T17:29:27.083 に答える