Log in to edit a copy.
Download.
Other published documents...
spring
440 days ago by math.cohen
Spring
This was originally written for python by Dima and Barry.
""" modified for making a graph in Sage bic 3/16/11 """ def firstcross(krange): """ Returns first k where graph crosses axis Returns 0 when never crosses axis """ statement = 1 for k in krange: v=0.0 x=5.0 m=50.0 c=20.0 t=100 timestep = 0.01 for n in range(int(t/timestep)): nextx = x+timestep*v nextv = v+timestep*(-k/m*x-c/m*v) xsign = abs(x)/x nextxsign = abs(nextx)/nextx x=nextx v=nextv if xsign != nextxsign: if statement == 1: statement = 0 return k return 0 def doonek(k): """ returns a list of coordinates as a function of time """ v=0.0 times = [] coordinates = [] plot_data = [] x=5.0 m=50.0 c=20.0 t=160.0 timestep = 0.01 currenttime=0 for n in range(int(t/timestep)): nextx = x+timestep*v nextv = v+timestep*(-k/m*x-c/m*v) xsign = abs(x)/x nextxsign = abs(nextx)/nextx times.append(currenttime) currenttime += .005 coordinates.append(x) x=nextx v=nextv springdata = [(times[n], coordinates[n]) for n in range(len(times))] return springdata """ first range: """ def rangegenerator(cross, upper, increment): arange = [] n=0 while n<=upper: arange.append(cross-upper+n) n=n+increment return arange def allranges(genrange, cross, upper, increment): genrange = rangegenerator(cross, upper, increment) cross = firstcross(genrange) return cross arange = [] brange = [] cross = 100 for i in range(2): cross = allranges(arange, cross, 100, 1) cross = allranges(arange, cross, 100, 1) cross = allranges(arange, cross, 1, .01) crange = rangegenerator(cross, .01, .0001) k = firstcross(crange) springData = doonek(k) print "k=",k
k= 2.04470000000000
k= 2.04470000000000
list_plot(springData)