Lognormal عشوائي على أرقام في نطاق معين في Matlab
-
28-09-2019 - |
سؤال
أريد أن وضع lognormal التوزيع مع مجموعة [0.42,1.19] الذين عدة عناصر هي كالتالي D=[1.19,1.00,0.84,0.71,0.59,0.50,0.42]
.يعني يجب أن يكون 0.84
و الانحراف المعياري صغيرة قدر الإمكان.أيضا بالنظر إلى أن 90% من قوات الدفاع المدني (=90 ٪ من الحبوب) تقع بين 0.59 and 1.19
.
عندما أعرف كل عناصر هذا lognormal التوزيع التي تتضمن ظروف معينة لا يمكن أن تجد pdf, وهو ما يتطلب.وإليك خطوات بسيطة حاولت:
D=[1.19,1.00,0.84,0.71,0.59,0.50,0.42];
s=0.30; % std dev of the lognormal distribution
m=0.84; % mean of the lognormal distribution
mu=log(m^2/sqrt(s^2+m^2)); % mean of the associated normal dist.
sigma=sqrt(log((s^2/m^2)+1)); % std dev of the associated normal dist.
[r,c]=size(D);
for i=1:c
D_normal(i)=mu+(sigma.*randn(1));
w(i)=(D_normal(i)-mu)/sigma; % the probability or the wt. percentage
end
sizes=exp(D_normal);
المحلول
إذا كان لديك إحصاءات الأدوات تريد رسم عشوائي القيم من lognormal توزيع يمكنك ببساطة الاتصال LOGNRND.إذا كنت تريد أن تعرف كثافة lognormal توزيع معين يعني سيجما في قيمة محددة ، يمكنك استخدام LOGNPDF.
بما أنك حساب الأوزان ، قد تكون تبحث عن الكثافة.هذه ستكون في المثال الخاص بك:
weights = lognpdf([1.19,1.00,0.84,0.71,0.59,0.50,0.42],0.84,0.3)
weights =
0.095039 0.026385 0.005212 0.00079218 6.9197e-05 5.6697e-06 2.9244e-07
تحرير
إذا كنت تريد أن تعرف ما هي النسبة المئوية من الحبوب يقع في نطاق 0.59 إلى 1.19 استخدام LOGNCDF:
100*diff(logncdf([0.59,1.19],0.84,0.3))
ans =
1.3202
هذا ليس الكثير.إذا كنت مؤامرة توزيع ستلاحظ أن lognormal التوزيع مع القيم الخاصة بك قمم قليلا فوق 2
x = 0:0.01:10;
figure
plot(x,lognpdf(x,0.84,0.3))
نصائح أخرى
يبدو أنك تتطلع إلى توليد أرقام عشوائية lognormal المقطوعة. إذا كان افتراضي صحيحًا ، يمكنك إما استخدام أخذ عينات الرفض أو عكس أخذ أخذ العينات لتوليد العينات اللازمة. التحذير: أخذ عينات الرفض غير فعالة للغاية إذا كانت حدودك بعيدة جدًا عن الوسط.
أخذ عينات الرفض
إذا كان x ~ lognormal (mu ، sigma) i (lb <x <ub)
ثم قم بإنشاء ، x ~ lognormal (mu ، sigma) وقبول السحب إذا lb <x <ub.
عكس أخذ أخذ العينات
إذا كان x ~ lognormal (mu ، sigma) i (lb <x <ub) ثم
CDF (x) = phi ((log (x) - mu)/sigma)/(phi ((log (ub) - mu)/sigma) - phi ((log (lb) - mu)/sigma)))
توليد ، u ~ موحدة (0،1).
SET ، CDF (x) = u و anvert for x.
بعبارات أخرى،
x = exp (mu + sigma * phi_inverse (u * (phi ((log (ub) - mu)/sigma) - phi ((log (lb) - mu)/sigma)))))))))))))))))))))))))))))))