所以我试图将一个由 poissrnd 生成的矩阵元素传播到另一个矩阵元素,使用一些更大(更宽?)的概率函数(例如 100 种不同权重的不同可能性)来绘制它们,看看传播后的波动是否下楼。在看到它不能正常工作(波动变大)之后,我试图在一个非常简单的例子中找出我做错了什么。经过很长时间的测试,我仍然无法理解问题所在。这个例子是这样的:
- 我生成带有 poissrnd 的向量和用于传播的向量(在开始时用零填充)
- poiss 向量中的每个元素告诉我从以下可能的选项中生成多少个数字(元素值的 0.1):[1,2,3] 和相应的权重 [0.2,0.5,0.2]
- 我将我得到的另一个向量传播到 3 个元素上:对应的(第 k 个),一个在对应的之前,一个在对应的之后(例如,如果 k=3,元素应该像这样传播:大多数应该进入另一个向量的第三个元素,其余的应该进入第二个和第一个元素)
- 绘制 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')
波动还是比较大的,我也分不清是哪里出了问题……这种情况下生成加权数的方法有问题吗?因为看起来不是这样。我从第一个向量中累积数据的方式似乎也很好。有没有另一种方法可以做到(所以我可以优化它以使用“更大”的概率函数)?
对不起我糟糕的英语。
[编辑]:
这是一个简单的图片来说明我的意思(我希望它可以理解)