我正在尝试创建一个模型,其中有一条线 - 表示为填充了1的1D矩阵 - 并且该线上的点是随机生成的。每次选择一个点(A)时,它都会创建一个排除区域' (基于指数函数)使得选择附近的另一点具有低得多的发生概率。
两个主要问题:
(1)生成指数的最佳方法是什么,以便我可以将所选点周围的数字相乘以创建排除区域?我知道exppdf但是我不确定这是否允许我创建一个终止于1的指数,因为我需要排除区域以及最终返回1的概率。
(2)如何修改矩阵值加/减特定索引(包括该索引)?我得到了:
x(1:100) = 1; % Creates a 1D-matrix populated with 1's
p = randi([1 100],1,1);
x(p) =
但我不确定如何使用随机生成的数字来改变矩阵中的值。
非常感谢任何帮助,
安娜
答案 0 :(得分:1)
不要担心exppdf
,选择你想要的宽度(选择点离概率返回到1的距离有多远?)并定义一些简单的函数,使得一个小向量在中间为零和1边缘。所以在这里我只修改一个以p
为中心的长度为11的部分,并对x
的其余部分不执行任何操作:
x(1:100)=1;
p = randi([1 100],1,1);
% following just scaled
somedist = (abs(-5:5).^2)/25;
% note - this will fail if p is at edges of data, but see below
x(p-5:p+5)=x(p-5:p+5).*somedist;
然后,您可以使用允许给予权重的randi
而不是使用datasample
来选择点数。在这种情况下,您的“数据”只是数字1:100。但是,为了使边缘更容易,我建议使用“填充”零填充的“权重”向量进行初始化 - x
的这些部分不会被采样,但不会进行边缘检查。
x = zeros([1 110]);
x(6:105)=1;
somedist = (abs(-5:5).^2)/25;
nsamples = 10;
for n = 1:nsamples
p = datasample(1:110,1,'Weights',x);
% if required store chosen p somewhere
x(p-5:p+5)=x(p-5:p+5).*somedist;
end
对于指数排除区域,您可以执行以下操作:
somedist = exp(abs(-5:5))/exp(5)-exp(0)/exp(5);
它并没有完全回到1但相当接近。在两次单独的运行之后,这是x
的中心区域(忽略填充):