NAVER

질문 몬테 카를로 시뮬레이션 c 언어 소스좀 알려주세여..(내공 30 드림)
곰탕재료푸우 조회수 8,795 작성일2003.12.28
아는 형님이 미국으로 유학중이십니다.
물리학과인데 요번에 논문을 쓰시는데 몬테 카를로 시뮬레이션이라는 프로그램으로 뭘 하실거라는데 그 프로그램의 c언어 소스를 구해달라고 하시네여.
포트란 소스는 가지고 계시는데 c언어 소스가 필요하시다고
그걸 가지고 무슨 연구를 하시는 모양인데 인터넷으로 검색을 해봐도 구할수도 없고 제 전공도 아니고 해서 여기다 도움을 청합니다.
정확한 명칭은 monte carlo simulation 인데 이 프로그램이나 reverse monte carlo simulation 이 프로그램 소스를 구해달라고 하시는데 가지고 계신분이 계시면 좀 도와주세여.내공 30드릴께여.
부탁드립니다.
프로필 사진

답변자님,

정보를 공유해 주세요.

1 개 답변
1번째 답변
프로필 사진
sl****
시민
본인 입력 포함 정보
몬테카를로(Monte Carlo)는 프랑스 남부에 있는 모나코의 도시이름입니다.
이도시에서는 수입을 늘이기 위해 도박을 자유로이 하고 있어 도박으로
유명합니다.

몬테카르로 시뮬레이션이란 반복적인 난수추출로 전체시행횟수(N)와
해당조건을 만족하는 횟수(M)의 비율을 구하는 시행을 말하는데,
이의 기본 원리가 도박의 기본원리와 같다고 해서 붙여진 이름입니다.


간단히 예를 들면, 원주율 파이=3.141592...을 모르는 상태에서
지름 D인 원의 면적을 구하는 경우에 Monte Carlo 시뮬레이션이
사용될 수 있는데 이의 방법은 다음과 같습니다.

1. 길이 D인 정사각형을 만든다
2. 난수x, y를 발생시킨다.
3. 발생된 난수가 원의 내부에 있는지 확인한다.
확인법은 원의공식 x^2 + y^2 <=(D/2)^2 에
대입하면 되지요.
4. 원의 내부에 있으면, N과 M을 1만큼 증가
5. 원의 외부에 있으면, N만 1만큼 증가
6. 위의 1~5를 만번정도 반복하면, M/N의 비율이
얻어집니다.
7. 이때 원의면적/사각형면적 = M/N에서 파이를
구할 수있습니다.

따라서, "Monte Carlo Simulation"에 대해서 소스를
검색하면 찾기 어렵습니다. 즉 몬테카를로 시뮬레이션의
핵심은 난수발생과 발생된 난수를 활용하는 방법에
있습니다.

난수를 다양한 조건에서 발생시키는 방법의 소스코드는
시뮬레이션의 바이블 서적에 C, FORTRAN, PASCAL등
다양한 언어로 이미 공개가 되어 있습니다.

세부적인 내용은 Law Kelton이 저술한
"Simulation Modelling and Analysis"에 나와 있습니다.

한국말로 된 내용을 찾는다면, 아래 내용을 보시면 됩니다.
이준성, 곽상록, 김영진, “몬테카를로 시뮬레이션을 이용한 확률론적 파괴역학 수법의 적용성 검토”, 한국정밀공학회, 제 18권 10호, pp.154-160, 2001년 10월

더 자세한 내용은
"확률론적 파괴역학을 이용한 중수로 압력관의 건전성평가에 관한 연구"라는
2002년 박사학위 논문을 검색하면 됩니다.


참고로 해당 코드를 복사하면


static long zrng[] =
{ 0,
1973272912, 281629770, 20006270,1280689831,2096730329,1933576050,
913566091, 246780520,1363774876, 604901985,1511192140,1259851944,
824064364, 150493284, 242708531, 75253171,1964472944,1202299975,
233217322,1911216000, 726370533, 403498145, 993232223,1103205531,
762430696,1922803170,1385516923, 76271663, 413682397, 726466604,
336157058,1432650381,1120463904, 595778810, 877722890,1046574445,
68911991,2088367019, 748545416, 622401386,2122378830, 640690903,
1774806513,2132545692,2079249579, 78130110, 852776735,1187867272,
1351423507,1645973084,1997049139, 922510944,2045512870, 898585771,
243649545,1004818771, 773686062, 403188473, 372279877,1901633463,
498067494,2087759558, 493157915, 597104727,1530940798,1814496276,
536444882,1663153658, 855503735, 67784357,1432404475, 619691088,
119025595, 880802310, 176192644,1116780070, 277854671,1366580350,
1142483975,2026948561,1053920743, 786262391,1792203830,1494667770,
1923011392,1433700034,1244184613,1147297105, 539712780,1545929719,
190641742,1645390429, 264907697, 620389253,1502074852, 927711160,
364849192,2049576050, 638580085, 547070247
};


double CEngine::simrand(int stream)
{
long lowprd, hi31, zi;
zi = zrng[stream];
lowprd = (zi & 65535) *MULT1;
hi31 = (zi >> 16) *MULT1 + (lowprd >> 16);
zi = ((lowprd & 65535) - MODLUS) + ((hi31 & 32767) <<16) + (hi31 >>15);
if (zi < 0) zi +=MODLUS ;
lowprd = (zi & 65535) * MULT2;
hi31 = (zi >> 16) * MULT2 + (lowprd >> 16);
zi = ((lowprd & 65535) - MODLUS) + ((hi31 & 32767) <<16) + (hi31 >>15);
if (zi < 0) zi +=MODLUS ;
zrng[stream] = zi;
return (zi >> 7 | 1)/16777216.0;
}

입니다. 세부적인 설명은 영어서적에 아주 세세히 나와 있습니다.

즐거운 하루 되시길

2003.12.29.

  • 채택

    질문자가 채택한 답변입니다.

  • 출처

    곽상록의 박사학위 논문"확률론적 파괴역학을 이용한 중수로 압력관의 건전성평가에 관한 연구"

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.