def rootsAnnSec(m, rMin, rMax, aMin, aMax): f0 = lambda k: ivp(m, η * k) * hankel1(m, k) / η + iv(m, η * k) * h1vp( m, k) f1 = (lambda k: ivp(m, η * k, 2) * hankel1(m, k) + c * ivp(m, η * k) * h1vp(m, k) + iv(m, η * k) * h1vp(m, k, 2)) A = AnnulusSector(center=0.0, radii=(rMin, rMax), phiRange=(aMin, aMax)) z = A.roots(f0, df=f1) return z.roots
def test_PolarRect_contains(): r0 = 8.938 r1 = 9.625 phi0 = 6.126 phi1 = 6.519 z = (9 - 1.04825594683e-18j) C = AnnulusSector(0, [r0, r1], [phi0, phi1]) # import matplotlib.pyplot as plt # plt.scatter((9),(0)) # C.show() assert C.contains(z)
def setUp(self): self.roots = roots = [0, -1.234, 1 + 1j, 1 - 1j, 2.345] self.multiplicities = [1, 1, 1, 1, 1] self.f = lambda z: (z - roots[0]) * (z - roots[1]) * (z - roots[2]) * ( z - roots[3]) * (z - roots[4]) self.df = lambda z: (z - roots[1]) * (z - roots[2]) * (z - roots[ 3]) * (z - roots[4]) + (z - roots[0]) * (z - roots[2]) * ( z - roots[3]) * (z - roots[4]) + (z - roots[0]) * (z - roots[ 1]) * (z - roots[3]) * (z - roots[4]) + (z - roots[0]) * ( z - roots[1]) * (z - roots[2]) * (z - roots[4]) + ( z - roots[0]) * (z - roots[1]) * (z - roots[2]) * ( z - roots[3]) self.Circle = Circle(0, 3) self.Rectangle = Rectangle([-2, 2], [-2, 2]) self.halfAnnulus = AnnulusSector(0, [0.5, 3], [-pi / 2, pi / 2]) self.Annulus = Annulus(0, [1, 2])
def boundStateRegion(vRange, maxFreq=1): from cxroots import AnnulusSector # get the region in which to look for bound state eigenvalues radiusBuffer = 0.05 # With lambda=mu in Eq.9 of "Breaking integrability at the boundary" # As in Eq. II.2 in "Spectral theory for the periodic sine-Gordon equation: A concrete viewpoint" with lambda=Sqrt[E] mu = lambda v: 0.25j * sqrt((1 - v) / (1 + v)) acosFeq = arccos(maxFreq) phiRange = [acosFeq, pi - acosFeq] radiusRange = np.sort(np.abs(mu(np.array(vRange)))) radiusRange = [ radiusRange[0] - radiusBuffer, radiusRange[1] + radiusBuffer ] center = 0 return AnnulusSector(center, radiusRange, phiRange)
from numpy import pi from cxroots import AnnulusSector annulusSector = AnnulusSector(center=0.2, radii=(0.5, 1.25), phiRange=(-pi/4, pi/4)) annulusSector.show()
class TestRootfindingContours(unittest.TestCase): def setUp(self): self.roots = roots = [0, -1.234, 1 + 1j, 1 - 1j, 2.345] self.multiplicities = [1, 1, 1, 1, 1] self.f = lambda z: (z - roots[0]) * (z - roots[1]) * (z - roots[2]) * ( z - roots[3]) * (z - roots[4]) self.df = lambda z: (z - roots[1]) * (z - roots[2]) * (z - roots[ 3]) * (z - roots[4]) + (z - roots[0]) * (z - roots[2]) * ( z - roots[3]) * (z - roots[4]) + (z - roots[0]) * (z - roots[ 1]) * (z - roots[3]) * (z - roots[4]) + (z - roots[0]) * ( z - roots[1]) * (z - roots[2]) * (z - roots[4]) + ( z - roots[0]) * (z - roots[1]) * (z - roots[2]) * ( z - roots[3]) self.Circle = Circle(0, 3) self.Rectangle = Rectangle([-2, 2], [-2, 2]) self.halfAnnulus = AnnulusSector(0, [0.5, 3], [-pi / 2, pi / 2]) self.Annulus = Annulus(0, [1, 2]) def test_rootfinding_circle_fdf(self): roots_approx_equal(self.Circle.roots(self.f, self.df, verbose=True), (self.roots, self.multiplicities), decimal=7) def test_rootfinding_circle_f(self): roots_approx_equal(self.Circle.roots(self.f, self.df, verbose=True), (self.roots, self.multiplicities), decimal=7) def test_rootfinding_rectangle_fdf(self): roots_approx_equal(self.Rectangle.roots(self.f, self.df, verbose=True), (self.roots[:-1], self.multiplicities[:-1]), decimal=7) def test_rootfinding_rectangle_f(self): roots_approx_equal(self.Rectangle.roots(self.f, self.df, verbose=True), (self.roots[:-1], self.multiplicities[:-1]), decimal=7) def test_rootfinding_halfAnnulus_fdf(self): roots_approx_equal(self.halfAnnulus.roots(self.f, self.df, verbose=True), (self.roots[2:], self.multiplicities[2:]), decimal=7) def test_rootfinding_halfAnnulus_f(self): roots_approx_equal(self.halfAnnulus.roots(self.f, self.df, verbose=True), (self.roots[2:], self.multiplicities[2:]), decimal=7) def test_rootfinding_Annulus_fdf(self): roots_approx_equal(self.Annulus.roots(self.f, self.df, verbose=True), (self.roots[1:-1], self.multiplicities[1:-1]), decimal=7) def test_rootfinding_Annulus_f(self): roots_approx_equal(self.Annulus.roots(self.f, self.df, verbose=True), (self.roots[1:-1], self.multiplicities[1:-1]), decimal=7)
from numpy import pi from cxroots import Circle, Annulus, AnnulusSector, Rectangle # make the contours for the tutorial Circle(0, 2).show('circle.png') Rectangle([-2,2],[-1,1]).show('rectangle.png') Annulus(0, [1,2]).show('annulus.png') AnnulusSector(0, [1,2], [0,pi]).show('annulussefig.png')