de Boor–Golub Algorithm
The de Boor–Golub algorithm (BG) offers a third, numerically elegant route from the parallel Foster ladder to the series Cauer ladder. Unlike long-division, Khatwani, or Sobhy, BG works directly with the poles and weights of the Foster impedance and never manipulates high-order polynomials explicitly. The version given here follows Parthasarathy & Feldman, with the algebra simplified for network identification by deconvolution (NID).
Two equivalent forms of the impedance
S-fraction (Cauer ladder with alternating thermal capacitances \(k_{1},k_{3},\dots\) and resistances \(k_{2},k_{4},\dots\)):
(88)\[Z(s)= \cfrac{1}{ k_{1}s+\cfrac{1}{ k_{2}+\cfrac{1}{ k_{3}s+\dots+\cfrac{1}{k_{2N+1}s}}}}\]See also the J-fraction to S-fraction conversion in J-fraction Route to the Cauer Ladder.
Pole–zero product
(89)\[Z(s)= \frac{1}{k_{1}}\; \frac{\displaystyle\prod_{k=1}^{N}\bigl(1+s/z_{k}\bigr)} {\displaystyle\prod_{k=1}^{N+1}\bigl(1+s/s_{k}\bigr)} \;=\; \frac{1}{k_{1}}\, \frac{A_{N}(s)}{B_{N+1}(s)}\]where the poles lie at \(-s_{1},\dots,-s_{N+1}\) and the zeros at \(-z_{1},\dots,-z_{N}\). For details on the pole-zero representation in the Foster network, see From Spectrum to Foster Network.
Recurrence relation
Comparing (88) and (89) yields a three-term recurrence for \(B_{n}(s)\):
The unknown scalars \(\lambda_{n}\) and \(\mu_{n}\) are determined on the fly by the scalar products that fix \(\lambda_{n}\) and \(\mu_{n}\).
Define the weighted inner products
Then:
For a general pole–zero form the weights \(w_{0k}\) are
With the Foster sum
the poles are \(s_{k}=1/(R_{k}C_{k})\) and the weights are simply \(w_{0k}=1/C_{k}\)— no zeros need to be computed.
Initial value Start the iteration with
Recovering the Cauer coefficients
Once all \(\lambda_{n},\mu_{n}\) are known the ladder elements follow:
Here \(k_{2n}\) are thermal resistances, \(k_{2n+1}\) the thermal capacitances.
Algorithm summary
de Boor-Golub Algorithm for Foster-to-Cauer Conversion
Input: Foster poles \(s_k = 1/(R_k C_k)\) and weights \(w_{0k} = 1/C_k\)
Output: Cauer ladder elements \(\{k_1 \ldots k_{2N+1}\}\)
\(\lambda_0 = \frac{\sum_{k=0}^{N}s_k w_{0k}}{\sum_{k=0}^{N}w_{0k}}\) (weighted mean of poles)
\(B_0(s) = 1\)
\(B_1(s) = s+\lambda_0\)
for \(n = 1 \ldots N\) do
Compute \(\langle B_n,B_n \rangle\) and \(\langle sB_n,B_n \rangle\)
\(\lambda_{n-1} \mu_n = \frac{\langle B_n,B_n \rangle}{\langle B_{n-1},B_{n-1} \rangle}\)
\(\lambda_n + \mu_n = \frac{\langle sB_n,B_n \rangle}{\langle B_n,B_n \rangle}\)
Solve for \(\lambda_n, \mu_n\) from the two equations above
\(B_{n+1}(s) = (s+\lambda_n+\mu_n)B_n(s) - \lambda_{n-1}\mu_n B_{n-1}(s)\)
end for
Compute Cauer elements:
\(k_1 = \frac{1}{\sum_{k=0}^{N}w_{0k}}\)
\(k_2 = \frac{1}{k_1\lambda_0}\)
For \(n = 1 \ldots N\):
\(k_{2n} = \frac{\mu_1\mu_2\cdots\mu_{n-1}}{k_1\lambda_0\lambda_1\cdots\lambda_{n-1}}\)
\(k_{2n+1} = \frac{k_1\lambda_0\lambda_1\cdots\lambda_{n-1}}{\mu_1\mu_2\cdots\mu_n}\)