Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Folder full of pertinent coursework

1666 views
Kernel: Python 2 (SageMath)

Julia Sets 3

Sean Paradiso

# Math libraries import numpy as np from math import sqrt # Matplotlib plotting libraries import matplotlib.pyplot as plt %matplotlib inline # Bokeh plotting libraries import bokeh.plotting as blt blt.output_notebook()
WARNING: 1 intermediate output message was discarded.
import math import numpy as np import pandas as pd import matplotlib.pyplot as plt class JuliaSet(object): def __init__(self, c, n = 100): self.c = c self.n = n self._d = 0.001 self._complexplane = pd.array([]) self.set = pd.array([]) def juliamap(self, z): return (z ** 2) + self.c def iterate(self, z): m = 0 while True: z = self.juliamap(z) m += 1 if abs(z) > 2: return m if m >= self.n: return 0 def makeplane(self): plane = [i * self._d for i in range(int(-2 / self._d), int(2 / self._d), 1)] x, y = np.meshgrid(i,i) self._complexplane=[complex(x,y) for x in plane for y in plane] def set_spacing(self, d): self._d = d self.makeplane() def generate(self): self.set = [self.iterate(i) for i in self._complexplane] return self.set
class JuliaSetPlot(JuliaSet): """Extend JuliaSet to add plotting functionality""" def __init__(self, *args, **kwargs): # Invoke constructor for JuliaSet first, unaltered super(JuliaSetPlot, self).__init__(*args, **kwargs) # Add one more attribute: a rendered image array self.img = np.array([]) def get_dim(self): # get what should be an attribute return int(4.0 / self._d) def render(self): if not self.set: self.generate() # Convert inefficient list to efficient numpy array self.img = np.array(self.set) dim = self.get_dim() # Reshape array into a 2d complex plane self.img = np.reshape(self.img, (dim,dim)).T def show(self): if not self.img.size: self.render() # Specify complex plane axes efficiently xy = np.linspace(-2,2,self.get_dim()) # Use matplotlib to plot image as an efficient mesh plt.figure(1, figsize=(12,9)) plt.pcolormesh(xy,xy,self.img, cmap=plt.cm.hot) plt.colorbar() plt.show() def interact(self): from matplotlib.colors import rgb2hex if not self.img.size: self.render() # Mimic matplotlib "hot" color palette colormap = plt.cm.get_cmap("hot") bokehpalette = [rgb2hex(m) for m in colormap(np.arange(colormap.N))] # Use bokeh to plot an interactive image f = blt.figure(x_range=[-2,2], y_range=[-2,2], plot_width=600, plot_height=600) f.image(image=[j.img], x=[-2,2], y=[-2,2], dw=[4], dh=[4], palette=bokehpalette) blt.show(f)
j = JuliaSetPlot(-1.037 + 0.17j) %time j.set_spacing(0.006) %time j.show()
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-4-2a95bb0acec6> in <module>() ----> 1 j = JuliaSetPlot(-1.037 + 0.17j) 2 get_ipython().magic(u'time j.set_spacing(0.006)') 3 get_ipython().magic(u'time j.show()') <ipython-input-3-2c3d5a46376a> in __init__(self, *args, **kwargs) 4 def __init__(self, *args, **kwargs): 5 # Invoke constructor for JuliaSet first, unaltered ----> 6 super(JuliaSetPlot, self).__init__(*args, **kwargs) 7 # Add one more attribute: a rendered image array 8 self.img = np.array([]) <ipython-input-2-c77859263a40> in __init__(self, c, n) 9 self.n = n 10 self._d = 0.001 ---> 11 self._complexplane = pd.array([]) 12 self.set = pd.array([]) 13 AttributeError: 'module' object has no attribute 'array'
j = JuliaSetPlot(-0.624 + 0.435j) %time j.set_spacing(0.006) %time j.interact()
%prun j.generate()
%load_ext line_profiler %lprun -f j.generate j.generate()