【发布时间】:2015-01-21 08:48:03
【问题描述】:
所以我试图将使用 poissrnd 生成的一个矩阵元素传播到另一个矩阵元素,并使用一些更大(更宽?)的概率函数(例如 100 个不同权重的不同可能性)来绘制它们,看看是否价差下降后的波动。在看到它不能正常工作(波动变大)之后,我试图在一个非常简单的例子中找出我做错了什么。经过很长时间的测试,我仍然无法理解问题所在。示例如下:
- 我生成带有 poissrnd 的向量和用于传播的向量(在开始时用零填充)
- 泊斯向量中的每个元素告诉我从以下可能的选项中生成多少个数字(元素值的 0.1):[1,2,3] 和相应的权重 [0.2,0.5,0.2]
- 我将我得到的另一个向量分散在 3 个元素上:对应的(第 k 个),一个在对应的之前,一个在对应的之后(例如,如果 k=3,则元素应该分散像这样:大多数应该进入另一个向量的第三个元素,其余的应该进入第二个和第一个元素)
- 绘制 0.1*poiss 向量和扩展后的向量,以比较波动是否下降
我生成加权数字的方式来自这个帖子:Weighted random numbers in 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')
波动还是比较大的,我也分不清是哪里出了问题……这种情况下生成加权数的方法有问题吗?因为看起来不是这样。我从第一个向量中累积数据的方式似乎也很好。有没有其他方法可以做到(这样我就可以优化它以使用“更大”的概率函数)?
对不起我糟糕的英语。
[编辑]:
这是一个简单的图片来说明我的意思(我希望它可以理解)
【问题讨论】:
-
我不明白你所说的“传播”向量是什么意思。你能举一个这个操作的简单例子吗?
-
例如如果 mn(1,4)=100 那么 dataw(1,3)=dataw(1,3)+0.25*mn(1,4), dataw(1,4) =dataw(1,4)+0.5*mn(1,4) 和 dataw(1,5)=dataw(1,5)+0.25*mn(1,4)。然后它需要 mn(1,5) 并将其“传播”在 dataw(1,4)、dataw(1,5) 和 dataw(1,6) 上。然后需要 mn(1,6) 等等。
-
添加了一张简单的图片,希望能帮助描述我正在尝试做的事情
-
所以“扩展”操作就是我所说的卷积。查看
conv函数。我认为[~,R] = histc(rand(1,eta*mn(1,k)),cumsum([0;w(:)./sum(w)]));这行也有一些奇怪之处。通常rand使用定义输出矩阵大小的整数参数调用,但在这里您使用 eta*mn(1,k) 调用它,它看起来像与您的泊松分布相关的随机实数。我们可以把这两个问题分开吗? -
我无法使用 conv 功能。这是关于以这种方式模拟某个过程(不是将其传播到 3 个元素上,这只是为了确定脚本中的问题)。关于您最初提到的怪异,它看起来像这样: mnr=rand(1,mn(1,k)); eta_fot=长度(查找(mnr
标签: matlab random weighted spread