1. ホーム
  2. matlab

[解決済み] Matlab Error: ポジション1のインデックスが配列の境界を越えています

2022-02-14 10:47:58

質問

MATLABでガンマ分布を作成しようとしているのですが、エラーが出続けます。

ポジション 1 のインデックスが配列の境界を越えています(100 を超えてはなりません)。

私がこれを正しく読んでいると仮定すると、それは単純に= 2500(私がこのプロジェクトで使用している擬似ランダム変数の数)である変数Mに言及しています。

私のロジックの何が間違っているのか、そしておそらく解決策を誰かが説明してくれることを望んでいました。

alpha = 0.5;
w = gamma_rdn(M,alpha);
x1 = (0.0001:0.001:1); % For plot

figure(5)
subplot(2,1,1);hist(w);title('Histogram of Gamma RDN');
subplot(2,1,2);plot(x1,pdf('gam',x1,alpha,1));title('Theoretical Gamma Density with \alpha = 0.5');
axis([0 1 0 100]);

% The gamma_rdn function is implemented as follows:
function[w] = gamma_rdn(M,alpha)
    % Generate random numbers from the gamma distribution with parameter
    % alpha <= 1, beta = 1
    pe = exp(1);
    w = zeros(M,1);
    u = rand(100,1);
    b = (alpha + pe)/pe;
    i = 0;
    j = 0;
    while j < M
        i = i+1;
        y = b*u(i,1);
        if y <= 1
            z = y^(1/alpha);
            i = i+1;
            if u(i,1) <= exp(-z)
                j = j+1;
                w(j,1) = z;
            else
                i = i+1;
            end
        else
            z = -log((b-y)/alpha);
            i = i+1;
            if u(i,1) <= z^(alpha - 1)
                j = j+1;
                w(j,1) = z;
            else
                i = i+1;
            end
        end
    end
    if i > 95
        u = rand(100,1);
        i = 0;
    end
end

解決方法は?

u = rand(100,1) を選択した特別な理由はありますか?

にあるため、問題が来ている。 一方 ループでは、変数 i が100を超える(例えば i =101), y = b*u(i,1) は無効となる。つまり、あなたがアクセスしようとしているのは u(101,1) のサイズが小さくなっているのに対し u は(100,1)である。

特に理由がない場合は、十分な大きさのものを試してみてください。 u = rand(10000,1) .