我有两个概率分布,一个 beta 分布和一个对数正态分布。我想要做的是从我的 beta 分布中绘制一个随机值,并根据该值在标准偏差范围内的位置,然后我还想从我的对数正态分布中绘制一个随机值,该值也在该标准偏差范围内范围。
例如:我从我的 beta 分布中得出 0.2,它高于一个标准差,但低于比平均值大两个标准差。然后我想从我的对数正态分布中生成一个随机值,该值被限制在我的第一个标准偏差和第二个标准偏差的范围之间(比如说,一个介于 100 和 1000 之间的值)。
标准差范围如下:在1个标准差以内,大于1个标准差但比平均值高出2个标准差,大于平均值2个标准差,小于1个标准差但比平均值低2个标准差均值,并且低于均值的两个标准差。
我在 MATLAB 中尝试使用我的代码:
1) 对于每次迭代,生成一个随机的 beta 分布值和一个随机的对数正态分布值。2) 如果 beta 值在指定的标准差范围内,并且对数正态值也在指定的标准差范围内,则结束循环并打印数组中的值
我遇到的问题是随机 beta 值生成得非常好,但是对于每个对数正态值,我只剩下代码经历了哪个迭代的值。
数组看起来像:
0.1 1
0.12 2
0.05 3
0.07 4
.......
这是我的代码:
close all;
clc;
d= xlsread('Poro perm data for Clarke Lake.xlsx');
pdPor = d(:,2);
pdPerm = d(:,8);
porosity_permeability = []; % openspace for array
temp=[];
Perm = [1:300,1];
for i=1:300
porRandom = betarnd(3.1800,44.87,[1 1]);
mu=1.0130;
sigma = 2.574;
permRandom =lognrnd(mu,sigma);
if porRandom <=(mean(pdPor) + std(pdPor)) && porRandom >= (mean(pdPor) - std(pdPor))
if permRandom <=(mean(pdPerm) + std(pdPerm)) && permRandom >= (mean(pdPer) - std(pdPer))
Perm(i) = permRandom;
end
elseif porRandom < (mean(pdPor) - (std(pdPor))) && porRandom > (mean(pdPor) - ((std(pdPor))*2))
if permRandom < (mean(pdPerm) - (std(pdPerm))) && permRandom > (mean(pdPerm) - ((std(pdPerm))*2))
Perm(i) = permRandom;
end
elseif porRandom < (mean(pdPor) - (((std(pdPor))*2)))
if permRandom < (mean(pdPerm) - (((std(pdPerm))*2)))
Perm(i) = PermRandom;
end
elseif porRandom > (mean(pdPor) + (std(pdPor))) && porRandom < (mean(pdPor) + ((std(pdPor))*2))
if permRandom > (mean(pdPerm) + (std(pdPerm))) && permRandom < (mean(pdPerm) + ((std(pdPerm))*2))
Perm(i) = permRandom;
end
else porRandom > ((mean(pdPor)) + (((std(pdPor))*2)))
if permRandom > ((mean(pdPerm)) + (((std(pdPerm))*2)))
Perm(i) = permRandom;
end
end
temp=[porRandom, Perm(i)]; % temporary space
porosity_permeability=[porosity_permeability;temp];
end
感谢您调查我的问题!如果我的解释和术语乏善可陈,我深表歉意。我只是在学习编码和 MATLAB。