【问题标题】:Spreading one matrix elements to another with weighted random numbers MATLAB使用加权随机数 MATLAB 将一个矩阵元素传播到另一个矩阵元素
【发布时间】:2015-01-21 08:48:03
【问题描述】:

所以我试图将使用 poissrnd 生成的一个矩阵元素传播到另一个矩阵元素,并使用一些更大(更宽?)的概率函数(例如 100 个不同权重的不同可能性)来绘制它们,看看是否价差下降后的波动。在看到它不能正常工作(波动变大)之后,我试图在一个非常简单的例子中找出我做错了什么。经过很长时间的测试,我仍然无法理解问题所在。示例如下:

  1. 我生成带有 poissrnd 的向量和用于传播的向量(在开始时用零填充)
  2. 泊斯向量中的每个元素告诉我从以下可能的选项中生成多少个数字(元素值的 0.1):[1,2,3] 和相应的权重 [0.2,0.5,0.2]
  3. 我将我得到的另一个向量分散在 3 个元素上:对应的(第 k 个),一个在对应的之前,一个在对应的之后(例如,如果 k=3,则元素应该分散像这样:大多数应该进入另一个向量的第三个元素,其余的应该进入第二个和第一个元素)
  4. 绘制 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


【解决方案1】:

试试negative binomial 分发怎么样?它通常用作泊松分布的超分散类似物。其他链接可以在this paper 中找到,一些设备可以在supplement 中找到。

【讨论】:

  • 最终,我必须将概率向量 w 替换为例如裁剪后的高斯曲线,而不是使用此示例 3 元素“传播”。所以方法不应该改变。所以最后我需要保留我当前使用的方法并更改导致脚本错误的行。但是橡皮鸭调试对我不起作用。一切看起来都很好,但情节不同。不过,感谢您的一些想法。
  • @DimaLituiev - 你需要 15 声望才能投票。 OP 还没有那么多代表,所以你将不得不在没有支持的情况下生活。
猜你喜欢
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多