quantum-dev/ps16-3.py

35 lines
716 B
Python
Raw Normal View History

2024-04-09 12:36:04 -04:00
from typing import Callable
import numpy as np
z0 = 20
def find_root(f: Callable[[float], float], left: float, right: float, tolerance: float = 1e-6,
max_iter: int = 100) -> float | None:
a = f(left)
b = f(right)
x = None
for _ in range(max_iter):
if abs(a - b) < tolerance:
break
x = left - a * (left - right) / (a - b)
y = f(x)
if abs(y) < tolerance:
break
right, b = left, a
left, a = x, y
return x
def cot(x):
return 1 / np.tan(x)
def func(z: float) -> float:
first = np.sqrt((z0 / z) ** 2 - 1)
second = cot(z)
return first - second
print(find_root(func, 6.2, 6.4, max_iter=1000))