ГСЧ с нормальным распределением
От:
RAGIC
Дата: 13.05.04 18:41
Оценка:
Товарищи! Срочно нужен исходник (желательно на с++, можно и на паскале) ГСЧ с нормальным распределением.
Re: ГСЧ с нормальным распределением
Здравствуйте, RAGIC, Вы писали:
RAG>Товарищи! Срочно нужен исходник (желательно на с++, можно и на паскале) ГСЧ с нормальным распределением.
Сложи 12 равномерно распределенных на (-0.5, 0.5] величин и получишь N(0, 1).
Re: ГСЧ с нормальным распределением
Здравствуйте, RAGIC, Вы писали:
RAG>Товарищи! Срочно нужен исходник (желательно на с++, можно и на паскале) ГСЧ с нормальным распределением.
Самое простое — много раз сложить числа с равномерным распределением.
... << RSDN@Home 1.1.3 stable >>
Re: ГСЧ с нормальным распределением
От:
MBo
Дата: 14.05.04 09:59
Оценка:
Здравствуйте, RAGIC, Вы писали:
RAG>Товарищи! Срочно нужен исходник (желательно на с++, можно и на паскале) ГСЧ с нормальным распределением.
function RandG(Mean, StdDev: Extended): Extended;
{ Marsaglia-Bray algorithm }
var
U1, S2: Extended;
begin
repeat
U1 := 2*Random — 1;
S2 := Sqr(U1) + Sqr(2*Random-1);
until S2 < 1;
Result := Sqrt(-2*Ln(S2)/S2) * U1 * StdDev + Mean;
end;
// Random здесь — вещественное в [0..1)
Re[2]: ГСЧ с нормальным распределением
От:
AMogil
Дата: 14.05.04 10:50
Оценка:
Здравствуйте, MBo, Вы писали:
Кстати, задающему вопрос — на будущее. Это исходники VCL
MBo>function RandG(Mean, StdDev: Extended): Extended;
MBo>{ Marsaglia-Bray algorithm }
MBo>var
MBo> U1, S2: Extended;
MBo>begin
MBo> repeat
MBo> U1 := 2*Random — 1;
MBo> S2 := Sqr(U1) + Sqr(2*Random-1);
MBo> until S2 < 1;
MBo> Result := Sqrt(-2*Ln(S2)/S2) * U1 * StdDev + Mean;
MBo>end;
MBo>// Random здесь — вещественное в [0..1)
Re[2]: ГСЧ с нормальным распределением
Здравствуйте, MBo, Вы писали:
MBo>function RandG(Mean, StdDev: Extended): Extended;
MBo>{ Marsaglia-Bray algorithm }
MBo>var
MBo> U1, S2: Extended;
MBo>begin
MBo> repeat
MBo> U1 := 2*Random — 1;
MBo> S2 := Sqr(U1) + Sqr(2*Random-1);
MBo> until S2 < 1;
MBo> Result := Sqrt(-2*Ln(S2)/S2) * U1 * StdDev + Mean;
MBo>end;
Чисто ради праздного любопытства: зачем там цикл?
Re[3]: Извините, погорячился. Посыпаю голову пеплом.
Re[3]: ГСЧ с нормальным распределением
От:
RAGIC
Дата: 14.05.04 15:11
Оценка:
"...исходники VCL." — ну, я в Борлондах пока не пишу ничего, но буду знать.
Спасиббо, очень выручили! С меня кружка пива
Re[2]: ГСЧ с нормальным распределением
RAG>>Товарищи! Срочно нужен исходник (желательно на с++, можно и на паскале) ГСЧ с нормальным распределением.
И ещё один:
function Gauss(Mean,Sigma:double): Double;
var
x, y, z: Double;
begin
// Return a number distributed following a gaussian with mean and sigma
y := Rndm();
if y = 0 then y := Rndm();
z := Rndm();
x := z * 6.283185;
Result := Mean + Sigma * Sin(x) * Sqrt(-2 * Ln(y));
end ;
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить