Estratto del documento

Codice C++

#include <iostream>

#include <cstdlib>

#include <ctime>

#include <math.h>

#include <iomanip>

using namespace std;

inline int rnddir() {return (rand() % 2==0? -1: +1);}

int main(){

const int N_PARTICELLE = 100;

const int N_PASSI = 100;

int pos[N_PARTICELLE];

int i, j;

long int tot;

double media, media_q;

// azzerare le posizioni

for (i=0;i<N_PARTICELLE;i++) pos[i]=0;

// inizializzare il generatore di numeri casuali

srand(time(0));

// inizio della simulazione

for (j=0; j<N_PASSI; j++){

// un passo casuale per ogni particella

for (i=0;i<N_PARTICELLE;i++) pos[i]+=rnddir();

// calcolo della posizione media

tot=0;

for (i=0;i<N_PARTICELLE;i++) tot+=pos[i];

/* Nota: le righe finora contenute nel for(j) si possono anche

abbreviare con:

tot=0;

for (i=0;i<N_PARTICELLE;i++) tot+=(pos[i]+=rnddir());

sfruttando il fatto che anche le assegnazioni hanno un valore

di ritorno. Questo metodo dimezza i cicli da compiere e puo'

risultare in un programma di esecuzione piu' veloce...

*/ media = tot/(N_PARTICELLE*1.0);

// calcolo della media quadratica della posizione

tot=0;

for (i=0;i<N_PARTICELLE;i++) tot+=(pos[i])*(pos[i]);

media_q = tot/(N_PARTICELLE*1.0);

//output dei risultati

cout << "\t" << j << "\t" << std::setw(10) << media << std::setw(10)

<< sqrt(media_q) << endl;

}

}

Anteprima
Vedrai una selezione di 1 pagina su 1
Programma c++ - Moto browniano Pag. 1
1 su 1
Sintesi

Programma C++ (moto browniano)

In un fluido ha luogo il cosiddetto "moto browniano", consistente in piccoli spostamenti casuali delle molecole istante per istante.

Per studiare questo fenomeno (e altri analogamente stocastici) si introduce il concetto di "random walk", che ne è un buon modello:

All'istante t_0, la particella si trova in x_0 = 0.

All'istante t_1 essa compie uno spostamento in una direzione arbitraria - e completamente scorrelata da ciò che succede negli altri istanti - di una quantità fissa, ad esempio 1 (è solo una scelta di unità di misura).

Così via, ad ogni istante la posizione della particella varierà di +/- 1.

Se invece di una particella si fanno evolvere - indipendentemente - N particelle, ad ogni istante si dispone di un campione statistico (più ampio è, più accurata è la simulazione) di cui calcola:

  • Distanza media dall'origine.
  • Distanza quadratica media dall'origine.

Il primo valore, ci si aspetta, oscillerà indefinitamente attorno a zero, per la simmetria del problema; il secondo invece crescerà man mano che gli spostamenti casuali disperdono tra loro le particelle allontanandole dall'origine (in media).

La trattazione matematica del modello dice che la distanza quadratica media cresce proporzionalmente alla radice quadrata del numero di passi compiuti (e che il fattore di proporzionalità vale 1 se lo spostamento per passo è unitario).

Il programma realizza una tabella tipo:

N. passo&nbsp;&nbsp;&nbsp;&nbsp;&lt;x&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqrt(&lt;x^2&gt;)
==============================================
&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1
&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.48324
&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.7088
&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.89737
&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.23607
&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.40832
&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.48998
&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.8775
&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.06594
&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.26803
&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.49285
&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.58887

D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi