python+gnuplot의 만델브로 집합 (둘)
만델브로를 만델브로 집합을 생성하는 클래스로 정의하고 만델브로 집합을columns_save(s 함수와 같이 사용하기 위해 PyGnuplot 모듈과 결합하여 gp.colss로 사용) 중 tmp.gnuplot으로 그리기 위해dat로 출력합니다.
지난번부터 시작된 변경점은 주로 Mandelbrot류의 x축, y축의 변경점을 생성하고arange방법에서 linspac방법으로 전환하여 Gnuplot와 같은 샘플수의 변경점으로 삼아sample, isosample 변수로 분할한다.
mandelbrot_set 속성에서 호출하기로 결정했습니다.또 만델브로 집합이 생성되면 재계산을 하지 않고 생성된 집합으로 되돌아와 계산량을 줄인다.
gnuplot 방면의 방법으로 "setpm3dmap"으로 점차적으로 등고선을 출력할 수 있습니다. (시행 오류가 나면 됩니다. 지난번에 왜 못했는지 모르겠습니다.)
묘사된 구역으로서 참조여기는 구역을 설정했다.(단, 링크 대상과 같은 이미지는 나타나지 않습니다.)
mandelbrot.py
#!/usr/bin/env python
import numpy as np
def columns_save(data, filename='tmp.dat'):
'''
saves numbers arrays and text into filename (default = 'tmp.dat)
(assumes equal sizes and 2D data sets)
>>> s(data, filename='tmp.dat') # overwrites/creates tmp.dat
'''
file = open(filename, 'w')
columns = len(data)
rows = len(data[0])
for i in range(columns):
if data[i] == []:
file.write('\n')
continue
for j in range(rows):
file.write(str(data[i][j]))
file.write(' ')
file.write('\n')
if i % 1000 == 0 :
file.flush() # write once after every 1000 entries
file.close() # write the rest
import PyGnuplot as gp
gp.colss = columns_save
class Mandelbrot:
scale = 0.003
sample = 1000
isosample = 1000
cnter=complex(-0.743,0.1145)
def __init__(self):
self._xbase = np.linspace(-self.scale,self.scale,self.sample)
self._ybase = np.linspace(-self.scale,self.scale,self.isosample)
self._cbases = []
self._mset = []
def __gen_cbases(self):
if self._cbases != []: return
for x in self._xbase:
self._cbases.append([])
for y in self._ybase:
self._cbases[-1].append(complex(x,y)+self.cnter)
return
def mandelbrot(self,c):
z = 0j
for n in range(1,200):
z = z**2 + c
if np.abs(z) > 2.0:
print(np.log(n))
return np.log(n)
return 0
def gen_mandelbrot(self):
if self._mset != []: return
self.__gen_cbases()
for cs in self._cbases:
for c in cs:
self._mset.append([c.real, c.imag, self.mandelbrot(c)])
self._mset.append([])
return
def reset(self):
self._cbases = []
self._mset = []
return
@property
def mandelbrot_set(self):
if self._mset == []:
self.gen_mandelbrot()
return self._mset
if __name__ == "__main__":
m = Mandelbrot()
print("calc")
gp.colss(m.mandelbrot_set)
gp.c("""
set term png size 900,900
set output "m2.png"
set size square;
set grid
set pm3d map
# set nosurface
# set contour base
# set view map
""")
gp.c('splot "tmp.dat" using 1:2:3')
생성된 이미지
도전하다
만델브로가 집합한 특징 도형은 나오지 않았다.
Reference
이 문제에 관하여(python+gnuplot의 만델브로 집합 (둘)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/iHdkz/items/bbe8d0dbf202ca0359a8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)