Stability of an Annular Combustion Chamber

In section 4.2 of [DSZ] the problem of stability of an annular combustion chamber was used as a test case for their rootfinding algorthim. The problem consisted of finding all the zeros of the holomorphic function

\[f(z)=z^2+Az+Be^{-Tz}+C\]

with constants

\[A=-0.19435\,,\quad B=1000.41\,,\quad C=522463\,,\quad T=0.005\,.\]

The result there can be replicated in cxroots with:

from numpy import exp
from cxroots import Rectangle

A = -0.19435
B = 1000.41
C = 522463
T = 0.005

f = lambda z: z**2 + A*z + B*exp(-T*z) + C
df = lambda z: 2*z + A - B*T*exp(-T*z)

rectangle = Rectangle([-15000,5000], [-15000,15000])
roots = rectangle.roots(f, df, root_err_tol=1e-6)
roots.show()

(Source code, png, hires.png, pdf)

_images/ex_annular_combustion-1.png

Note that if root_err_tol=1e-6 is omitted then the Newton-Raphson method used to refine the roots is sometimes unable to converge to a point where \(|f(z)|<\text{root_err_tol}\). In this case the contour bounding the root is continually subdivided until it has area less than newton_step_tol at which point the best approximation to the root within the contour will be taken to be ‘good enough’ and a warning message will be printed to inform the user.

References

[DSZ]

“Locating all the Zeros of an Analytic Function in one Complex Variable” M. Dellnitz, O. Schütze, Q. Zheng, J. Compu. and App. Math. (2002), Vol. 138, Issue 2