forked from Azadeh-Koohjani/atomic-orbital-viewer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathring.py
More file actions
54 lines (43 loc) · 1.97 KB
/
ring.py
File metadata and controls
54 lines (43 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import numpy as np
import scipy.optimize as opt
import math
def equation(r, costeta):
return np.exp(-5 * r/2) * 125 * r ** 3 * (5* costeta ** 3 - 3 * costeta) + 3
costeta_0 = 0.723076185995
costeta_1 = 0.094390214892
r = 1.2
costeta_values = np.linspace(costeta_0, costeta_1, 20)
costeta_values = costeta_values[:-1]
pairs = []
r_initial_guess = 0.001
for costeta in costeta_values:
try:
r_solution = opt.fsolve(equation, r_initial_guess, args=(costeta,))
if abs(equation(r_solution[0], costeta)) < 0.0001 and r_solution[0] <= r:
pair = (r_solution[0] * math.sqrt(1 - costeta**2), r_solution[0] * costeta)
pairs.append(pair)
#r_initial_guess = r_solution[0]
print(r_solution, str(round(pair[0], 4)), str(round(pair[1], 4)))
else: print("wrong answer " + str(equation(r_solution[0], costeta)), r_solution, str(round(pair[0], 4)), str(round(pair[1], 4)))
except Exception as e:
print("Failed to solve")
print("-------------------------------------------------------------")
costeta_values = np.linspace(costeta_1, costeta_0, 50)
r_initial_guess = 2
for costeta in costeta_values:
try:
r_solution = opt.fsolve(equation, r_initial_guess, args=(costeta,))
if abs(equation(r_solution[0], costeta)) < 0.0001 and r_solution[0] >= r:
pair = (r_solution[0] * math.sqrt(1 - costeta**2), r_solution[0] * costeta)
pairs.append(pair)
print(r_solution, str(round(pair[0], 4)), str(round(pair[1], 4)))
r_initial_guess = r_solution[0]
else: print("wrong answer " + str(equation(r_solution[0], costeta)), r_solution, str(round(pair[0], 4)), str(round(pair[1], 4)))
except Exception as e:
print("Failed to solve")
pairs.append(pairs[0])
str_pairs = ""
for item in pairs:
str_pairs = str_pairs + "[" + str(round(item[0], 4)) + "," + str(round(item[1], 4)) + "],"
str_pairs = str_pairs[:-1]
print(str_pairs)