Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
| Download

Scientific Computing Midterm

Views: 873
Kernel: Python 2 (SageMath)
import math import numpy as np import pandas as pd import matplotlib.pyplot as plt class Attractor(object): def __init__(self, s = 10.0, p = 28.0, b = 8.0/3.0, start = 0.0, end = 80.0, points = 10000): inarr = np.array([s,p,b]) self.s = s self.p = p self.b = b self.params = inarr self.start = start self.end = end self.points = points self.dt = ((self.end - self.start) / self.points)
def euler(self, arr): objEuler = Attractor() x = objEuler.s*(y - x) y = x * (objEuler.p - z) - y z = x * y - (objEuler.b * z) arr = np.array([x,y,z]) #self.arr = np.array([x,y,z]) #obeuler = Attractor() self.arr = arr for i in xrange(1, 1 + obeuler.points): k1 = obeuler.dt * (self.arr[0]*math.sqrt(self.arr[1])) return k1
def rk2(self, arr2): objrk2 = Attractor() objEulrk2 = euler() self.arr2 = np.array[x2,y2,z2] #t = self.dt for i in range(1, 1 + objrk2.points): k1 = objrk2.dt * (objEulrk2.arr[0]*sqrt(objEulrk2.arr[1])) k2 = objrk2.dt * ((arr2[0] + 0.5*objrk2.dt) * (math.sqrt(arr2[1] + 0.5 * k1))) return k2
def rk4(self, f, arr3): objrk4 = Attractor() objEulrk4 = euler() objrk2rk4 = rk2() self.arr3 = np.array[x3,y3,z3] #t = self.dt for i in range(1, 1 + objrk4.points): k1 = objrk4.dt * (objEulrk4.arr[0]*math.sqrt(array[1])) k2 = objrk4.dt * ((objrk4.arr2[0] + 0.5*objrk4.dt) * (math.sqrt(obrk2rk4.arr2[1] + 0.5 * k1))) k3 = objrk4.dt * ((arrayA[0] + 0.5*objrk4.dt) * (math.sqrt(arrayB[1] + 0.5 * k2))) k4 = objrk4.dt * ((arr3[0] + objrk4.dt) * (math.sqrt(arr3[1] + k3))) return k4
def evolve(self, r0, order = 4): x0 = 0.1 y0 = 0.0 z0 = 0.0 r0 = np.array((x0,y0,z0), dtype=float) self.x0 = x self.y0 = y self.z0 = z for order in xrange(4): if order == 1: euler(r0) self.solution = pd.meshgrid[t,x,y,z] elif order == 2: rk2(r0) self.solution = pd.meshgrid[t,x,y,z] elif order == 4: r4k(r0) self.solution = pd.meshgrid[t,x,y,z] else: break return self.solution
obj = Attractor() obj.s
10.0
obj.p
28.0
obj.b
2.6666666666666665
obj.params
array([ 10. , 28. , 2.66666667])
obj.start
0.0
obj.end
80.0
obj.dt
0.008
obj.points
10000
obj1 = euler(1.0, [1.0,2.0,3.0]) obj1.arr()
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-24-29abbc68c9bc> in <module>() ----> 1 obj1 = euler(1.0, [1.0,2.0,3.0]) 2 obj1.arr() <ipython-input-20-fc544eac36e8> in euler(self, arr) 10 #self.arr = np.array([x,y,z]) 11 #obeuler = Attractor() ---> 12 self.arr = arr 13 for i in xrange(1, 1 + obeuler.points): 14 k1 = obeuler.dt * (self.arr[0]*math.sqrt(self.arr[1])) AttributeError: 'float' object has no attribute 'arr'
obj1 = evolve([1.0,2.0,3.0], 4) obj1.r0