co byste měli umět po dnešní lekci: integrovat pomocí metody Monte Carlo modelovat jednoduché mnočásticové systémy (Brownův pohyb,...) nalézt globální minimum pomocí simulovaného žíhání
Určení čísla metodou Monte Carlo (x,y) a=2 funkce rand() vrací náhodná čísla v intervalu <0,1>; pro náhodná čísla generovaná v intervalu <a,b> použijeme následující vztah:
Výpočet integrálů jedné proměnné metodou Monte Carlo výpočet spočívá ve 2 krocích: určíme maximum a minimum f(x) na intervalu <a,b>, f max a f min generujeme dvojice náhodných čísel (x,y) a určíme počet náhodně generovaných dvojic (x,y) ležících pod křivkou f(x) ku celkovému počtu generovaných čísel
Výpočet integrálů jedné proměnné metodou Monte Carlo Příklad: Spočtěte integrál metodou Monte Carlo. Výsledek porovnejte se skutečnou hodnotou. function y=intmc1d(fce,a,b,n) x=linspace(a,b,100); maxfce=1.1*max(feval(fce,x)); x=a+(b a)*rand(n,1); y=maxfce*rand(n,1); (x,y) pod_fci=(abs(y)<abs(feval(fce,x))).*abs(y)./y; Npod_fci=sum(pod_fci); Sobd=maxfce*(b a); y=sobd*npod_fci/n;
Výpočet integrálů dvou proměnných metodou Monte Carlo výpočet spočívá ve 2 krocích: určíme maximum a minimum f(x,y) na intervalu <a,b> x <c,d>, f max a f min generujeme trojice náhodných čísel (x,y,z) a určíme počet náhodně generovaných trojic (x,y) ležících pod plochou f(x,y) ku celkovému počtu generovaných čísel
Výpočet integrálů dvou proměnných metodou Monte Carlo Příklad: Určete hodnotu integrálu metodou Monte Carlo. Výsledek porovnejte se skutečnou hodnotou. function yn=intmc2d(fce,a,b,c,d,n) xx=linspace(a,b,100); yy=linspace(c,d,100); maxfce=1.1*max(max(feval(fce,xx,yy))); minfce=1.1*min(min(feval(fce,xx,yy))); (x,y,z) z x=a+(b a)*rand(n,1); y=c+(d c)*rand(n,1); z=minfce+(maxfce minfce)*rand(n,1); pod_fci=(abs(z)<abs(feval(fce,x,y))).*abs(z)./z; Npod_fci=sum(pod_fci); y Vhranol=(maxfce minfce)*(b a)*(d c); yn=vhranol*npod_fci/n; x
Modelování Brownova pohybu částic metodou Monte Carlo náhodný pohyb částice/částic lze pomocí Octave/Matlabu modelovat tímto postupem: vygenerujeme náhodné pozice částic (částice) pro každou částici vygenerujeme náhodný směr rychlosti, popř. i velikost pro každou částici vygenerujeme náhodnou střední dráhu kde je střední volná dráha a p náhodné číslo s normálním rozdělením 4) pro každou částici počítáme novou polohu dle vztahu 5) urazí li částice delší vzdálenost než, tak je náhodně vygenerován nový směr (popř. i velikost) rychlosti.
Modelování Brownova pohybu částic metodou Monte Carlo Příklad: Napište skript modelující Brownův pohyb jedné částice. Pohyb částice znázorněte graficky
Modelování interagujících mnohočásticových systémů metodou Monte Carlo vygenerujeme náhodné pozice částic (částice) pro každou částici vygenerujeme náhodný směr rychlosti, popř. i velikost 3) pro každou částici počítáme novou polohu dle vztahu 4) Síla působící na částici se určí např. z potenciálové energie 2 částicového problému (Lennard Jonesovy potenciály) nebo pomocí Coulombických sil v případě nabitých částic
Modelování interagujících mnohočásticových systémů metodou Monte Carlo Příklad: Modelujte 3 částicový problém, silové působení mezi dvěma částicemi popište vhodným potenciálem
Simulované žíhání (Metropolisův algoritmus) metoda je inspirována experimentálními postupy při přípravě rovnovážných slitin, kdy se původní tavenina velmi pomalu ochlazuje tak, aby bylo dosaženo stabilní konfigurace, tj. dosaženo energetického minima princip metody: pro určitou konfiguraci systému danou vhodnými parametry spočtu energii E 0 (sumu čtverců,...) tzv. cost function provedu malé náhodné změny parametrů a znovu určím energii E 1 určím E=E 1 E 0 ; je li E<0, pak nový stav s náhodně změněnými parametry akceptuji je li E>0 akceptuji tento stav s pravděpodobností (tj. vygeneruji náhodné číslo a porovnám je s p( E)) je li menší, akceptuji horší stav, je li větší ponechám původní během iterací pomalu snižuji teplotu, čímž snížím pohyb parametrů
Simulované žíhání (Metropolisův algoritmus) Příklad: Nalezněte globální minimum funkce
Příklad: Nalezněte globální minimum funkce octave:1> [p,sum,total]=simzih('camel',[0 0], 1e 3,1,100) p = 0.091231 0.710854 sum = 1.0316 total = 3200 octave:2> [p,sum,total]=simzih('camel',[0 0], 1e 6,1,100) p = octave:3> [p,sum,total]=simzih('camel',[0 0.5], 1e 6,1,100) p = 0.090067 0.712347 sum = 1.0316 total = 6300 0.089287 0.712365 sum = 1.0316 total = 6300 f( 0.0898,0.7126) = f(0.0898, 0.7126) = 1.0316
Isingův model vygenerujeme náhodně orientaci spinů (+/ 1) v bodech mříže vybereme náhodně jeden mřížový bod a změníme orientaci spinu spočteme změnu energie E a aplikujeme Metropolisův algoritmus ferromg. antiferromg. (při výpočtu energie se omezíme na nejbližší sousedy)
Isingův model ferromagnetické uspořádání
Isingův model antiferromagnetické uspořádání
Isingův model