CompSciHW9
From Predictive Chemistry
Revision as of 11:29, 13 April 2016 by David M. Rogers (talk | contribs)
Introduction to Scientific Computing, HW 9. Due Friday, Apr. 15, 2016.
1) Use the van der Pol oscillator class to simulate 60 second (6000 steps) trajectories with 3 initial conditions, x, v = [4, 3], [4, 4], and [4, 5] Here, v = dot x = dx/dt 2) Add a method to calculate the energy of a harmonic oscillator, E(x, v) = (x^2 + v^2)/2 3) Plot E(t) for all 3 simulations on the same axes. Remember to scale t = arange(6000)*dt. 4) Is there a pattern that would let you know when the oscillator is near the steady-state?
Remember, we built the van der Pol integrator on CompSciWeek13. The complete code is below,
<source lang="python">
- !/usr/bin/env python
import sys from numpy import * from numpy.random import standard_normal norm = standard_normal
class State:
def __init__(self, x, v, mu, dt): assert x.shape == v.shape self.mu = mu self.dt = dt self.x = x self.v = v
def step(self, N=1): for i in xrange(N): self.v += (self.mu*(1.0-self.x**2)*self.v - self.x)*self.dt self.x += self.v*self.dt def __str__(self): s = "" for x,v in zip(self.x, self.v): s += " %f %f"%(x, v) return s
def main(argv):
assert len(argv) == 2, "Usage: %s <mu>"%argv[0] mu = float(argv[1]) print mu dt = 0.01 st = State(array([2.0]), array([0.0]), mu, dt) st.step(10) print st
if __name__=="__main__":
main(sys.argv)
</source>