Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import matplotlib
- import matplotlib.pyplot as plt
- import numpy as np
- from math import sqrt, inf
- matplotlib.use('webagg')
- matplotlib.use('qtagg')
- def get_pi(n=2, should_plot=False):
- # x2 + y2 = 1
- xs = []
- ys = []
- qx = []
- qy = []
- ql = 0
- for x in range(0, 1001):
- x /= 1000
- y = np.power((1 - x**n), 1/n)
- if qx:
- ql += np.power((abs(x - qx[-1]))**n + (abs(y - qy[-1]))**n, 1/n)
- qx.append(x)
- qy.append(y)
- xs.extend(qx)
- ys.extend(qy)
- xs.extend(list(reversed(qx))[1:])
- ys.extend([y*-1 for y in reversed(qy)][1:])
- xs.extend([x*-1 for x in (qx)][1:])
- ys.extend([y*-1 for y in (qy)][1:])
- xs.extend([x*-1 for x in reversed(qx)][1:])
- ys.extend(list(reversed(qy))[1:])
- dia = ql*4
- pi = dia / 2
- if should_plot:
- plt.plot(xs, ys)
- plt.axis("equal")
- plt.show()
- return pi
- print(1, get_pi(1, should_plot=True))
- print(2, get_pi(2, should_plot=True))
- print(3, get_pi(3, should_plot=True))
- print(4, get_pi(4, should_plot=True))
- print(5, get_pi(5, should_plot=True))
- print(10, get_pi(10))
- print(100, get_pi(100))
- get_pi(99999999999999999999999999999999999999999999999, should_plot=True)
- xs = []
- ys = []
- minpi = inf
- minn = None
- for n in range(1000, 10000):
- if n == 0:
- continue
- n /= 1000
- pi = get_pi(n)
- xs.append(n)
- ys.append(pi)
- if pi < minpi:
- minpi = pi
- minn = n
- plt.plot(xs, ys)
- plt.plot(minn, minpi, 'bs')
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment