2

「number_panels」と「number_turbines」のforループをゼロ以外の数値から開始しようとしている以下のコードがあります。

より具体的には、500パネル間隔で3000から4000の「number_panels」と1つのタービン間隔で5から8の「number_turbines」を試しています。

number_of_days = 2;

for number_panels = 3000:500:4000 % range of PV panel units examined

for number_turbines = 5:8  % range of wind turbine units examined


    for h=1:24 %# hours

       for d = 1:number_of_days %# which day



            n = h + 24*(d-1);
            % hourly_deficit_1(...,..., h, d)= Demand(n)-(PV_supply(n)... %


            hourly_deficit(number_panels + 1, number_turbines + 1, h,d) = hourly_annual_demand(n) - (hourly_annual_PV(n)*number_panels) - (hourly_annual_WT(n)*number_turbines);% hourly power deficit (RES supply with demand)


            if hourly_deficit(number_panels + 1, number_turbines + 1, h,d)< 0 % zero out negative hourly deficit values (this is power surplus from RES)

                hourly_deficit(number_panels + 1, number_turbines + 1, h,d) = 0;

            end

これを行うと、size(hourly_deficit)= 4001,9,24,2になりますが、3,4,24,2のサイズを期待して達成しようとしています。誰かが私がどこで間違っているのか知っていますか?

4

1 に答える 1

5

変数の値は、number_panels0または1ではなく3000から始まります。したがって、その変数をインデックス値として行列にインデックスを付けると、Matlabは3001番目のインデックスが必要であると判断し、3001番目が設定された3000個のゼロの行列を作成します。あなたが求めるものに。

次のサイクルへのループをたどると、の値はnumber_panels3500になります。これで、コードに基づいて3501でインデックスを作成しています。これは、3002から3500までのすべての場所がゼロで埋められ、3501が指定した値に設定されることを意味します。

同じロジックが適用されnumber_turbines ます。唯一の違いは、のように500ではなく1でインデックスを作成することですnumber_panels

期待しているサイズマトリックスに戻りたい場合は、インデックス値の呼び出し方法を変更する必要があります。これはいくつかの方法で行うことができます。forループ内にカウンターを作成することも、モジュラス計算を使用することもできます。モジュラス計算は、そうでないステップサイズを使用している場合はうまく機能しません1。また、開始インデックスの倍数であるインデックス値を持つポイントに到達した場合も機能しません。

あなたはその分野であなたにとって何が最もうまくいくかを考え出さなければならないでしょう。特に、1ではないステップサイズを使用したいので、number_turbines5から8になる場合は、number_turbines - 5 + 1またはより簡潔なを使用して単純なインデックスを作成できますnumber_turbines-4

わかりやすくするために、コメントで言及されたものの使用法を示すために必要な微調整を加えたコードを次に示します。-4から始める場合は、number_turbinesインデックス値のを変更する必要があることに注意してください5number_panelsまた、ループされた値ではないため、ベクトルにインデックスを付ける必要があることにも注意してください。

お役に立てれば!

number_of_days = 2;
number_panels = 3000:500:4000;

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

    for number_turbines = 5:8  % range of wind turbine units examined


        for h=1:24 %# hours

            for d = 1:number_of_days %# which day



                n = h + 24*(d-1);
                % hourly_deficit_1(...,..., h, d)= Demand(n)-(PV_supply(n)... %


                hourly_deficit(idx_number_panels , number_turbines -4, h,d) = hourly_annual_demand(n) - (hourly_annual_PV(n)*number_panels(idx_number_panels)) - (hourly_annual_WT(n)*number_turbines);% hourly power deficit (RES supply with demand)


                if hourly_deficit(idx_number_panels, number_turbines -4, h,d)< 0 % zero out negative hourly deficit values (this is power surplus from RES)

                    hourly_deficit(idx_number_panels, number_turbines -4, h,d) = 0;

                end
            end
        end
    end
end
于 2012-07-23T15:07:17.780 に答える