Ihre Frage ist schrecklich schlecht gestellt. Dies ist mit ziemlicher Sicherheit nicht Ihre Schuld, da Ihr Kursleiter Sie darauf hingewiesen haben sollte, dass eine korrekte Implementierung von Brown'schen Bewegungen viele ziemlich anspruchsvolle Spezifikationen und Analysen der Problemdomäne erfordert, noch bevor Sie mit dem Codieren beginnen.
Die genaue Definition der Brownschen Bewegung wird wahrscheinlich für Sie undurchsichtig sein, es sei denn, Sie haben die relevanten Kurse in Maßtheorie genommen.Es gibt jedoch viele Ressourcen im Netz, die adäquate Beschreibungen von Ito-Prozessen liefern (von denen Brownian-Bewegung ein Beispiel ist).
Wenn Sie daran interessiert sind, einen solchen Prozess zu programmieren, hier ein guter Tipp. Irgendwann wirst du Zufallszahlen generieren müssen. Mit ziemlicher Sicherheit werden Sie daran interessiert sein, Auslosungen aus einer normalen Verteilung zu generieren. Zum Glück gibt es einige gute Möglichkeiten, dies einem C++ - Programmierer zur Verfügung zu stellen. Am liebsten verwende ich die Boost.Random-Bibliothek (oder die relevanten Bibliotheken in C++ 11). Die klügste Strategie ist ein Funktionsobjekt zu verwenden, um die Zufallszahl zu erzeugen, die wahrscheinlich durch eine variate_generator mit:
#include <iostream>
#include <vector>
using namespace std;
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/normal_distribution.hpp>
#include <boost/random/variate_generator.hpp>
int main()
{
// Some typedefs to help keep the code clean
// Always a good idea when using Boost!
typedef boost::mt19937 T_base_prng;
typedef boost::normal_distribution<> T_norm_varg;
typedef boost::variate_generator<T_base_prng&, T_norm_dist> T_norm_varg;
unsigned int base_seed = 42; // Seed for the base pseudo-random number generator
double mean = 0.0; // Mean of the normal distribution
double stdev = 1.0; // Standard deviation of the normal distribution
T_base_prng base_prng(base_seed); // Base PRNG
T_norm_dist norm_dist(mean, stdev); // Normal distribution
T_norm_varg norm_varg(base_prng, norm_dist); // Variate generator
// Generate 1000 draws from a standard normal distribution
vector<double> drawVec(1000);
for (vector<double>::iterator iter = drawVec.begin();
iter != drawVec.end(); ++iter)
{
*iter = norm_varg();
}
// More stuff...
return 0;
}
Sobald Du einen Griff bekommen, was eine Brownsche Bewegung ist, sollte es dann trivial sein, einige Beispiele zu konstruieren, mit die Funktionalität in Boost.Random.
Was genau haben Sie versucht oder haben Sie ein Problem mit? – Chad
Das klingt nach etwas, um deinen TA zu fragen. –
Ist es ausgewachsen [Brownian motion] (http://en.wikipedia.org/wiki/Brownian_motion) oder der weitaus einfachere [random walk] (http://en.wikipedia.org/wiki/Random_walk)? Müssen Sie das Programm in der nächsten Iteration von random walk in Brownian motion migrieren? – sarnold