У меня есть два распределения вероятностей: бета-распределение и логнормальное распределение.Я хочу нарисовать случайное значение из моего бета-распределения и исходя из того, где это значение находится в диапазоне стандартного отклонения, тогда я также хочу извлечь случайное значение из моего логнормального распределения, которое также находится в пределах этого стандартного отклоненияспектр.
Например: я беру 0,2 из моего бета-распределения, которое выше одного стандартного отклонения, но ниже двух стандартных отклонений больше среднего.Затем я хочу сгенерировать случайное значение из моего логнормального распределения, которое ограничено диапазоном моего первого стандартного отклонения и второго стандартного отклонения (скажем, значение между 100 и 1000).
Диапазоны стандартного отклоненияследующим образом: в пределах одного стандартного отклонения более одного стандартного отклонения, но менее двух стандартных отклонений выше среднего, более двух стандартных отклонений выше среднего, менее одного стандартного отклонения, но более двух стандартных отклонений ниже среднего и менеедва стандартных отклонения ниже среднего.
То, что я пытался с моим кодом в MATLAB:
1) Для каждой итерации генерируйте случайное значение бета-распределения и случайное логнормальное значение распределения.2) Если бета-значение находится в указанном диапазоне стандартного отклонения, а логнормальное значение также находится в указанном диапазоне стандартного отклонения, завершите цикл и напечатайте значения в массиве
Проблема, с которой я сталкиваюсь, заключается вчто случайное бета-значение генерируется совершенно нормально, но для каждого логнормального значения мне остается значение, по которому итерация кода прошла.
массив выглядит так:
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.