0

そのため、poissrnd で生成された 1 つの行列要素を、より大きな (より広い?) 確率関数 (たとえば、異なる重みを持つ 100 の異なる可能性) を使用して別の行列要素に広げて、それらの両方をプロットし、拡散後の変動を確認しようとしていました。降りた。正しく動作しない (変動が大きくなる) ことを確認した後、非常に単純な例で何が間違っていたのかを特定しようとしました。本当に長い間テストした後でも、何が悪いのか理解できません。例は次のようになります。

  1. poissrnd でベクトルを生成し、拡散用のベクトルを生成します (最初はゼロで埋められます)。
  2. poiss ベクトルの各要素は、対応する重み [0.2,0.5,0.2] を持つ可能なオプション [1,2,3] から生成する数 (要素値の 0.1) を教えてくれます。
  3. 取得したものを 3 つの要素で別のベクトルに展開しました。対応する要素 (k 番目のもの)、対応する要素の前に 1 つ、対応する要素の後に 1 つです (たとえば、k=3 の場合、要素は次のように展開する必要があります。ほとんどは別のベクトルの 3 番目の要素に移動し、残りは 2 番目と 1 番目の要素に移動する必要があります)
  4. 0.1*poiss ベクトルと拡散後のベクトルの両方をプロットして、変動が減少したかどうかを比較します

加重された数値を生成する方法は、このスレッドからのものです: MATLAB での加重乱数

これは私が使用しているコードです:

clear all
clc

eta=0.1;
N=200;
fot=10000000;
ix=linspace(-100,100,N);
mn =poissrnd(fot/N, 1, N);
dataw=zeros(1,N);
a=1:3;
w=[.25,.5,.25];

for k=1:N

   [~,R] = histc(rand(1,eta*mn(1,k)),cumsum([0;w(:)./sum(w)]));
   R = a(R);
   przydz=histc(R,a);
   if (k>1) && (k<N)
           dataw(1,k)=dataw(1,k)+przydz(1,2);
           dataw(1,k-1)=dataw(1,k-1)+przydz(1,1);
           dataw(1,k+1)=dataw(1,k+1)+przydz(1,3);
   elseif k==1
           dataw(1,k)=dataw(1,k)+przydz(1,2);
           dataw(1,N)=dataw(1,N)+przydz(1,1);
           dataw(1,k+1)=dataw(1,k+1)+przydz(1,3);
   else
           dataw(1,k)=dataw(1,k)+przydz(1,2);
           dataw(1,k-1)=dataw(1,k-1)+przydz(1,1);
           dataw(1,1)=dataw(1,1)+przydz(1,3);

   end


end


plot(ix,eta*mn,'g',ix,dataw,'r')

まだまだ変動が大きくて、何が悪いのかわからない・・・ この場合、加重値の出し方がおかしいのでしょうか?そうじゃないみたいだから。最初のベクトルからデータを蓄積する方法も問題ないようです。私がそれを行うことができる別の方法はありますか(そのため、「より大きな」確率関数を使用するように最適化できます)?

私のひどい英語でごめんなさい。

[編集]:

ここに私が何を意味したかを示す簡単な写真があります(理解できることを願っています)

4

1 に答える 1

0

負の二項分布を試してみてはどうでしょうか。これは、ポアソン分布の超分散類似物としてよく使用されます。追加のリンクは、この論文と補足のいくつかの装置に記載されています。

于 2015-01-21T21:47:48.643 に答える