아래 코드에서 볼 수 있듯이 현재 random
a에서 숫자를 생성 Normal Distribution
하고 -3*sigma
있으며 및 3*sigma
간격 내 에서 숫자를 선택하고 있습니다 . 그러나 이제는 -3*sigma
및 3*sigma
간격 외부에서 숫자를 선택할 확률이 더 높은 숫자를 생성하려고 합니다. 예를 들어. 의 숫자 는 선택 될 확률이 [-4*sigma -3*sigma)
있어야 35%
하며 [3*sigma 4*sigma)
. 기본적으로이 함수를 여러 번 호출하고 실제로 정규 분포의 모양을 변경하지 않고 정규 분포의 "꼬리"에서 더 높은 비율의 난수를 선택할 수있는 방법이 있는지 궁금합니다. 나는 이것을하기 위해 고군분투하고있다.
function [new_E11, new_E22] = elasticmodulusrng()
new_E11 = normrnd(136e9,9.067e9,[1 1]);
new_E22 = normrnd(8.9e9,2.373e9,[1 1]);
while new_E11<=-3*9.067e9 && new_E11>=3*9.067e9
new_E11 = normrnd(136e9,9.067e9,[1 1]);
end
while new_E11<=-3*2.373e9 && new_E11>=3*2.373e9
new_E22 = normrnd(8.9e9,2.373e9,[1 1]);
end
감사
Jojo가 지적한 것처럼 질문은 의미가 없습니다. 이것은 더 이상 정규 분포가 아닙니다.
당신이 할 수있는 일은 자신의 확률 밀도 함수 pdf를 만들고 그로부터 그리는 것입니다.
예를 들어
N = pdf('Normal',-5:0.2:5,0,1);
좋은 해상도로 일반 PDF를 제공합니다. 당신은 그것을 바꿀 수 있습니다.
Z = N;
Z(5:15)=3*Z(5:15);
Z(35:45)=3*Z(35:45);
여기에 설명 된대로 직접 방법, 반전 방법 또는 수락-거부 방법을 사용 합니다.
FileExchange에 구현이 있습니다 : http://www.mathworks.com/matlabcentral/fileexchange/27590-simple-rejection-sampling
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다