From f459b195f4e979247e79fdbffe93ca5fee1f466d Mon Sep 17 00:00:00 2001 From: mhjensen Date: Thu, 17 May 2018 22:24:48 -0400 Subject: [PATCH] Added new codes --- doc/Programs/Finance/agents.py | 7 +- doc/Programs/RandomWalks/OneDimParticle.py | 45 ++++++++ doc/Programs/RandomWalks/randomwalkfitting.py | 101 ++++++++++++++++++ 3 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 doc/Programs/RandomWalks/OneDimParticle.py create mode 100644 doc/Programs/RandomWalks/randomwalkfitting.py diff --git a/doc/Programs/Finance/agents.py b/doc/Programs/Finance/agents.py index fad71e19b..8f5916a1d 100644 --- a/doc/Programs/Finance/agents.py +++ b/doc/Programs/Finance/agents.py @@ -1,3 +1,6 @@ +# Simulation of financial transations with or without saving/taxation on transaction +# If lambda =0.0, no saving/taxation +# See Patriarca et al http://www.sciencedirect.com/science/article/pii/S0378437104004327 #!/usr/bin/env python import numpy as np import matplotlib.mlab as mlab @@ -11,7 +14,7 @@ Agents = 500 MCcounts = 1000 Transactions = 100000 startMoney = 1.0 -Lambda = 0.0 +Lambda = 0.2 FinancialAgents = startMoney*np.ones(Agents) for i in range (1, MCcounts, 1): for j in range (1, Transactions, 1): @@ -30,6 +33,6 @@ n, bins, patches = plt.hist(FinancialAgents, 50, facecolor='green') plt.xlabel('$x$') plt.ylabel('Distribution of wealth') plt.title(r'Money') -plt.axis([0, 10, 0, 500]) +plt.axis([0, 10, 0, 100]) plt.grid(True) plt.show() diff --git a/doc/Programs/RandomWalks/OneDimParticle.py b/doc/Programs/RandomWalks/OneDimParticle.py new file mode 100644 index 000000000..ec77cdb42 --- /dev/null +++ b/doc/Programs/RandomWalks/OneDimParticle.py @@ -0,0 +1,45 @@ +# Program to test the Metropolis algorithm with one particle at given temp in +# one dimension +#!/usr/bin/env python +import numpy as np +import matplotlib.mlab as mlab +import matplotlib.pyplot as plt +import random +from math import sqrt, exp, log +# initialize the rng with a seed +random.seed() +# Hard coding of input parameters +MCcycles = 100000 +Temperature = 2.0 +beta = 1./Temperature +InitialVelocity = -2.0 +CurrentVelocity = InitialVelocity +Energy = 0.5*InitialVelocity*InitialVelocity +VelocityRange = 10*sqrt(Temperature) +VelocityStep = 2*VelocityRange/10. +AverageEnergy = Energy +AverageEnergy2 = Energy*Energy +VelocityValues = np.zeros(MCcycles) +# The Monte Carlo sampling with Metropolis starts here +for i in range (1, MCcycles, 1): + TrialVelocity = CurrentVelocity + (2.0*random.random() - 1.0)*VelocityStep + EnergyChange = 0.5*(TrialVelocity*TrialVelocity -CurrentVelocity*CurrentVelocity); + if random.random() <= exp(-beta*EnergyChange): + CurrentVelocity = TrialVelocity + Energy += EnergyChange + VelocityValues[i] = CurrentVelocity + AverageEnergy += Energy + AverageEnergy2 += Energy*Energy +#Final averages +AverageEnergy = AverageEnergy/MCcycles +AverageEnergy2 = AverageEnergy2/MCcycles +Variance = AverageEnergy2 - AverageEnergy*AverageEnergy +print(AverageEnergy, Variance) +n, bins, patches = plt.hist(VelocityValues, 400, facecolor='green') + +plt.xlabel('$v$') +plt.ylabel('Velocity distribution P(v)') +plt.title(r'Velocity histogram at $k_BT=2$') +plt.axis([-5, 5, 0, 600]) +plt.grid(True) +plt.show() diff --git a/doc/Programs/RandomWalks/randomwalkfitting.py b/doc/Programs/RandomWalks/randomwalkfitting.py new file mode 100644 index 000000000..bd4a62239 --- /dev/null +++ b/doc/Programs/RandomWalks/randomwalkfitting.py @@ -0,0 +1,101 @@ +import numpy as np +import matplotlib.pyplot as plt +from sklearn.preprocessing import PolynomialFeatures +from sklearn.linear_model import LinearRegression + +steps=250 + +distance=0 +x=0 +distance_list=[] +steps_list=[] +while x=steps and new_x