修改矩阵值±特定索引值 - MATLAB

时间:2014-09-16 09:14:36

标签: matlab

我正在尝试创建一个模型,其中有一条线 - 表示为填充了1的1D矩阵 - 并且该线上的点是随机生成的。每次选择一个点(A)时,它都会创建一个排除区域' (基于指数函数)使得选择附近的另一点具有低得多的发生概率。

enter image description here

两个主要问题:

(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) = 

但我不确定如何使用随机生成的数字来改变矩阵中的值。

非常感谢任何帮助,

安娜

1 个答案:

答案 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的中心区域(忽略填充):  graph of two runs