<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>Elmar Klausmeier's Blog</title>
	<description>Elmar Klausmeier's Blog on Computers, Programming, and Mathematics</description>
	<lastBuildDate>Sun, 05 Apr 2026 12:14:09 +0000</lastBuildDate>
	<link>https://eklausmeier.goip.de</link>
	<atom:link href="https://eklausmeier.goip.de/feed.xml" rel="self" type="application/rss+xml" />
	<generator>Simplified Saaze</generator>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/04-04-tendler-6-die-schrittweiten-und-ordnungssteuerung</link>
		<guid>https://eklausmeier.goip.de/blog/2026/04-04-tendler-6-die-schrittweiten-und-ordnungssteuerung</guid>
		<title>TENDLER: 6. Die Schrittweiten- und Ordnungssteuerung</title>
		<category>mathematics</category>
		<pubDate>Sat, 04 Apr 2026 15:30:00 +0200</pubDate>
		<description><![CDATA[
<p>Fortsetzung der TENDLER Programmbeschreibung.</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-16-tendler-1-grobaufbau-und-prinzipielle-ueberlegungen">TENDLER: 1. Grobaufbau und prinzipielle Überlegungen</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms">TENDLER: 2. Benutzung des Programmes</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-18-tendler-3-der-praediktor">TENDLER: 3. Der Prädiktor</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-30-tendler-4-die-korrekturiteration">TENDLER: 4. Die Korrektoriteration</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2026/03-10-tendler-5-die-fehlerkontrolle">TENDLER: 5. Die Fehlerkontrolle</a></li>
</ol>
<hr>
<p>Inhalt.</p>
<ul>
<li><a href="#Prinzipien">1. Prinzipien der Schrittweiten- und Ordnungssteuerung</a></li>
<li><a href="#Schrittweitensteuerung">2. Die Schrittweitensteuerung im Programm TENDLER</a></li>
<li><a href="#ShampineTest">3. Die Idee des Shampine-Testes</a></li>
<li><a href="#TENDLER_ShampineTest">4. Der Shampine-Test im Programm TENDLER</a></li>
<li><a href="#AuswahlOrdnung">5. Die Auswahl der Ordnung im Programm TENDLER</a></li>
<li><a href="#Sperren">6. Die beiden Sperren <code>wait[]</code> und <code>problem</code> im Programm TENDLER</a></li>
<li><a href="#SSOCDESTEP">7. Die Schrittweiten- und Ordnungssteuerung im Programm DE/STEP</a></li>
</ul>
<blockquote>
<p>For general use, linear multistep formulas are of little value
without a means of selecting values of the step size $h$ and
method order $q$ for which the method is reasonably accurate and
efficient.
The algorithm for doing this constitute a major distinction between
modern ODE software and its obsolete counterparts.
These algorithms are the result of considerable research and development
efforts, which are still continuing, and their impact on the accuracy
and economy achievable with modern ODE codes is often quite dramatic.</p>
<p><a href="https://doi.org/10.1016/0021-9991(87)90001-5">G.D. Byrne, A.C. Hindmarsh (1987)</a></p>
</blockquote>
<p>Hier wird sowohl die Schrittweiten- und Ordnungssteuerung in dem Programm
TENDLER als auch in dem Programm <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a> beschrieben.
Die Schrittweiten- und Ordnungssteuerung in dem Programm TENDLER wird nach
dem Durchlaufen aller Stufen ausgeführt.
Die Schrittweiten- und Ordnungssteuerung wählt eine passende Schrittweite $h$
und Ordnung $p$ für den nächsten Zyklus aus.
Hierduch wird versucht, sowohl den geforderten Genauigkeitswünschen des
Benutzers zu entsprechen, als auch die Rechenzeit klein zu halten.
Es wird auch der Shampine-Test beschrieben, der dazu dient, zu
erkennen, ob eine Differentialgleichung nun im Ganzen gesehen als
steif oder als nicht-steif zu klassifizieren ist.
Besondere Bedeutung kommt zwei Variablen zu, die nicht nur alleine
in der Schrittweiten- und Ordnungssteuerung gesetzt werden, sondern
auch von der Korrektoriteration mit gesteuert werden.
Ihren Einfluß entfalten sie jedoch erst in dem Schrittweiten- und
Ordnungssteuerungssegment.
Auf alternative Zugänge zu den Betrachtungen in dem Schrittweiten- und
Ordnungssteuerungssegment wird hingewiesen.
Grundlegende Prinzipien, wie sie in gängigen Programmen basierend
auf linearen Mehrschrittverfahren immer wieder zur Anwendung
gelangen, werden den Überlegungen vorangestellt.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://www.mathgenealogy.org/id.php?id=66">Byrne, Georg Dennis</a></li>
<li><a href="https://history.siam.org/pdfs2/Hindmarsh_returned_%20SIAM_copy.pdf">Hindmarsh, Alan C. (*1942)</a></li>
</ol>
<h2>1. Prinzipien der Schrittweiten- und Ordnungssteuerung<a id=Prinzipien></a></h2>
<blockquote>
<p>For a general problem it is most unreasonable to expect the
user to have any idea what is a reasonable order or step size.</p>
<p>C.W. Gear (1971)</p>
</blockquote>
<p><strong>1.</strong> Hier soll die grundlegende Idee
der Schrittweiten- und Ordnungssteuerung erklärt werden.
Für ein Programm basierend auf zyklischen Verfahren und Benutzung von
rückwärtsgenommenen Differenzen, wird man i.d.R. in einer der unten
beschriebenen Art und Weise vorgehen.
Durch die rückwärtsgenommenen Differenzen ist nahe gelegt, wie
man die Schrittweite und Ordnung für den nächsten Zyklus schätzt und
durch die Zyklushaftigkeit werden bestimmte Sicherheitsfaktoren
nahegelegt.
Zum einen könnte man die Differenz von Prädiktornäherung und Korrektorwert
als ein erstes Indiz für die Genauigkeit benutzen.
Dieser Weg wird jedoch in dem Programm TENDLER nicht beschritten,
da man bei steifen Differentialgleichungen dem Prädiktor noch weniger
Vertrauen schenkt, als man dies bei nicht-steifen Gleichungen tut.
Hingegen das Programm <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a> tut dies; es ist allerdings auch nur für
nicht-steife Differentialgleichungen konzipiert.
Für nicht-steife Differentialgleichungen ist es sehr erfolgreich.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://en.wikipedia.org/wiki/C._William_Gear">Gear, Charles William (1935—2022)</a></li>
</ol>
<p><strong>2.</strong> Es sei $\mathbb{P}$ die Menge der möglichen Ordnungen für den nächsten Zyklus.
Für $j\in\mathbb{P} := \{p-1,p,p+1\} \cap \{1,\ldots,7\}$
berechnet man die Größen</p>
<div class=math>
$$
    \eta_j := \min\left\{\overline\eta_{pj},{\mskip 5mu} \sigma_{pj} \left({
                      \varepsilon\over
         |d_{2,j+1}|{\mskip 3mu} \left\Vert\nabla^{j+1}y_{m\ell+\ell}\right\Vert_w
    } \right)^{1/(j+1)} \right\},
$$
</div>
<p>wobei für die Konstante $\sigma_{pj}$ gilt, daß $0&lt;\sigma_{pj}\le1$.
Die Werte $\overline\eta_{pj}$, die in der folgenden Tabelle aufgelistet
erscheinen, sind Schrittweitenbegrenzer, welche von der Stufenanzahl $\ell$
und der Ordnung $p$ abhängen.
Diese Begrenzer dienen dazu, die Schrittweite in der Art zu begrenzen, daß
man ausschließlich mit schon berechneten Werten für die Interpolation
auskommt.
Die Schrittweite kann also nur so verändert werden, wenn genügend viele
alte Werte vorhanden sind, um die benötigten Startwerte für den neuen
Zyklus mit der neuen Schrittweite, durch Interpolation zu erhalten.
Andernfalls, wenn dies nicht der Fall ist, so wird die Schrittweite nicht
geändert oder zumindestens nicht maximal möglich geändert.
Der theoretische Hintergrund für die obige Rechenvorschrift
für $\eta_j$ ist die Formel</p>
<div class=math>
$$
    \pmatrix{y(t_{m\ell+1})\cr \vdots\cr y(t_{m\ell+\ell})\cr} -
    \pmatrix{y_{m\ell+1}\cr \vdots\cr y_{m\ell+\ell}\cr} =
    (d_{p+1}\otimes I) y^{(p+1)}(t_{m\ell+\hat\imath}) h^{p+1} + {\cal O}(h^{p+2}).
$$
</div>
<p>Hierbei ist wieder $d_{p+1}=A_\kappa^{-1}c_{p+1}$, mit dem
Diskretisierungsfehlervektor $c_{p+1}$.
Die entsprechend hohe Ableitung multipliziert mit der entsprechenden
$h$-Potenz wird wie üblich durch die rückwärtsgenommene Differenz ersetzt.</p>
<p>Man kann natürlich keine optimale Schrittweitenfolge erwarten; interessiert
ist man an einer günstigen und brauchbaren Schrittweitenfolge.
Die optimale Schrittweitenfolge für eine feste Differentialgleichung und
feste Toleranz wäre diejenige Folge von Schrittweiten, die minimalen
Rechenaufwand erfordert, ohne daß der Fehler der gefordert wird,
überschritten wird.
Diese optimale Schrittweitenfolge ist natürlich u.a. von der Rechenanlage
abhängig, denn das Verhältnis von benötigter Rechenzeit von
Gleitkommaaddition zu Gleitkommamultiplikation ist in jedem Falle von
der zugrundeliegenden Rechenmaschine abhängig.</p>
<p><strong>3.</strong> Durch die Beschränkung auf die Menge $\mathbb{P}$ wird also nur die um eins
niedriegere, die aktuelle und die um eins höhere Ordnung betrachtet.
Ein Wechsel z.B. von der Ordnung 2 direkt auf die Ordnung 5 ist damit
nicht möglich.
In dem Programm TENDLER ist es daher prinzipiell nicht möglich einen
solchen sprungartigen Anstieg der Ordnung durchzuführen.
Allerdings ist es möglich in langsamerer Progression von der Ordnung 2 auf
die Ordnung 5 überzuwechseln.
Es gibt mindestens ein Programm basierend auf linearen Mehrschrittverfahren,
indem es tatsächlich möglich ist von einer Ordnung $p_1$ auf eine
Ordnung $p_2$ überzuwechseln, mit $|p_1-p_2|&gt;1$, insbesondere ist ein
Ordnungssprung nach oben um beispielsweise 4 Ordnungen möglich.
Üblich ist dies jedoch nicht.
Aufgrund der Differenzentabelle, die im Speicher aufgebaut wird, ist eine
langsamere Erhöhung, insbesondere in Einerschritten, einfacher zu
programmieren und erfordert schließlich auch weniger Rechenaufwand.
Folgende Ordnungsfolge kann jedoch ebenfalls nicht vorkommen:
1, 2, 3, 4, 5, 6, 7.
Ein direktes Aufsteigen zu der Ordnung $p=7$ in dieser linearen Form
ist somit nicht möglich.</p>
<p>Zur Vermeidung dieses Sachverhalts sorgt die Sperrvariable <code>wait[]</code>.
Wohl aber möglich ist 1, 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, $\ldots$ .
Das letzte ist nur dann wahrscheinlich bei sehr strenger
Genauigkeitsanforderung $\varepsilon$.
Denkbar ist auch 7, 7, 2, 1; dies muß man jedoch als Ausnahme werten.
Dies kann auch nur dann auftreten, falls sich große Probleme während der
Integration einstellen.
Ein abrupter Wechsel von der höchsten Ordnung $p=7$ zu der niedrigsten
Ordnung $p=1$ ist Folge einer besonders schwerwiegenden Problematik, die
das Programm TENDLER dadurch versucht zu begegnen, indem versucht wird
diesen Schwierigkeiten durch rasche Veränderung der Ordnung beizukommen.
Die letzte Folge von Ordnungen 7, 7, 2, 1, wird nicht von
der Schrittweiten- und Ordnungs-Steuerung hervorgerufen.
Im steifen Modus werden im Programm TENDLER die niedrigeren Ordnungen
ggü. den höheren Ordnungen bevorzugt.
Im nicht-steifen Modus ist dieser Trend nicht so ausgeprägt.</p>
<p>Niedrigere Ordnungen haben neben ihren i.a. besseren
Stabilitätseigenschaften auch den sehr bedeutsamen Vorteil des sehr viel
geringeren Rechenaufwandes bzgl. Interpolation und Bildung des Prädiktors.
Zudem sind die Veränderungen der Schrittweite, die durchgeführt werden
können, größer als diejenigen, die bei den höheren Ordnungen durchführbar
sind.
Man vgl. hier die nachfolgende Tabelle mit den
Schrittweitenbegrenzern $\overline\eta_{pj}$.</p>
<p><strong>4.</strong>  Es wird nun prinzipiell wie folgt verfahren:</p>
<ol>
<li>Ist $\max \{\eta_j:j\in\mathbb{P}\}{\mskip 3mu}&lt;{\mskip 3mu}\texttt{UPTHRESH}$,
so wird die Schrittweite und die Ordnung nicht gewechselt.
Dies liegt daran, daß der Aufwand in diesem Falle als zu hoch angesehen
wird.</li>
<li>Ist jedoch $\max \{\eta_j:j\in\mathbb{P}\}{\mskip 3mu}\ge{\mskip 3mu}\texttt{UPTHRESH}$,
so wird $\eta$ auf den Wert $\max \{\eta_j:j\in\mathbb{P}\}$
gesetzt und $\hat p=p$, falls $\eta_p=\eta$ und sonst wird $\hat p$
auf den kleinsten Index $j$ derart gesetzt, sodaß $\eta_j=\eta$ ist.</li>
<li>Zum Schluß wird die neue Schrittweite als
$\hat h = \eta \cdot h$ gewählt.</li>
</ol>
<p>Die obigen drei Regeln sind das grundlegende Prinzip der Schrittweiten-
und Ordnungssteuerung.
Die wirklichen Regeln sind verschachtelter.
Es sei für den Moment vorausgesetzt, daß der
Schrittweitenbegrenzer $\overline\eta_{pj}$ keine Rolle spielt,
also $\overline\eta_{pj}=+\infty$ ist.
Wird nun der Abschnitt für die Schrittweiten- und Ordnungssteuerung betreten,
so sei vereinfachend angenommen, daß $\left\Vert\nabla^{\hat p+1}y_{m\ell+\ell}\right\Vert_w$
der Wert des entsprechenden Ausdrucks für die zweite Stufe im nächsten
Zyklus sei.
Die Vereinfachung liegt hier also darin, daß man eine Konstanz der
entsprechend hohen Ableitung der Lösungsfunktion samt Schrittweite
voraussetzt und damit eine entsprechende Konstanz der rückwärtsgenommenen
Differenz.
Diese Annahme birgt keine allzu großen Gefahren in sich, da ja bei einer
sehr raschen Änderung der hohen Ableitung, die Fehlerkontrolle versagen
würde und damit die in diesem Falle ungerechfertigte Annahme abfangen würde.</p>
<p>Nun würde (Phase 2) der Fehlerkontrolle soeben mit Gleichheit
passieren, unter der Annahme, daß $\sigma_{pj}$ gleich 1 sei.
In diesem speziellen Falle wäre also $\hat h$ die größtmögliche
Schrittweite.
Nun ist aber i.d.R. $\left\Vert\nabla^{\hat p+1}y_{m\ell+\ell}\right\Vert_w$
nicht gleich $\left\Vert\nabla^{\hat p+1}y_{(m+1)\ell+2}\right\Vert_w$ und den weiteren
entsprechenden Werten.
Deswegen wurde der Faktor $\sigma_{pj}$ eingeführt, um eine gewisse
“Sicherheitszone” zu erreichen.</p>
<p>Durch ausgiebige Probeläufe wurde beobachtet, daß Sicherheitsfaktoren
in dem Bereich 0.6 bis 0.9 akzeptable Resultate liefern.
Diese Grenzen sind allerdings nicht kritisch.
Faktoren im Bereich 0.3 bis 0.6 sind ebenfalls denkbar, aber nicht sehr
empfehlenswert.
Hierduch würde nämlich dann die Schrittweitensteuerung immer mehr zum
Hemmschuh für eine große Schrittweite ausarten.
Die genauen Werte sind in den Konstanten <code>nssaffac[][]</code> (non-stiff
safety-factors) und <code>stsaffac[][]</code> (stiff safety-factors) abgelegt.</p>
<p>Für die Fehlerkontrolle, die ja ebenfalls eine zukünftige Schrittweite
voraussagen muß, ergaben sich Sicherheitsfaktoren in einer ähnlichen
Größenordnung.
Hierbei muß jedoch dem Rechnen an der Grenzgenauigkeit der Maschine
gut Rechnung getragen werden.
Es sei betont, daß dieser Wertebereich längeren Probeläufen entnommen
wurde und nicht etwa einem Beweis entspringt.
Das Programm <a href="https://dl.acm.org/doi/10.1145/356502.356499">STINT</a> verwendet vergleichsweise große Sicherheitsfaktoren
und schenkt den Besonderheiten des Rechnens am Rande der
Maschinengenauigkeit keinerlei besondere Beachtung.</p>
<p><strong>5.</strong> Man beachte, daß die Schrittweite und damit die Ordnung nur
dann gewechselt werden, wenn sich die neue Schrittweite von der
alten um mindestens $100(\texttt{UPTHRESH}-1)$ Prozent unterscheidet.
Der Wert der Konstanten $\texttt{UPTHRESH}$ beträgt z.Z. 1.16.
Der Grund für die Einführung eines solchen Mindestanstieg der
Schrittweite liegt darin, daß der Aufwand für die Interpolation
der vergangenen Werte für das neue Gitter, sich als lohnend erweisen sollte.
In den Programmen DIFSUB, GEAR und <a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a> wird der Faktor 11/10 verwendet.</p>
<p><a href="https://dl.acm.org/doi/epdf/10.1145/362566.362573">Gear (1971b)</a> gibt an, daß dadurch auch der
Einfluß von Rundungsfehlern gedämpft wird.
Das Programm <a href="https://doi.org/10.1137/0906063">DSTIFF</a> hingegen verwendet einen Faktor von $1.025$ und dies, um
schneller zu den höheren Ordnungen zu gelangen.</p>
<p>Dennoch zeigen die Testläufe von <a href="https://doi.org/10.1137/0906063">Gupta (1985)</a>,
daß das Programm DSTIFF bei hohen Genauigkeitsanforderungen $\varepsilon$
besonders wenig erfolgreich arbeitet.
Dies ist ein Hinweis auf die eingangs gemachte Erwähnung, daß höhere
Ordnungen mehr Rechenbedarf erfordern und es sich damit anbietet die
hohen Ordnungen so weit wie möglich zu meiden, zumindestens im steifen Falle.
Das Programm DSTIFF ist maßgeblich für steife Differentialgleichungen gedacht
und nicht schaltfähig.</p>
<p>Bibliographisch:</p>
<ol>
<li>Gupta, Gopal K.: “<a href="https://doi.org/10.1137/0906063">Description and Evaluation of a Stiff ODE Code DSTIFF</a>”, SIAM Journal on Scientific and Statistical Computing, Vol 6, No 4, October 1985, pp.939–950</li>
</ol>
<p><strong>6.</strong> Wie oben schon erwähnt, werden die vergangenen Werte für das neue Gitter
durch Interpolation bestimmt.
In der Absicht den Interpolationsfehler möglichst gering zu halten,
wurde die folgende Einschränkung eingeführt:
Die vergangenen Werte für das neue Gitter müssen im Intervall
$[t_{m\ell-p+1}{\mskip 3mu} ,{\mskip 5mu} t_{m\ell+\ell}]$ liegen.
Dieses Intervall enthält nun genau die vergangenen Werte
des aktuellen Zykluses und die gerade berechneten Näherungen.
Diese Einschränkung ergibt die Ungleichung</p>
<div class=math>
$$
    (\hat p - 1) \cdot \hat h  {\mskip 5mu}\le{\mskip 5mu}  (\ell + p - 1) \cdot h {\mskip 5mu}.
$$
</div>
<p>Die größte Schrittweite $\hat h$, die nun dies erfüllt, ist</p>
<div class=math>
$$
    \hat h_{\max}={\ell+p-1\over\hat p-1}\cdot h=:
        \overline\eta_{p\hat p} \cdot h {\mskip 5mu}.
$$
</div>
<p>Die Werte $\overline \eta_{p\hat p}$ sind nun in der nachstehenden Tabelle,
wie schon weiter oben angekündigt, aufgelistet.
Sie ergeben sich alle durch die oben angegebene Formel, wenn man dabei
noch beachtet, daß die Stufenanzahl $\ell$ von der Ordnung $p$ abhängt.
Die Abänderung der Unendlichkeitswerte auf 6 und 4$1\over2$ geschah,
weil es sonst zu einem völligen Überschiessen kommen könnte.
Dieses Verhalten konnte auch tatsächlich beobachtet werden.
Dies gilt insbesondere für den Wert 6.</p>
<p>Während der Startphase sind die Schrittweiten u.U. für das gegebene
Problem noch so “klein”, daß die Genauigkeit der Schätzung der
Schrittweite nicht überbetont werden darf.
Den beiden abgeänderten Unendlichkeitsstellen haftet aber dennoch eine
gewisse Willkürlichkeit an.
Werte entsprechender Größe, also kleiner 10, sind natürlich ebenfalls
einsetzbar.
Die Werte sind im Programm TENDLER nicht kritisch.</p>
<table>
<thead>
<tr>
<th>Ordnung <em>p</em></th>
<th align="right">$p-1$</th>
<th align="right">$p$</th>
<th align="right">$p+1$</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td align="right">n/a</td>
<td align="right">6</td>
<td align="right">3</td>
</tr>
<tr>
<td>2</td>
<td align="right">4.5</td>
<td align="right">4</td>
<td align="right">2</td>
</tr>
<tr>
<td>3</td>
<td align="right">5</td>
<td align="right">2.5</td>
<td align="right">$1.\overline 6$</td>
</tr>
<tr>
<td>4</td>
<td align="right">3</td>
<td align="right">2</td>
<td align="right">1.5</td>
</tr>
<tr>
<td>5</td>
<td align="right">$2.\overline 6$</td>
<td align="right">1.8</td>
<td align="right">1.6</td>
</tr>
<tr>
<td>6</td>
<td align="right">2.25</td>
<td align="right">1.8</td>
<td align="right">1.6</td>
</tr>
<tr>
<td>7</td>
<td align="right">2</td>
<td align="right">$1.\overline 6$</td>
<td align="right">n/a</td>
</tr>
</tbody>
</table>
<p>Es ist $\ell(p) = 3 + \lfloor p/5\rfloor$ ($1\le p\le 7$) und dies sogar
für die Ordnungen $p=1$ und $p=2$.
Das Verfahren für die Ordnung $p=1$ ist, wie vormals schon erwähnt,
die dreimalige Wiederholung des impliziten Euler-Verfahrens.
Für die Ordnung $p=2$ wird dreimal hintereinander die BDF2 verwendet.
Bei diesen beiden Ordnungen handelt es sich, wenn man so will, nicht um
“echte” Zyklen.
Weil die Schrittweiten- und Ordnungs-Steuerung mindestens
$p+3=k+3$ Werte für die Berechnung von $\left\Vert\nabla^{p+2}y_{m\ell+\ell}\right\Vert_w$
benötigt, muß die Zykluslänge für das Verfahren erster Ordnung mindestens 3
betragen, wenn man nur die Lösungswerte aus dem augenblicklichen Zyklus
benützen will.</p>
<p>Diese Bemerkung gilt für alle Ordnungen, insbesondere auch für die
beiden niedrigsten Ordnungen, $p=1$ und $p=2$.
Diese Bedingung kann nun leicht dadurch erfüllt werden, in dem
auch die Ordnungen 1 und 2 die Zykluslänge 3 haben.
Bei diesen Ordnungen ist dann also natürlich jede Stufe gleich.
Die Programme <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">DIFJMT</a>,
<a href="https://dl.acm.org/doi/10.1145/356502.356499">STINT</a> und TENDLER verwenden alle die völlig gleichen
Formeln, insbesondere werden bei den zwei niedrigsten Ordnungen $p=1$ und
$p=2$, dreimal hintereinander jeweils die BDF1 und die BDF2 benutzt.</p>
<p><strong>7.</strong> Der Aufbau des Differenzenschemas ist</p>
<div class=math>
$$
\matrix{
    p\qquad     & \cdot\quad& &1&       &    &2&        &   &3&        &\ldots\cr
    i\qquad     & 0\quad &  0&0&0\quad  &   0&0&0\quad  &  0&0&0\quad  &\ldots\cr
\downarrow\qquad&        &  1&1&1\quad  &   1&1&1\quad  &  1&1&1\quad  &\ldots\cr
                &        &   &2&2\quad  &   2&2&2\quad  &  2&2&2\quad  &\cr
                &        &   & &\llap(3\rlap)\quad&    &3&3\quad  &  3&3&3\quad  &\cr
                &        &   & &        &    & &\llap(4\rlap)\quad&   &4&4\quad  &\cr
                &        &   & &        &    & &        &   & &\llap(5\rlap)\quad&\cr
}
$$
</div>
<p>Die eingeklammerten Werte werden nur von der Schrittweiten- und
Ordnungssteuerung benutzt, stehen dem Benutzer aber ebenfalls zur Verfügung,
anders als in den Programmen <a href="https://dl.acm.org/doi/10.1145/356502.356499">STINT</a>
und <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">DIFJMT</a>.
Bei diesen beiden letzten Programmen werden diese Werte nur indirekt
bei einer Normberechnung bestimmt.
In dem Programm TENDLER stehen diese Differenzen direkt als Vektoren
dem Benutzer zur Verfügung.
Würde man auf diese Vektoren verzichten, so würden $5n$ weniger
Speicherzellen benötigt.
Das Programm TENDLER würde damit dann echt weniger Speicherplatz
beanspruchen als die beiden Programme <a href="https://dl.acm.org/doi/10.1145/356502.356499">STINT</a>
und <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">DIFJMT</a> und dies trotz
erweiterter Funktionalität.
Die Ursache hierfür liegt in einem anderen verwendeten Datenschema.</p>
<p>Bei Problemen mit impliziter Zeitvorgabe könnten diese hohen Differenzen
u.U. von Vorteil sein.</p>
<p>Zur Erinnerung: Die Berechnung von $\nabla^iy_k$ benötigt die Werte
$y_k, y_{k-1}, \ldots, y_{k-i}$, also $i+1$ Ordinatenwerte.
Da die zyklischen Verfahren ab der Ordnung $p\ge3$ sowieso mindestens
dreistufig sind, entfällt eine Sonderbehandlung dieser hohen Ordnungen.
Lässt man die Bedingung, daß bei dem Verfahren erster Ordnung nur
zykluseigene Werte benutzt werden dürfen, fallen, so kann man durchaus
bei den beiden niedrigsten Ordnungen zweistufige Verfahren wählen.
Das Programm TENDLER lässt sich hier durch Austausch nur einer einzigen
Konstanten leicht abändern.</p>
<p>Jedoch zeigten Testläufe von <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a>,
daß das Programm <a href="https://dl.acm.org/doi/10.1145/356502.356499">STINT</a> bei der Beschränkung auf die beiden niedrigsten
Ordnungen, also BDF1 und BDF2, sogar effizienter arbeitet als das
Programm <a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a>,
welches die völlig gleichen Formeln bei diesen beiden
niedrigsten Ordnungen benutzt, allerdings in Nordsieck-Darstellung.
In dem Programm TENDLER wurde daher vorerst davon abgesehen diese
Zyklenlängenverringerung durchzuführen.
Auch speicherplatzmässig liesse sich durch eine solche Veränderung
keinerlei Gewinn erzielen, es sei denn, man begrenzt die Höchstordnung
auf 2 oder auf 4.
Bei diesen beiden Ordnungen vollzieht sich ja der Sprung
der Stufenanzahl $\ell$.
Daß Programme, basierend auf gleichen Formeln, unterschiedliche Wirkungsgrade
aufweisen, ist ja schon mehrfach erwähnt worden.
Daß allerdings eine, wenn man so will, künstliche Zyklenverlängerung,
hier von 1 auf 3 sich positiv auswirkt, ist bemerkenswert.
Es wurde schon anderer Stelle darauf hingewiesen, daß diese Erscheinung
nicht notwendig ihre kausale Begründung in einer Zyklenverlängerung findet.
Jedoch wenn es einen Nachteil für längere Zyklen gäbe, so könnte dieser
mögliche Nachteil dennoch in dem allgemeinen Wechselspiel der verschiedenen
Segmente keine maßgebliche Rolle spielen.
Auf das letzte kommt es aber gerade an.</p>
<p>Bibliographisch:</p>
<ol>
<li>Gaffney, Parick W.: “<a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">A Performance Evaluation of Some FORTRAN Subroutines for the Solution of Stiff Oscillatory Ordinary Differential Equations</a>”,
ACM Transactions on Mathematical Software, Vo. 10, No. 1, March 1984, pp. 58-72</li>
</ol>
<p><strong>8.</strong> <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">J.M. Tendler</a> gewann seine zyklischen Formeln durch Optimieren des
Widlund-Winkels $\alpha$ und der Widlund-Distanz $\delta$ bei der
$A_\infty[\alpha]$- und $S_\infty[\delta]$-Stabilität, unter der
Prämisse konstanter Schrittweite.</p>
<p>Die in füheren Abschnitten erwähnten Stabilitätseigenschaften, wie
$A_\infty^0[\alpha]$- und $S_\infty^0[\delta]$-Stabilität, wurden
unter der Voraussetzung gewonnen, daß die Schrittweite sich nicht erhöht
oder erniedrigt.
Wenn sich nun trotzdem die Schrittweite oder die Ordnung im Laufe der
Integration verändert, so muß man u.U. damit rechnen, daß die gewünschten
Stabilitätseigenschaften nicht mehr anzutreffen sind.</p>
<p><a href="https://doi.org/10.1007/978-1-4684-2100-2_9">Gear/Tu/Watanabe (1974)</a>
beobachteten, daß bei starken Schwankungen der Schrittweite, die
$D$-Stabilität, insbesondere bei höheren Ordnungen, verloren ging.
<a href="https://doi.org/10.1007/978-1-4684-2100-2_9">Gear/Tu/Watanabe (1974)</a> berichten
über Schrittweitenänderungen jeweils
immer um den Faktor 10 bei der BDF2.
Wird also bei der BDF2 erst die Schrittweiteite verzehnfacht und dann sofort
anschliessend wieder gezehntelt, also</p>
<div class=math>
$$
    h, \quad {h\over10}, \quad h, \quad {h\over10}, \quad\text{ etc.},
$$
</div>
<p>so kann bewiesen werden, daß dieses so gebildete Verfahren nicht <em>D</em>-stabil ist.
Genau das gleiche Resultat erhält man auch für die Adams-Formeln.
Die $(k-1)$-fache Wiederholung des $k$-Schritt Adams-Verfahrens (mit
konstanter Schrittweite) wirkt hingegen stabilisierend.</p>
<p>Mit Hinblick auf die obige Tabelle der Schrittweitenbegrenzer kann eine
solche sehr extreme Änderung der Schrittweite in dem Programm
TENDLER grundsätzlich nicht vorkommen.
Auch in Programmen basierend auf Runge-Kutta-Verfahren werden solche starken
Schwankungen von der dortigen Schrittweitensteuerung abgedämpft, man
vgl. hier z.B. das Programm DOPRI5 von
<a href="https://www.amazon.de/Solving-Ordinary-Differential-Equations-Computational/dp/3540566708">Hairer/Wanner/Nørsett (1987)</a>.
Dennoch wird eine grundsätzliche Problematik krass beleuchtet.</p>
<p><a href="https://doi.org/10.1109/TCS.1979.1084697">Liniger (1979)</a> schreibt hierzu:</p>
<blockquote>
<p>The one-leg implementation of $A2$ is $A_0$-contractive with respect
to $\left\Vert\cdot\right\Vert_\infty$ (and thus $A_0$-stable), relative to the
variable coefficient test equation $\dot x=\lambda(t)x$, for any variable
step sequence whatsoever.
By contrast, any multistep method (which is not at the same time a
one-leg method) can be destabilized by the use of certain variable
step sequences when applied to the variable test
equation $\dot x=\lambda(t)x$ with real valued $\lambda(t)$.</p>
</blockquote>
<p>Es ist nun anzunehmen, daß diese Instabilitätserscheinungen auch für die
zyklischen Formeln von <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a> gelten.
Um diesen Schwierigkeiten zumindestens ansatzweise aus dem Wege zu gehen,
wird verlangt, daß ein Zyklus immer mit konstanter Schrittweite
durchlaufen wird (was in gewisser Hinsicht selbstverständlich sein muß) und
ab den Ordnungen 4 und höher, mindestens zwei oder drei Zyklen mit fester
Schrittweite benutzt werden.</p>
<p>Die genaue Anzahl der “Zwangs-Wartezyklen” für die Ordnung $p$ wird durch
die Sperrvariable $\texttt{wait[}p\texttt{]}$ festgelegt.</p>
<p>Ein weiterer Punkt, dem Aufmerksamkeit gewidmet werden sollte bei der
Schrittweiten- und Ordnungssteuerung in dem Programm TENDLER, ist,
daß sowohl für den steifen als auch nicht-steifen Teil, verschiedene
Schrittweiten- und Ordnungssteuerungsunterprogramme aufgerufen werden.
Im steifen Teil werden niedrige Ordnungen sehr stark favorisiert,
während im nicht-steifen Teil diese Tendenz abgeschwächt wurde, da bei
nicht-steifen Differentialgleichungen hohe Ordnungen in dem Programm
TENDLER wesentlich günstiger sind.
Ein Austausch des Schrittweiten- und Ordnungssteuerungsunterprogramm
und insbesondere die Hinzufügung weiterer Unterprogramme ist einfach
(es handelt sich erneut um einen Vektor von Unterprogrammen).
Das Programm LSODAR verwendet nur ein Schrittweiten- und
Ordnungssteuerungssegment.
Das Programm DEASY enthält natürlich 2 solcher Segmente: eines für
das Runge-Kutta-Verfahren und eines für die BDF.
Dies hat natürlich seine Ursachen darin, daß zwei ansonsten völlig
selbstständige Programme zusammengefaßt wurden zu einem einzigen neuen.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://de.wikipedia.org/wiki/Werner_Liniger">Werner Liniger (1927–2017)</a></li>
<li><a href="https://de.wikipedia.org/wiki/Ernst_Hairer">Hairer, Ernst (*1949)</a></li>
<li><a href="https://de.wikipedia.org/wiki/Gerhard_Wanner_(Mathematiker)">Wanner, Gerhard (*1942)</a></li>
<li><a href="https://de.wikipedia.org/wiki/Syvert_Paul_N%C3%B8rsett">Nørsett, Syvert Paul (1944–2025)</a></li>
<li><a href="https://en.wikipedia.org/wiki/C._William_Gear">Gear, Charles William (1935—2022)</a></li>
<li><a href="https://mathgenealogy.org/id.php?id=4254">Tu, Kai-Wen</a></li>
<li><a href="https://archive.computerhistory.org/resources/access/text/2013/12/102746786-05-01-acc.pdf">Watanable, Daniel S.</a></li>
</ol>
<h2>2. Die Schrittweitensteuerung im Programm TENDLER<a id=Schrittweitensteuerung></a></h2>
<blockquote>
<p>The need to increase step size for efficiency and the simultaneous
need to maintain strict error control run somewhat counter to
each other. Yet, this is precisely the type of performance
we look for in high quality ODE software.</p>
<p>G.D. Byrne, A.C. Hindmarsh (1987)</p>
</blockquote>
<blockquote>
<p>Vor einer allzu häufigen und allzu starken Änderung der Schrittweite
sei jedoch gewarnt; hier sind noch nicht alle Fragen der Stabilität
bei Schrittweitenänderungen befriedigend beantwortet worden.</p>
<p><a href="https://www.amazon.de/Gew%C3%B6hnliche-Differentialgleichungen-Einf%C3%BChrung-Theorie-Hochschultext/dp/3540152881/">H. Werner, H. Arndt (1986)</a></p>
</blockquote>
<p><strong>1.</strong> Unter der Annahme konstanter Schrittweiten werden die theoretischen
Begründungen für dieses Segment abgeleitet.
Hier wird beschrieben wie die Schrittweite bestimmt wird.
Die Auswahl der Ordnung folgt später.
Sie ist abhängig von der Schrittweitenwahl.</p>
<p>Berechnet werden nur die wirklich benötigten Werte, also diejenigen
Werte, die auch wirklich an der Entscheidungsfindung für eine neue
Ordnung und Schrittweite partizipieren.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://de.wikipedia.org/wiki/Helmut_Werner_(Mathematiker)">Helmut Werner (1931—1985)</a></li>
<li><a href="https://mathgenealogy.org/id.php?id=35442">Herbert Arndt</a></li>
</ol>
<p><strong>2.</strong> Mit der Variablen <code>same</code> berechnet man denjenigen Faktor, mit dem man
die Schrittweite $h$ für den nächsten Rechenschritt multiplizieren könnte.
Der Wert <code>same</code> wird immer berechnet und zwar nach der Rechenvorschrift:</p>
<div class=math>
$$
    \texttt{same} = \cases{\texttt{rsmooth}\left\lt \texttt{sf[SAME]}\root p+1\of{\displaystyle{
        \texttt{errconst[}p\texttt{]} {\mskip 3mu}\varepsilon \over \left\Vert\nabla^{p+1}y\right\Vert}}{\mskip 3mu}\right\gt \land
        \texttt{limit[}p\texttt{][SAME]}, & falls $\left\Vert\nabla^{p+1}y\right\Vert \gt  {\varepsilon\over10^4}$;\cr
        \texttt{limit[}p\texttt{][SAME]}, & falls $\left\Vert\nabla^{p+1}y\right\Vert \le {\varepsilon\over10^4}$.\cr
    }
$$
</div>
<p><strong>3.</strong> Die Berechnung des Wertes <code>down</code> folgt der Formel:</p>
<div class=math>
$$
    \texttt{down} = \cases{\texttt{rsmooth}\left\lt  \texttt{sf[DOWN]}\root p+1\of{\displaystyle{
        \texttt{errconst[}p-1\texttt{]} {\mskip 3mu}\varepsilon\over\left\Vert\nabla^py\right\Vert}}{\mskip 3mu}\right\gt \land
        \texttt{limit[}p\texttt{][DOWN]}, & $p\gt 1$ und $\left\Vert\nabla^py\right\Vert\gt {\varepsilon\over10^4}$;\cr
        \texttt{limit[}p\texttt{][DOWN]}, & $p\gt 1$ und
        $\left\Vert\nabla^py\right\Vert \le {\varepsilon\over10^4}$;\cr
        0, & $p=1$.\cr
    }
$$
</div>
<p><strong>4.</strong> Der Wert <code>up</code> wird nur dann berechnet, falls eine Ordnungserhöhung überhaupt
möglich ist.
Dies ist gegeben, falls</p>
<div class=math>
$$
    p\lt p_{\max} \land \texttt{same}\ge\texttt{down} \land
    \left\{\eqalign{&\texttt{WAITISOK(wait)}\cr &\texttt{NOTACTIVE(problem)}\cr}\right\}
    \land \texttt{same}\ge1, \tag{*}
$$
</div>
<p>d.h., keine der Sperren ist gesetzt, die Maximalordnung $p_{\max}$
wird auch bei einer Ordnungserhöhung nicht überschritten, und es
wäre möglich, auch bei der aktuellen Ordnung einen Schrittweitengewinn,
bzw. zumindestens keinen Verlust zu erleiden.
Nun wird <code>up</code> berechnet wie folgend</p>
<div class=math>
$$
    \texttt{up} = \cases{\texttt{rsmooth}\left\lt  \texttt{sf[UP]}\root p+2\of
        {\displaystyle{\texttt{errconst[}p+1\texttt{]} {\mskip 3mu}\varepsilon\over
        \left\Vert\nabla^{p+2}y\right\Vert}} {\mskip 3mu}\right\gt  \land \texttt{limit[}p\texttt{][UP]}, & falls $(*)$ und
        $\left\Vert\nabla^{p+2}y\right\Vert\gt  {\varepsilon\over10^4}$;\cr
        \texttt{limit[}p\texttt{][UP]}, & falls $(*)$ und
        $\left\Vert\nabla^{p+2}y\right\Vert \le {\varepsilon\over10^4}$;\cr
        0, & sonst.\cr
    }
$$
</div>
<p>Für den nicht-steifen Teil werden weniger restriktive Anforderungen gestellt.
Zudem ist <code>sf[UP]</code> für den nicht-steifen Teil größer.
Die Matrizen <code>stsaffac[][]</code> und <code>nssaffac[][]</code> entsprechen
jeweils $\sigma_{p,j}$.
Im nicht-steifen Teil wird unter <code>down</code>, <code>same</code> und <code>up</code> schließlich der
größte Wert herausgesucht, während hingegen im steifen Teil eine Tendenz
über mehrere Ordnungen hinweg notwendig ist, damit die Ordnung erhöht werden
kann.</p>
<p><strong>5.</strong> Für zwei reelle Zahl $a$, $b$ ist $a\land b=\inf(a,b)$, also hier natürlich
$a\land b=\min(a,b)$.
Die Konstanten <code>sf[SAME]</code>, <code>sf[DOWN]</code> und <code>sf[UP]</code> sind Sicherheitsfaktoren
(sf: safety factor), wobei <code>sf</code> entweder <code>stsaffac[][]</code> oder <code>nssaffac[][]</code>
ist.</p>
<p>Der Vektor <code>errconst[]</code> enthält die Konstanten für denjenigen Fehlertest,
der zuerst der Schrittweiten- und Ordnungssteuerung nachfolgt.</p>
<p><strong>6.</strong> Die hierbei mehrfach aufgetretene Funktion <code>rsmooth()</code> (ratio smooth)
ist definiert durch</p>
<div class=math>
$$
    \texttt{rsmooth}(\xi)=\tau(\xi)=\cases{
        1, & falls $\texttt{DOWNTHRESH}\le\xi\le\texttt{UPTHRESH}$;\cr
        \xi, & falls $\xi\gt \texttt{UPTHRESH}$;\cr
        \max(\frac{1}{4},\xi), & falls $\xi\lt \texttt{DOWNTHRESH}$.\cr
    }
$$
</div>
<p>Diese Funktion ist nicht global-stetig.
Man kann sie auffassen als nicht-normalisierte unscharfe Funktion
(fuzzy function).</p>
<p>Die Konstanten <code>DOWNTHRESH</code> und <code>UPTHRESH</code> sind gegenwärtig auf die
Werte $0.885$ und $1.16$ gesetzt.
Das Programm TENDLER verhält sich nicht sensitiv ggü. diesen beiden
Faktoren, jedoch führt eine geschickte Wahl dieser beiden Werte zu einer
entsprechenden Verringerung der Rechenarbeit.
Die Funktion <code>rsmooth()</code></p>
<ol>
<li>unterstützt die Vermeidung eines
Schrittweitenwechsels im Bereich $\xi\in[\texttt{DOWNTHRESH},\texttt{UPTHRESH}]$,</li>
<li>reicht das Element $\xi$ unverändert weiter für Werte größer als
<code>UPTHRESH</code> und begrenzt ansonsten das Absinken auf $\frac{1}{4}$.</li>
</ol>
<p>Die Endbewertung des Sicherheitsfaktors <code>ratio</code> geschieht hauptsächlich
über die Variablen <code>stsaffac[][]</code> und <code>nssaffac[][]</code>.</p>
<p><strong>7.</strong> Man kann den Prozeß der Schrittweiten- und Ordnungssteuerung auffassen
als ein stochastisches, multikriterielles Optimierungsproblem.
Es soll also eine optimale Strategie gefunden werden, jedoch sind die
Auswirkungen dieser Entscheidung, dem Entscheidungsträger im voraus
nicht bekannt.
Die Optimierungsaufgabe ist multikriteriell, da mehrere, konfliktiöse
Zielfunktionen gegeneinander konkurrieren.
U.a. unter den Nebenbedingungen</p>
<div class=math>
$$
    h_{\min}\le h\le h_{\max}\quad\land\quad
    1\le p\le7\quad\land\quad
    \Delta h\in S_p\quad\land\quad
    \|Y_i-y_i\|\le\varepsilon,
$$
</div>
<p>sind die drei folgenden Zielfunktionen simultan zu optimieren:</p>
<div class=math>
$$
\begin{array}{ccl}
    h&\to&\max&\qquad\text{schnell durch das Integrationsintervall},\\
    p&\to&\min&\qquad\text{Rechenarbeit: weniger Summanden},\\
    \Delta h&\to&\min&\qquad\text{Stabilität, Interpolation}, W=I-h\gamma J.
\end{array}
$$
</div>
<p>Die augenblickliche Lösungsstrategie ist stark heuristischer Natur.
Insbesondere garantiert sie nicht, das globale Optimum zu finden.
Sie verspricht auch nicht per se schrittweitenwechsel-stabil zu sein und dies
obwohl Überlegungen bzgl. der Schrittweitenwechselstabilität letztlich
gewisse Entscheidungen beeinflussten.
Unter veränderten Gesichtspunkten, nämlich kontrolltheoretischen
Überlegungen, kommen <a href="https://doi.org/10.1007/BF01934091">Gustafsson/Lundh/Söderling (1988)</a>
zu einer alternativen Lösungsstrategie.</p>
<p>Von den genannten Autoren werden diese Versuche anhand des
Programmes <a href="https://www.unige.ch/~hairer/prog/nonstiff/dopri5.f">DOPRI5</a>, siehe
<a href="https://www.amazon.de/Solving-Ordinary-Differential-Equations-Computational/dp/3540566708">Hairer/Wanner/Nørsett (1987)</a>,
durchgeführt.</p>
<p>Bibliographisch:</p>
<ol>
<li>Gustafsson, K., Lundh, M. &amp; Söderlind, G. <a href="https://doi.org/10.1007/BF01934091">API stepsize control for the numerical solution of ordinary differential equations</a>. BIT 28, 270–287 (1988).</li>
<li><a href="https://www.researchgate.net/scientific-contributions/Kjell-Gustafsson-2037529642">Kjell Gustafsson</a></li>
<li><a href="https://www.researchgate.net/profile/Gustaf-Soederlind">Gustaf Söderling</a></li>
<li><a href="https://www.researchgate.net/scientific-contributions/Michael-Lundh-77706462">Michael Lundh</a></li>
</ol>
<h2>3. Die Idee des Shampine-Testes<a id=ShampineTest></a></h2>
<blockquote>
<p>For example, such a user solving a set of equations describing
a wind turbine got a stiffness indication from DE.
The word “stiff” meant nothing to him, but the instruction to
switch to another code did, and resulted in the effective solution
of his problem. $\ldots$  The imperfection of the tests is that they
may not detect stiffness; since they cost almost nothing, they do
not harm and may prove useful.</p>
<p><a href="https://dl.acm.org/doi/epdf/10.1145/355719.355722">L.F. Shampine (1977)1</a></p>
</blockquote>
<p><strong>1.</strong> Es soll hier kurz auf die grundlegende Idee des Shampine-Testes
eingegangen werden.
Die Stabilitätsbereiche von $P(EC)^iE$- und auch $P(EC)^i$-Verfahren
für Picard Iteration zeigen deutlich, daß niedrigere Ordnungen einen
wesentlich größeren Stabilitätsbereich aufweisen als höhere Ordnungen.
Auf dieser einfachen Grundidee basiert letztlich die gesamte Überlegung.
<a href="https://doi.org/10.1016/0898-1221(81)90125-5">Thompson/Rodabaugh (1981)</a>
geben für die Adams-Formeln die folgenden Werte an, siehe  Tabelle, die
teilweise die Brauchbarkeit für schwach-steife Differentialgleichungen
kennzeichnen.
$P_i$ steht hier wie üblich für Prädiktor der Ordnung $i$, $E$ für
Auswertung der Funktion und $C_j$ für Korrektur mit einer Formel der
Ordnung $j$.</p>
<table>
<thead>
<tr>
<th>$k$</th>
<th>$P_kEC_{k+1}E$</th>
<th>$P_kE(C_{k+1}E)^2$</th>
<th>$P_kEC_kE$</th>
<th>$P_kE(C_kE)^2$</th>
<th>$P_kEC_k$</th>
<th>$P_k(EC_k)^2$</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>1.0</td>
<td>0.667</td>
<td>1.0</td>
<td>0.493</td>
<td>0.5</td>
<td>0.736</td>
</tr>
<tr>
<td>2</td>
<td>1.2</td>
<td>0.527</td>
<td>0.865</td>
<td>0.423</td>
<td>0.286</td>
<td>0.585</td>
</tr>
<tr>
<td>3</td>
<td>0.968</td>
<td>0.424</td>
<td>0.643</td>
<td>0.351</td>
<td>0.158</td>
<td>0.439</td>
</tr>
<tr>
<td>4</td>
<td>0.706</td>
<td>0.336</td>
<td>0.474</td>
<td>0.285</td>
<td>0.085</td>
<td>0.325</td>
</tr>
<tr>
<td>5</td>
<td>0.520</td>
<td>0.261</td>
<td>0.349</td>
<td>0.225</td>
<td>0.046</td>
<td>0.239</td>
</tr>
<tr>
<td>6</td>
<td>0.387</td>
<td>0.195</td>
<td>0.258</td>
<td>0.173</td>
<td>0.024</td>
<td>0.176</td>
</tr>
<tr>
<td>7</td>
<td>0.290</td>
<td>0.140</td>
<td>0.191</td>
<td>0.127</td>
<td>0.013</td>
<td>0.129</td>
</tr>
<tr>
<td>8</td>
<td>0.220</td>
<td>0.095</td>
<td>0.142</td>
<td>0.0893</td>
<td>0.006</td>
<td>0.0945</td>
</tr>
<tr>
<td>9</td>
<td>0.169</td>
<td>0.061</td>
<td>0.107</td>
<td>0.059</td>
<td>0.003</td>
<td>0.070</td>
</tr>
<tr>
<td>10</td>
<td>0.132</td>
<td>0.0377</td>
<td>0.0805</td>
<td>0.037</td>
<td>0.002</td>
<td>0.052</td>
</tr>
<tr>
<td>11</td>
<td>0.105</td>
<td>0.0223</td>
<td>0.062</td>
<td>0.0223</td>
<td>0.001</td>
<td>0.039</td>
</tr>
</tbody>
</table>
<p>Mann erkennt deutlich (für die Adams-Formeln), daß die “Intervalllänge” des
Stabilitätsgebietes schnell mit größer werdender Ordnung abnimmt.
Ferner ist in diesem Falle die Kombination $P_kEC_{k+1}E$ am günstigsten.
Wollte man eine noch weitere Vergrößerung des Stabilitätsintervalles
vornehmen, so kann man durch Mittelung von Prädiktor und Korrektor
für die Adams-Verfahren sogar eine bis zu zwölffache Verbesserung erzielen,
siehe <a href="https://doi.org/10.1016/0898-1221(81)90125-5">Thompson/Rodabaugh (1981)</a>.
Man verwendet dann Verfahren der Form
$C_k^\alpha = \alpha P_k + (1-\alpha) C_{k/k+1}$.
Allerdings verändern sich dann auch die Fehlerkonstanten.</p>
<p>Bibliographisch:</p>
<ol>
<li>D.J. Rodabaugh, S. Thompson: “<a href="https://doi.org/10.1016/0898-1221(81)90125-5">A note on the relative efficiency of Adams methods</a>”
Computers &amp; Mathematics with Applications, Vol. 7, Issue 5, pp. 401–403</li>
<li>Thompson, Skip</li>
<li>Rodabaugh, D.J.</li>
</ol>
<p><strong>2.</strong> Beginnt nun die Differentialgleichung steif zu werden, so erscheinen mehr
und mehr die niedrigen Ordnungen, für die Schrittweiten- und
Ordnungs-Steuerung “genauer” zu werden, während die höheren Ordnungen
aufgrund der drohenden Instabilität zunehmend eine weniger glatte und
stabile Lösung anzeigen.
Bei nicht-steifen Regionen ist üblicherweise das Verhalten genau umgekehrt.
Hier sind höhere Ordnungen bei höherer Genauigkeitsanforderung
i.a. geeigneter.</p>
<p>Im Falle zunehmender Steifheit pendelt $H=h\lambda$
um den Rand des Stabilitätsbereiches.
Diese Erscheinung lässt sich verbal wie folgt erklären.
Eine Vergößerung der Schrittweite $h$ über den Rand des Stabilitätsbereiches
hinaus, führt zu einem Ansteigen des lokalen Fehlers, welcher von der
Fehlerkontrolle erkannt wird und durch ein Zurücknehmen der Schrittweite
versucht wird entgegen zu treten und zwar so lange, bis $H$ wieder im
Stabilitätsbereich liegt und sich damit der Ablauf wiederholt.</p>
<p><strong>3.</strong> Diese verbale Beschreibung vereinfacht natürlich an manchen Stellen den
wahren Sachverhalt.
Zum einen wird man fragen, wie Steifheit auf den lokalen Fehler einwirkt
und zum anderen wird eine Periodizität der Schwingung der Schrittweite
um die Stabilitätsgrenze postuliert, aber nicht streng begründet.
Denn, die Existenz und Einwirkung von Rückstellkräften belegt noch keine
Schwingungs- oder Dämpfungserscheinungen.
Den letzten Gedanken greift _{Hall, George}Hall (1985) und
Hall (1986) auf.
Dort wird ein Runge-Kutta-Verfahren untersucht auf Schwingungen um diese
angedeutete Gleichgewichtslage.
Die Analyse beruht auf der Untersuchung der nichtlinearen
Rekurrenzgleichungen</p>
<div class=math>
$$
    y_{n+1}=S(H_n)y_n,\qquad E_{n+1}=E(H_n)y_n,\qquad
    H_{n+1}=H_n\root p\of{\vartheta\varepsilon\over|E_{n+1}|},
$$
</div>
<p>wobei $E_i$ der vom Runge-Kutta-Verfahren geschätzte lokale Fehler ist und
$H_n=\lambda h_n$.
Diese Rekurrenzgleichung schwingt sich um einen Stabilisationspunkt ein,
wenn sich eingeschleppte Störungen in erster Näherung wegdämpfen.
Der Gleichgewichtspunkt liegt natürlich bei</p>
<div class=math>
$$
    \left|S(H_L)\right|=1,\qquad \left|E(H_L)y_L\right|=\vartheta\varepsilon.
$$
</div>
<p>Hier ist $\varepsilon$ die gewünschte Genauigkeitsanforderung, und
$H_L$ liegt auf dem Rande des Stabilitätsgebietes.
$\vartheta$ ist hier ein Sicherheitsfaktor, wie er in gängigen Programmen
basierend auf Runge-Kutta-Verfahren üblicherweise benutzt wird.
$S$ hängt vom Runge-Kutta Verfahren ab.</p>
<p>Mit dieser Analyse erhält man einen ersten Einblick über die Amplitude
des Schwingens.
Dämpfen sich die Störungen in erster Näherung nicht weg, ist also der
Spektralradius einer gewissen Matrix größer als eins, so erwartet man
heftige Ausschläge, und umgekehrt, falls sich Störungen schnell
wegdämpfen, also der Spektralradius eins unterschreitet, so erwartet man
wesentlich geringere Ausschläge um die Ruhelage.
Diese Überlegungen wurden durch <a href="https://dl.acm.org/doi/pdf/10.1145/214408.214424">Hall (1985)</a>
und <a href="https://dl.acm.org/doi/pdf/10.1145/7921.7922">Hall (1986)</a>
empirisch bestätigt.</p>
<p>Sei $\rho$ der Spektralradius dieser hier nicht näher erörterten Matrix.
Es wäre von großem Interesse die Eigenwerte der entsprechenden Matrix für
die zyklischen Verfahren von J.M. Tendler genau zu kennen, insbesondere
das Bild des Randes des Stabilitätsbereiches unter der Abbildung $\rho$,
die sogenannte Hall-Kurve.</p>
<p>Bibliographisch:</p>
<ol>
<li>Hall, George: “<a href="https://dl.acm.org/doi/pdf/10.1145/214408.214424">Equilibrium States of Runge-Kutta Shemes</a>”,
ACM TOMS, Vol 11, No 3, September 1985, pp.289–301</li>
<li>Hall, George: “<a href="https://dl.acm.org/doi/pdf/10.1145/7921.7922">Equilibrium States of Runge-Kutta Shemes: Part II</a>”,
ACM TOMS, Vol 12, No 3, September 1986, pp.183–192</li>
<li><a href="https://www.researchgate.net/scientific-contributions/George-Hall-7244900">George Hall</a></li>
</ol>
<p><strong>4.</strong> Der Shampine-Test kann von seiner grundsätzlichen Konzeption her ein
unrichtiges Ergebnis liefern.
Sei $A$ die Stabilitätsmenge für das Verfahren der höheren Ordnung, und sei
$B$ die Stabilitätsmenge für das Verfahren der niedrigen Ordnung, und sei
$C:=(A\setminus B)\cap\mathbb{C}^-$ die Differenzenmenge, also die Menge
aller derjenigen Punkte aus $\mathbb{C}^-$, die zu $A$ aber nicht zu $B$
gehören.
Wenn nun die Differenzenmenge $C$ nichtleer ist, so könnte die
Schrittweiten- und Ordnungssteuerung eine Schrittweite $h$ vorschlagen,
sodaß die Stauchung oder Streckung $H$ in $C$ liegt und damit das
Verfahren der höheren Ordnung selbst im steifen Gebiete günstiger ist, als
das Verfahren niedriger Ordnung.</p>
<p>Natürlich ist das einmalige Bestehen des Shampine-Testes zur globalen
Klassifikation einer Differentialgleichung als steif oder nicht-steif,
viel zu wenig.
Ist der Shampine-Test jedoch 20-mal bis 50-mal hintereinander erfüllt,
so ist dies ein sehr deutliches Zeichen für Steifheit.
Mußte zudem ebenfalls die Ordnung auch noch runtergefahren werden und sind
schon sehr “viele” Funktionsauswertungen bei niedrigen Ordnungen ($\le4$)
durchgeführt worden, so hat man noch ein zusätzliches Anzeichen für
Vorliegen von Steifheit.</p>
<p><strong>5.</strong> Die gemachten Ausführungen lassen sich sehr gut durch Experimente bestätigen.
Setzt man <code>PMSSOC</code>, so erhält man (analog wie bei <code>\tracingpages=1</code> bei TeX)
einen Ausdruck der Werte <code>down</code>, <code>same</code>, <code>up</code>, <code>euler</code> und <code>bdf2</code>,
und man kann deutlich erkennen, daß wenn <code>euler</code> und <code>bdf2</code> von unten
gegen 1 rücken bei Vorliegen von Steifheit, daß dann auch die höheren
Ordnungen rasch von oben gegen 1 streben und das Programm TENDLER bemüht
ist die Ordnung zu senken.
Zudem zeigt in dieser Situation das $QRP$, daß ein Schalten günstig ist.
Den Ausdruck des $QRP_\nu$ und zahlreicher weiterer Größen, die während der
Korrektoriteration anfallen, kann man sich durch Setzen von <code>PMCVGCE</code>
ausgeben lassen.</p>
<h2>4. Der Shampine-Test im Programm TENDLER<a id=TENDLER_ShampineTest></a></h2>
<blockquote>
<p>The practical man frequently asks, “What <em>is</em> stiffnes?”
There is no simple answer.</p>
<p>L.F. Shampine (1981a)</p>
</blockquote>
<p>Der Shampine-Test berechnet u.U. noch einen zusätzlichen Vergleichswert
zu den Werten <code>down</code>, <code>same</code> und <code>up</code>.
Die generierten Statistiken lassen darauf schliessen, daß dieser Test
einen fast völlig vernachlässigen Einfluß auf das <em>Schalten</em> besitzt.
Sehr wohl ist dieser Test dazu geeignet gewisse zusätzliche Informationen
über die Differentialgleichungen zu erlangen.
Dennoch, seine Berechnung kostet eine Normauswertung und ist damit recht
aufwendig.</p>
<p>Die Berechnungen, die nun durchzuführen sind, gehen wie folgt vor sich.
Der Wert <code>bdf2</code> ist der Schrittweitenfaktor für die Ordnung 2, jedoch
ohne einen Sicherheitsfaktor.</p>
<div class=math>
$$
    \texttt{bdf2} = \begin{cases}
    \sqrt[3]{\displaystyle
        {\texttt{errconst[2]}{\mskip 3mu}\varepsilon\over\left\Vert\nabla^3y\right\Vert}}
        \land \texttt{limit[2][SAME]},  & \text{falls } p\ge4;\\[4pt]
    0,  & \text{falls } p\lt 4
    \end{cases}
$$
</div>
<p>Für die Ordnung 1 wird der Wert <code>euler</code> berechnet nach der Vorschrift</p>
<div class=math>
$$
    \texttt{euler} = \begin{cases}
    \sqrt[2]{\displaystyle
        {\texttt{errconst[1]}{\mskip 3mu}\varepsilon\over\left\Vert\nabla^2y\right\Vert}}
        \land \texttt{limit[1][SAME]},  & \text{falls } p=3;\\[4pt]
        0,  & \text{falls } p\ne3.
    \end{cases}
$$
</div>
<p>Der Wert $\texttt{euler}$ ist der Schrittweitenfaktor für die Ordnung 1 und zwar
wieder ohne Sicherheitsfaktoren.</p>
<p>Die Sicherheitsfaktoren wurden nicht berücksichtigt, um den Test restriktiv
zu gestalten.
Man beachte, daß ja die anderen Schrittweitenfaktoren wie <code>down</code>, <code>same</code>
und <code>up</code>, sämtlich mit einem Sicherheitsfaktor belastet werden.</p>
<p>In einer früheren Version des Programmes TENDLER wurden beide Werte,
somit <code>bdf2</code> und auch <code>euler</code> immer ausgerechnet, falls dies möglich war,
also bei den Ordnungen $p\ge4$.
Da jedoch bei umfangreichen Tests immer</p>
<div class=math>
$$
    \texttt{euler} \lt  \texttt{bdf2}
$$
</div>
<p>galt und daher die
Berechnung von <code>euler</code> überflüssig war, wurde die Berechnungsvorschrift für
den Shampine-Test dahingehend modifiziert, wie sie oben angegeben ist.</p>
<p>Der Shampine-Test gilt nun als bestanden, also die Variable <code>shmptst</code> ist
somit <code>TRUE</code>, falls</p>
<div class=math>
$$
    \texttt{down}\ge\texttt{euler} \qquad\land\qquad \texttt{down}\ge\texttt{bdf2} .
$$
</div>
<p>Ein erstes Anzeichen für Steifheit liegt vor, falls der Shampine-Test
nicht bestanden wurde.
Geschieht dies “häufig”, oder wird über sehr lange Integrationsintervalle
nur eine der niedrigen Ordnungen benutzt, so ist dies ein nachträgliches
Anzeichen dafür, daß die zugrunde liegende Differentialgleichung in dem
betrachteten Intervall wohl als steif zu bezeichnen ist.</p>
<h2>5. Die Auswahl der Ordnung im Programm TENDLER<a id=AuswahlOrdnung></a></h2>
<p><strong>1.</strong> Grundsätzlich gilt für die Sicherheitsfaktoren $\sigma_{pj}$:
Eine Bevorzugung der niedrigen Ordnung wird durch nahe bei 1 liegende Werte
erzielt, eine Vermeidung der höheren Ordnungen durch nahe bei 0.5 liegende
Werte.
Einer Verringerung der Ordnung wird wesentlich größerer Zuspruch zuteil,
als einer Ordnungserhöhung, weil den Verfahren niedrigerer Ordnung
die folgenden beiden sehr erwünschten Eigenschaften zugute kommen:</p>
<ol>
<li>bessere Stabilitätseigenschaften und</li>
<li>geringerer Rechenaufwand.</li>
</ol>
<p>Dieser Effekt gilt insbesondere für die Schrittweiten- und Ordnungssteuerung
im steifen Modus.
Im nicht-steifen Modus ist der Trend zur Bevorzugung von Formeln niedriger
Ordnung nicht so stark ausgeprägt.</p>
<p>Die Sicherheitsfaktoren $\sigma_{pj}$ für die Schrittweiten- und
Ordnungssteuerung sind in den beiden Matrizen <code>stsaffac[][]</code> und
<code>nssaffac[][]</code> abgelegt, und die Sicherheitsfaktoren für die Fehlerkontrolle
sind im Vektor <code>ecsaffac[]</code> gespeichert.
Man beachte, daß eine Veränderung der Ordnung,
bei der Darstellung der Lösung in Form von rückwärtsgenommenen Differenzen,
sehr einfach ist, im Gegensatz zu der Darstellung der Lösung in der
Nordsieck-Darstellung.
Diese Aussage gilt in entsprechender anderer Richtung für das Ändern der
Schrittweite.
In diesem Falle bietet die Nordsieck-Darstellung die größeren Vorteile.</p>
<p><strong>2.</strong> Die eigentliche Ordnungsentscheidung sieht nun wie untenstehend aus.</p>
<div class=math>
$$
    p_{\rm neu} = \cases{p+1, & falls Shampine-Test erfüllt und
        $\texttt{up}\gt \texttt{same}\ge\texttt{down}$;\cr
        p, & falls Shampine-Test erfüllt und $\texttt{same}\ge\texttt{down}$ und
        $\texttt{same}\ge\texttt{up}$;\cr
        p-1, & andernfalls.\cr
    }
$$
</div>
<p>Die vorgeschlagene Ordnung $p_{\rm neu}$ wird als neue Ordnung für
den folgenden Zyklus nur dann ohne weitere Abfragen akzeptiert,
falls der zu dieser Ordnung korrespondierende
Schrittweitenfaktor <code>factor</code>, also einer der Größen <code>down</code>,
<code>same</code> oder <code>up</code>, keine Schrittweitenverkleinerung vorschreibt, also
$\texttt{factor}\ge1$ ist.
Einer Schrittweitenverkleinerung, oder konstanter Schrittweite wird stets
Rechnung getragen.
Es wird an dieser Stelle angenommen, daß einer bevorstehenden
Schrittzurückweisung durch die Fehlerkontrolle in den nächsten Stufen
vorgebeugt werden kann.</p>
<p>Die generierten Statistiken deuten auf eine Bestätigung dieser
Annahme hin: Die Schrittzurückweisungen sind rapide zurückgegangen.
Bei einer Vergrößerung der Schrittweite wird die endgültige Akzeptanz
davon abhängig gemacht, ob auch keine der möglichen Sperren, wie
$\texttt{wait[}p\texttt{]}$ oder $\texttt{problem}$, aktiviert worden waren.
Wird auch dieser letzte Test endgültig bestanden, so wird die
vorgeschlagene Ordnung $p_{\rm neu}$ angenommen und <code>hnext</code> wird</p>
<div class=math>
$$
    \texttt{hnext} = h\cdot\texttt{factor}.
$$
</div>
<p>Die weiter oben beschriebenen Sperrvariablen <code>wait[]</code> und <code>problem</code>, die
schon mehrfach erwähnt wurden, sollen im folgenden genauer und ausführlicher
erklärt werden.</p>
<h2>6. Die beiden Sperren <code>wait[]</code> und <code>problem</code> im Programm TENDLER<a id=Sperren></a></h2>
<p>Für die Sperre <code>problem</code> sind hier lediglich die folgenden Operationen
zulässig:</p>
<table>
<thead>
<tr>
<th>Aktion</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr>
<td>Veränderungen</td>
<td><code>ACTIVATE()</code>, <code>DEACTIVATE()</code></td>
</tr>
<tr>
<td>Abfrage</td>
<td><code>NOTACTIVE()</code></td>
</tr>
</tbody>
</table>
<p>Will man den Sperrmechanismus verfeinern oder verändern, so sind
lediglich die drei obigen möglichen Klassenfunktionen zu modifizieren.</p>
<p>Für die Sperre <code>wait[]</code> sind die folgenden Funktionen die im Sinne von C++ einzig möglichen Klassenfunktionen:</p>
<ol>
<li><code>SETWAIT()</code>,</li>
<li><code>WAITCYCLE()</code> und</li>
<li>die Abfrage <code>WAITISOK()</code></li>
</ol>
<p>Denkbar wäre die Änderung, daß man abgeht von der augenblicklich verwendeten
dualwertigen Logik zu mehrfachwertiger Logik, oder sogar unscharfer Logik
(fuzzy logic).
Dies würde natürlich eine Veränderung der Argumentenlisten der beiden
Funktionen <code>ACTIVATE()</code> und <code>DEACTIVATE()</code> erforderlich machen, die
im Augenblick lediglich einstellig sind.</p>
<p>Benutzt werden diese Operationen von den Unterprogrammen bzw. Funktionen:</p>
<ol>
<li><code>setconv()</code>,</li>
<li><code>ecs()</code>,</li>
<li><code>stssocs()</code>,</li>
<li><code>nsssoc()</code>.</li>
</ol>
<p>Die Funktion <code>setconv()</code> überwacht die erfolgreiche Konvergenz
des Korrektors.
Das Unterprogramm <code>ecs()</code> ist die Fehlerkontrolle
(<strong>e</strong>rror <strong>c</strong>ontrol <strong>s</strong>egment)
und <code>st</code>/<code>ns</code>-<code>ssocs()</code> sind die Schrittweiten- und Ordnungssteuerungen
(<strong>s</strong>tep-<strong>s</strong>ize and <strong>o</strong>rder <strong>c</strong>ontrol <strong>s</strong>egment).</p>
<p>Ist die Ordnung $p&gt;3$ und bleibt sie dort, so müssen mindestens ein oder zwei
Zyklen mit konstanter Schrittweite durchgeführt werden.
Die Fehlerkontrolle <code>ecs()</code> aktiviert mittels <code>ACTIVATE()</code> die
Sperre <code>problem</code> und mittels <code>SETWAIT()</code> die Sperren <code>wait[]</code>, bei
einem Versagen des Fehlertests.
Die Funktion <code>setconv()</code> schließlich aktiviert <code>problem</code>, falls wiederholte,
langsame Konvergenz eine Refaktorisierung der Iterationsmatrix anzeigten.
Eine dann möglicherweise direkt folgende Schrittweitenvergrößerung in der
Schrittweiten- und Ordnungssteuerung wird durch das Aktivieren von
<code>problem</code> unterbunden.
Man behalte im Gesichtsfeld, daß die Iterationsmatrix $W=I-h\gamma J$, ja
von der Schrittweite abhängig ist und somit eine Veränderung der
Schrittweite $h$ die Iterationsmatrix “veralten” lässt.</p>
<p>Zusammenfassend hat man also die Abhängigkeiten:</p>
<div class=math>
$$
    \texttt{ACTIVATE(problem)}, \quad\text{falls}\quad\begin{cases}
        \text{langsame Konvergenz},\\  \text{Fehlerversagen};
    \end{cases}
$$
</div>
<p>und</p>
<div class=math>
$$
    \texttt{SETWAIT(wait)},\quad\text{falls}\quad\begin{cases}
        \text{Fehlerversagen},\\  p\gt p_{\rm sperr}, \text{ jedes zweite oder dritte Mal}.
    \end{cases}
$$
</div>
<h2>7. Die Schrittweiten- und Ordnungssteuerung im Programm DE/STEP<a id=SSOCDESTEP></a></h2>
<blockquote>
<p>Da die Theorie der Ordnungs- und Schrittweitenalgorithmen recht
unvollständig ist, gibt es keine beste Vorgehensweise.
Man muß die Fragmente der vorhandenen Theorie betrachten, die
Folgerungen für den Rest des Codes, Experimente, die die Wirkung
von Änderungen an den Algorithmen untersuchen, und schließlich die
Erfahrung anderer Forscher.</p>
<p><a href="https://www.amazon.de/-/en/Computer-Solution-Ordinary-Differential-Equations/dp/0716704617">L.F. Shampine, M.K. Gordon (1984)</a></p>
</blockquote>
<p><strong>1.</strong> In dem folgenden Abschnitt sollen kurz die grundlegenden Ideen und
Algorithmen, die in dem Programm <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a> von L.F. Shampine und M.K. Gordon,
während der Schrittweiten- und Ordnungssteuerung benutzt werden, erläutert
werden,
siehe <a href="https://www.amazon.de/-/en/Computer-Solution-Ordinary-Differential-Equations/dp/0716704617">Shampine/Gordon (1984)</a>.
Zum Schluß werden Bemerkungen gegeben, zur Übernahme gewisser Teile aus
diesem Segment, in andere Programme.
Stellenweise erscheinen die in dem Programm DE/STEP zur Anwendung gekommenen
Heuristiken genügend universell, sodaß Überlegungen über einen Einsatz
dieser Strategien in anderen Programmen, lohnenswert sind.
Da die Schrittweiten- und Ordnungssteuerung mit seinen Entscheidungen
über die zu wählenden Schrittgrößen und Ordnungen, maßgeblichen Einfluß
auf das Gesamtfunktionieren und die Gesamteffizienz des verwendeten
Programmes haben, machen sich die Sorgfalt und Mühe, die man diesem
Teil des Programmes angedeihen läßt, von selber mehr als bezahlt.</p>
<p>Das Programm DDASSL zur Lösung von differential-algebraischen
Gleichungen der Form $F(t,y,\dot y)=0$, verwendet eine sehr ähnliche
Startegie während der Schrittweiten- und Ordnungssteuerung, wie das
Programm <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a>.</p>
<p>Insbesondere wird versucht die Schrittweite nur zu halbieren, zu
belassen oder zu verdoppeln.
Weiterhin sind die Darstellungen in beiden Programmen gleich:
Beide Programme verwenden modifizierte rückwärtsgenommene Differenzen.</p>
<p>Dabei trifft das Programm DDASSL noch besondere Vorkehrungen, sodaß sich
der führende Koeffizient der Formel nicht ändert.
Diese Maßnahme ist bedeutsam für die Iterationsmatrix beim modifizierten
Newton-Kantorovich Iterationsverfahren.</p>
<p>Anders als in den Programmen DIFSUB, EPISODE, GEAR, <a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a> und LSODA wird
hier zuerst eine geeignete Ordnung $p_{\rm neu}$ ausgewählt und erst
anschliessend eine zu dieser Ordnung passende Schrittweite $h_{\rm neu}$.
Das Programm DE/STEP arbeitet stets im $PECE$-Modus.</p>
<p>Es wird also kein Konvergenztest durchgeführt, und dies erspart
zahlreiche Normauswertungen und zwar mindestens so viele, wie Schritte
gemacht werden, häufig werden dadurch natürlich mehr Normauswertungen
vermieden.
Die Überlegungen bzgl. der Schrittweiten- und Ordnungssteuerung beruhen
auf der Annahme, daß mit konstanter Schrittweite gerechnet wurde.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://www.researchgate.net/profile/Lawrence-Shampine">Lawrence F. Shampine</a></li>
<li><a href="https://zbmath.org/authors/gordon.marilyn-k">Marylin K. Gordon</a></li>
</ol>
<p><strong>2.</strong> Der $PECE$-Zyklus wird nun wie folgt durchlaufen:
Nach $P$ und $E$, wird geprüft, ob die Ordnung $p$ erniedrigt werden
kann.
Es wird an dieser Stelle nichts über eine Erhöhung der Ordnung oder einer
Veränderung der Schrittweite entschieden, sondern lediglich eine
Verminderung oder Beibehaltung der aktuellen Ordnung wird in Betracht
gezogen.
Die Regel zur Auswahl einer neuen Ordnung (höchstens vermindert oder
belassen) ist:</p>
<div class=math>
$$
    \hat p_{\rm neu} = \cases{
        p-1, & falls $\max(\texttt{erkm1},\texttt{erkm2})\le\texttt{erk}$ und $p\ge3$;\cr
        1, & falls $\texttt{erkm1}\le{1\over2}\texttt{erk}$ und $p=2$;\cr
        p, & sonst.\cr}
$$
</div>
<p>Für eine Erniedrigung der Ordnung $p$ wird also verlangt, daß sowohl die
um eins niedrigere Ordnung <code>erkm1</code> günstiger ist, als auch zusätzlich, daß
die um zwei tiefere Ordnung <code>erkm2</code> ebenso noch besser ist, als die aktuelle
Ordnung mit <code>erk</code>.
Da bei der Ordnung $p=2$ eine solche Tendenz über zwei niedrigere
Ordnungen nicht verfügbar ist, verlangt man, daß die um eins niedrige Ordnung
<code>erkm1</code> mindestens halb so klein, oder noch kleiner ist, als die aktuell
benutzte Ordnung <code>erk</code>.</p>
<p>Nachdem nun die obigen Tests durchgeführt wurden und u.U. eine um eins
kleinere Ordnung $p$ vorschlugen, wird der Fehlertest vollzogen.
Man befindet sich hier immer noch hinter $P$ und $E$, aber noch vor
$C$ und $E$.
Der Fehlertest entscheidet, ob der Schritt wiederholt werden muß.
Außer in Notfällen, wird hier lediglich die Schrittweite $h$ halbiert.
Ein Notfall liegt vor, bei wiederholtem Nichtbestehen des Fehlertestes.
Wird der Fehlertest nicht bestanden, so werden die Stufen $C$ und $E$
nicht durchlaufen.</p>
<p>Ist der augenblickliche Schritt durch die Fehlerkontrolle akzeptiert
worden, so folgen nun $C$ und $E$; es wird nun also korrigiert und die
Schlußauswertung der Funktion $f$ wird durchgeführt.
Danach wird schnell geprüft, ob schon eine Entscheidung über eine
Ordnungsreduktion gefällt wurde---w.o. angegeben.
Die endgültige Entscheidung für eine neue Ordnung für den folgenden
Schritt, geschieht nach der Regel</p>
<div class=math>
$$
    p_{\rm neu} = \cases{
        p, & falls keiner der nachstehenden Fälle;\cr
        2, &falls $\texttt{erkp1}\lt {1\over2}\texttt{erk}$ und $p=1$ und $\hat p_{\rm neu}=p$;\cr
        p-1, &falls $\texttt{erkm1}\le\min(\texttt{erk},\texttt{erkp1})$ oder $\hat p_{\rm neu}=p-1$;\cr
        p+1, &falls $\texttt{erkp1}\lt \texttt{erk}\lt \max(\texttt{erkm1},\texttt{erkm2})\land2\le p\le11\land n_s\le k+1$.\cr
   }
$$
</div>
<p>Die Ordnung $p$ wird also endgültig erniedrigt, falls dies vorher schon
bei der Bestimmung von $\hat p_{\rm neu}$ feststand, oder falls die um
eins niedrigere Ordnung <code>erkm1</code> sowohl besser ist, als die aktuelle
Ordnung <code>erk</code>, als auch zugleich besser ist als die um eins höhere Ordnung
<code>erkp1</code>.
Die Ordnung $p$ wird erhöht, falls die maximal mögliche Ordnung 12 noch
nicht erreicht wurde und falls eine Ungleichungskette der Form</p>
<div class=math>
$$
    \texttt{erkp1} \lt  \texttt{erk} \lt  \max(\texttt{erkm1},\texttt{erkm2})
$$
</div>
<p>vorliegt.
Außerdem müssen dann mindestens $(k+1)$ Schritte mit konstanter
Schrittweite durchgeführt worden sein.
Die Zählung der Schrittweite mit konstantem Betrag, wird mit Hilfe des
Zählers <code>ns</code> vorgenommen.</p>
<p>Ist die Ordnung vorher gleich eins, so kann eine Tendenz über mehrere
Ordnungen nicht überprüft werden und es wird dann verlangt, daß die um
eins höhere Ordnung mindestens halb so klein oder noch kleiner ausfällt.</p>
<p><strong>3.</strong> Ist nun die neue Ordnung $p$ aufgrund der obigen Überlegungen bestimmt
worden, so wird jetzt die zu dieser Ordnung $p$ passende Schrittweite
$h$ berechnet.
Diese Berechnungen werden also ganz zum Schluß durchgeführt, also nach
$PECE$.
Als Hilfsgröße sei für das weitere erklärt der Schrittweitenfaktor $r$ mit</p>
<div class=math>
$$
    r = \sqrt[p+1]{\varepsilon/2 \over \texttt{erk}}.
$$
</div>
<p>Die neue Schrittweite $h_{\rm neu}$ wird nun wie folgt berechnet:</p>
<div class=math>
$$
    h_{\rm neu} = \cases{
        2h, & falls $r\gt 2$ oder Startphase aktiv;\cr
        h, & falls $1\le r\lt 2$;\cr
        \max\left[{1\over2},\min({9\over10},r\right]h, & sonst.\cr
   }
$$
</div>
<p>Die Startphase wird verlassen wenn ein Schritt zurückgewiesen wurde,
die Ordnung erniedrigt wurde, oder die maximal mögliche Ordnung erreicht
wurde.
Zur Vermeidung des Rechnens an der Grenze der Maschinengenauigkeit wird
tatsächlich weitergerechnet mit der Schrittweite</p>
<div class=math>
$$
    h_{\rm neu}\gets\max(4u\left|t\right|,h_{\rm neu}).
$$
</div>
<p>$u$ ist hierbei die kleinstmögliche Zahl, die auf dem Rechner noch
dargestellt werden kann, sodaß $1+u&gt;1$.</p>
<p><a href="https://www.netlib.org/ode/ode.f">DE/STEP</a> ist eines der Programme, welches dem Rechnen nahe der
Grenzgenauigkeit große Aufmerksamkeit widmet.</p>
<p>Kann die Schritweite im nächsten Schritt verdoppelt werden, fällt also
der Schrittweitenfaktor $r$ größer als zwei aus, so wird die Schrittweite
$h$ auch tatsächlich verdoppelt, jedoch sonst nicht weiter vergrößert.
Man beachte, daß das Programm DE/STEP die Schrittweiten höchstens
verzweifachen kann.</p>
<p>Gilt nicht $r&gt;2$ und ist $\texttt{erk}\le{1\over2}\varepsilon$, man zielt hier
also auf doppelt so genaue Ergebnisse, so wird die Schrittweite $h$
derart belassen, wie sie ist.
Im anderen Falle wird sie schlimmstenfalls halbiert, aber mindestens
jedoch um 10% herabgesetzt.</p>
<p>Die Schrittweitenänderungen sind in diesem Lichte recht dual: man
verdoppelt, belässt oder halbiert die Schrittweite.
Es sei nocheinmal betont, daß wenn die Schrittweite $h$ nicht
verdoppelt wird, sie überhaupt in keiner anderen Weise vergrößert wird.
Diese Entscheidung begünstigt konstante Schrittweitenfolgen, welche für
lineare Mehrschrittverfahren, in der Darstellung mit rückwärtsgenommenen
Differenzen, besonders vorteilhaft ist.
Sehr wohl wird jedoch relativ häufig die Ordnung $p$ verändert.
Ein Wechsel der Ordnung ist für ein lineares Mehrschrittverfahren
basierend auf einer Differenzendarstellung äußerst einfach und äußerst
rechengünstig.</p>
<p><strong>4.</strong> Wie schon mehrfach geschehen, sei hier abermals darauf hingewiesen, daß
die zahlreich auftretenden Minima, Maxima und Sicherheitsfaktoren wie
$\varepsilon/2$, $9\over10$ und dergleichen, nicht etwa einem Beweise
entspringen, sondern heuristischen Ursprunges sind.
Diese Überlegungen basieren auf Erfahrungen und Plausibilitätsüberlegungen.
Ihre Bestätigung erhalten sie durch gutes, sicheres und effizientes
Funktionieren des resultierenden Programmes.</p>
<p>Es handelt sich allerdings nicht um ad hoc Maßnahmen, sondern um
Überlegungen, zu denen es triftige Hinweise gibt.
An sehr speziellen Testproblemen kann ihre Wirksamkeit dargelegt werden.</p>
<p>Wollte man die Schrittweiten- und Ordnungssteuerungs-Strategien, wie sie in
dem Programm <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a> verwendet werden, w.o. beschrieben, übernehmen als
Schrittweiten- und Ordnungssteuerungsstrategie für andere Programme,
so ist zu beachten, daß eine so duale Schrittweitenauswahl, die
Iterationsmatrix $W=I-\gamma J$ ebenfalls recht abrupt ändert.
Es ist also so, daß eine glattere und langsamere Anpassung der
Schrittweite $h$ an den Verlauf der Lösung, bei steifen
Differentialgleichungen, bei denen die impliziten Formeln i.a. mit Hilfe
eines modifizierten Newton-Kantorovich Iterationsverfahren gelöst werden,
Vorteile haben kann, mit Hinblick auf die Iterationsmatrix $W$.
Darum erscheint eine Verwendung der Nordsieck-Darstellung, wie sie bei
dem Programm LSODA verwendet wird, eine günstige Wahl zu sein.</p>
<p>Zumindestens wäre der Hindmarsh-Test entscheidend abzuändern, wenn man
eine Schrittweiten- und Ordnungssteuerungsstrategie wie in dem Programm
DE/STEP, verwenden wollte.
Allerdings zeigt das gute Funktionieren des Programmes DDASSL, daß der
Aspekt der langsamen Änderung der Iterationsmatrix bzgl. der
Schrittweite $h$, nicht von alles entscheidender Bedeutung ist.</p>
<p>Die anderen Überlegungen, die in dem Programm DE/STEP zum Tragen kommen,
also Bestimmung der Ordnung vor der Bestimmung der Schrittweite und die
Notwendigkeit einer Tendenz im Verhalten von Termen, sind überlegenswerte
Ansatzpunkte auch für andere Programme.
Das Programm TENDLER übernahm die Gedanken der Tendenz genau von dem
Programm <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a>.</p>
<p>Auch die Möglichkeit der Verkleinerung der Schrittweite, selbst nach
erfolgreichem Schritt, haben Parallelen zwischen dem Programm DE/STEP und
TENDLER.
<del>Die Programme <a href="https://dl.acm.org/doi/10.1145/356502.356499">STINT</a>,
<a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a> und LSODA können die Schrittweite nur dann
überhaupt verkleinern, bei einem Fehlschlag oder bei mehrfachem
Konvergenzversagen.</del></p>
<p><strong>5.</strong> Um auch einen Überblick über die Größe der Argumentenliste des
Programmes DE/STEP zu erhalten, seien diese Werte hier vermerkt:</p>
<table>
<thead>
<tr>
<th>Programm</th>
<th align="right">Anzahl Argumente</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ode</code></td>
<td align="right">10</td>
</tr>
<tr>
<td><code>de</code></td>
<td align="right">33</td>
</tr>
<tr>
<td><code>root</code></td>
<td align="right">7</td>
</tr>
<tr>
<td><code>step</code></td>
<td align="right">16</td>
</tr>
<tr>
<td><code>intrp</code></td>
<td align="right">9</td>
</tr>
</tbody>
</table>
<p>Das Programm DE/STEP setzt sich also aus lediglich 4 Unterprogrammen
zusammen, von denen das Unterprogramm <code>de</code> die Hauptlast der algorithmischen
Leistung vollbringt.
Wie allgemein üblich handelt sich bei allen hier überhaupt erwähnten
Programmen um Unterprogrammsammlungen und nicht etwa um selbstständige,
autonom ablauffähige Programme.
Erst durch ein vom Benutzer für sein spezielles Problem angepasstes
Aufrufprogramm, werden die erwähnten Unterprogrammsammlungen genutzt.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/03-10-tendler-5-die-fehlerkontrolle</link>
		<guid>https://eklausmeier.goip.de/blog/2026/03-10-tendler-5-die-fehlerkontrolle</guid>
		<title>TENDLER: 5. Die Fehlerkontrolle</title>
		<category>mathematics</category>
		<pubDate>Tue, 10 Mar 2026 21:00:00 +0100</pubDate>
		<description><![CDATA[
<p>Fortsetzung der TENDLER Programmbeschreibung.</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-16-tendler-1-grobaufbau-und-prinzipielle-ueberlegungen">TENDLER: 1. Grobaufbau und prinzipielle Überlegungen</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms">TENDLER: 2. Benutzung des Programmes</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-18-tendler-3-der-praediktor">TENDLER: 3. Der Prädiktor</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-30-tendler-4-die-korrekturiteration">TENDLER: 4. Die Korrektoriteration</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2026/03-10-tendler-5-die-fehlerkontrolle">TENDLER: 5. Die Fehlerkontrolle</a></li>
</ol>
<hr>
<p>Inhalt.</p>
<ul>
<li><a href="#Abbruchfehler">1. Abbruch- und Diskretisierungsfehler</a></li>
<li><a href="#Beziehung">2. Einfache Beziehung zwischen exakten und berechneten Werten</a></li>
<li><a href="#Phase1">3. Die Phase 1 der Fehlerkontrolle</a></li>
<li><a href="#Phase2">4. Die Phase 2 der Fehlerkontrolle</a></li>
<li><a href="#Fehlerfaktoren">5. Die verwendeten Fehlerfaktoren im Programm TENDLER</a></li>
<li><a href="#ProgrammnaheBeschr">6. Programmnahe Beschreibung der Fehlerkontrolle</a></li>
</ul>
<blockquote>
<p>However, we can say that if you are using a 12-line solver for
differential equations on anything bigger than a hand calculator,
you should consider using one of the cited packages instead.
Recently, we have noted that there is commercially available
“software” for differential equations with no error control,
a user-specified fixed step size, no warning messages, and so on.
We strongly advise against using such programs, even on a
personal computer. The reasons are straightforward.
For all but trivial problems, such programs cannot be sufficient
reliable for accurate computational results.</p>
<p><a href="https://doi.org/10.1016/0021-9991(87)90001-5">G.D. Byrne, A.C. Hindmarsh (1987)</a></p>
</blockquote>
<p>In diesem Segment wird nun versucht zu überprüfen, ob die berechneten
Näherungen die geforderte Genauigkeitsbedingung, die der Programmbenutzer
angibt, erfüllen.
Es wird an dieser Stelle deutlich werden, warum es günstig ist, eine
Darstellung der berechneten Lösungen in Form von rückwärtsgenommenen
Differenzen zu wählen.
Sie dienen als Näherungen für entsprechend hohe Ableitungen, welche
seinerseits zur Schätzung des lokalen Fehlers herangezogen werden.</p>
<p>Es folgt also die Beschreibung der Fehlerkontrolle.
Die Fehlerkontrolle wird nach der Korrektoriteration ausgeführt.
Dabei werden die verwendete Heuristik und weitere Einzelheiten angegeben.
Die Fehlerkontrolle ist in zwei Phasen aufgeteilt.
Jede Phase für sich fällt Entscheidungen über das Fortrechnen.
Die Fehlerkontrolle kann entweder nicht bestanden oder passiert werden.
In Abhängigkeit dieser Entscheidung müssen weitere Entscheidungen getroffen
werden, wie weiterverfahren werden soll.</p>
<p>Im Falle, daß die Fehlerkontrolle <em>nicht</em> bestanden wurde, stehen einem zwei
massgebliche Parameter zur Verfügung.
Dies ist zum einen die Ordnung $p$ und zum anderen die Schrittweite $h$.</p>
<p>Zuerst wird versucht durch Verändern der Schrittweite dem
Fehlertestversagen zu begegnen.
Erst nach mehrmaligen Nichtbestehen wird die Ordnung ebenfalls verändert.</p>
<p>Bei einem Programm basierend auf zyklischen Formeln, sind nach einem
Fehlertestversagen mehrere Fortsetzungsmöglichkeiten denkbar.
Zum einen könnte nur eine einzige Stufe wiederholt werden, oder es könnte
der gesamte Zyklus wiederholt werden.
Beide Möglichkeiten haben ihre Vor- und Nachteile.
Im Programm TENDLER wird die letztere Möglichkeit gewählt.
Statistiken belegen, daß die Furcht vor dem Wiederholen ganzer Zyklen
nicht gerechtfertigt ist.
Erfahrungsmaterial spricht nicht eindeutig gegen vielstufige Zyklen,
allerdings auch nicht eindeutig für sie.</p>
<p>Ein paar Worte zum Begriff “Fehlerkontrolle” und “Konvergenztest”.
Die weiter unten zu beschreibende “Fehlerkontrolle” kann nicht wirklich
globale Fehler kontrollieren, zumindestens nicht in jedem Falle.
Sie kann also nicht Fehler, die entstehen durch Ersetzung des
kontinuierlichen Problems (Differentialgleichungsanfangswertproblem) durch
ein diskretes Problem (implizite Differenzengleichung) genau quantifizieren.
Etwas korrekter wäre von einem Versuch der Schätzung zu sprechen.
Den Ersetzungsfehlern überlagern sich weitere Fehler, wie z.B. Rundungsfehler,
Iterationsfehler, Startfehler, etc.
Mit dem Begriff Konvergenztest verhält es sich ähnlich.
Der Konvergenztest ist kein Test im Sinne eines Majorantenkriteriums,
Verdichtungskriteriums oder dergleichen, sondern eine Entscheidung über den
Abbruch der Iteration, also die ausdrückliche Finitisierung eines
unendlichen Vorganges.</p>
<p>Bibliographisch.</p>
<ol>
<li><a href="https://www.mathgenealogy.org/id.php?id=66">George Dennis Byrne</a></li>
<li><a href="https://history.siam.org/pdfs2/Hindmarsh_returned_%20SIAM_copy.pdf">Alan C. Hindmarsh</a> (*1942)</li>
<li>Byrne, George D. und Hindmarsh, Alan C.:
“<a href="https://doi.org/10.1016/0021-9991(87)90001-5">Stiff ODE Solvers: A Review of Current and Coming Attractions</a>”,
Journal of Computational Physics, Vol 70, No 1,
May 1987, pp.5—62</li>
</ol>
<h2>1. Abbruch- und Diskretisierungsfehler<a id=Abbruchfehler></a></h2>
<p>Die Definition des lokalen Fehlers sind in <a href="https://www.amazon.de/Solving-Ordinary-Differential-Equations-Computational/dp/3540566708">Hairer/Wanner/Nørsett (1987)</a>,
<a href="https://doi.org/10.1007/BF01389876">Albrecht (1985)</a> und in
<a href="https://www.amazon.de/Grundlagen-Numerischen-Mathematik-Bd-Naturwissenschaften/dp/3400004162">Reimer (1982)</a>
jeweils verschieden, obwohl natürlich letztendlich sinnentsprechend.
Gelegentlich wird auch zwischen den beiden Begriffen Abbruch- und
Diskretisierungsfehler nicht unterschieden, oder nur einer der beiden
eingeführt.
Die hier beiden festgelegten Begriffe sind konzeptionell verschieden, führen
jedoch unter milden Voraussetzungen zu gleichen Ergebnissen.</p>
<p><strong>1.</strong> Sei</p>
<div class=math>
$$
    \varphi\colon\mathbb{R}^{n\ell}\times(\mathbb{R}^{n\ell})^k \to \mathbb{R}^{n\ell}
$$
</div>
<p>eine vorerst nicht weiter eingeschränkte Vektorfunktion mit $k+1$
Vektorargumenten.
$n$ erinnere hier an eine von außen kommende Dimension, und $\ell$ erinnere
an eine ebenfalls von außen induzierte Stufenzahl.
Betrachtet werde die Differenzengleichung</p>
<div class=math>
$$
    \varphi(u_{\nu+1},u_\nu,\ldots,u_{\nu-k+1}) = 0, \qquad \nu=k,k+1,\ldots,
$$
</div>
<p>wobei die $u_0,\ldots,u_k$ vorgegeben gedacht seien.
$u_k$ berechnet sich als Lösung von $\varphi(u_k,u_{k-1},\ldots,u_0)=0$,
$u_{k+1}$ berechnet sich als Lösung von
$\varphi(u_{k+1},u_k,\ldots,u_1)=0$, u.s.w.
Die eindeutige Auflösbarkeit sei von $\varphi$ im folgenden stets, ohne
ausdrückliche Betonung, vorausgesetzt.
Dies ist beispielsweise erfüllt, wenn $\varphi$ bzgl. der ersten
Vektorkomponente kontrahierend ist; ein häufig auftretender Spezialfall.</p>
<p><strong>2. Beispiele:</strong>  (1) Implizites Eulerverfahren. Hier ist</p>
<div class=math>
$$
    \varphi(u_{m+1},u_m) = u_{m+1} - u_m - h f(u_{m+1}).
$$
</div>
<p>(2) Zyklische lineare Mehrschrittverfahren. Hier wäre</p>
<div class=math>
$$
    \varphi(u_{m+1},u_m,\ldots,u_{m-k+1})
    = \sum_{i=0}^k A_i u_{m+1+i-k} - h B_i \dot u_{m+1+i-k}.
$$
</div>
<p><strong>3.</strong> Sei $y$ eine beliebige Kurve des $\mathbb{R}^{n\ell}$.
Die Werte $u_m$ sollen $y(t_m)$ möglichst gut annähern.
Die Differenz von $u_m$ und $y(t_m)$ ist der globale Fehler, oder, wenn man
betonen will, daß man $y$ diskret annähert, der globale Diskretisierungsfehler,
wobei man dann $\varphi$ als Diskretisierungsverfahren oder Differenzenverfahren
bezeichnet.
Der globale Fehler soll klein sein.
Diese Forderungen führt zu Bedingungen an $\varphi$.
Jedoch ist dieser globale Fehler schwer bestimmbar, mindestens so schwer
bestimmbar wie die Kurve $y(t)$ selber.
Einfacher zu bestimmen sind lokaler Abbruchfehler und lokaler
Diskretisierungsfehler, zumindestens Anschmiegungen entsprechend hoher
Ordnungen.</p>
<p><strong>4. Definition:</strong>  Sei $y(t)$ eine beliebige aber feste Kurve,
z.B. Lösung des Anfansgswertproblems $\dot y=f(t,y)$, $y(t_0)=y_0$.</p>
<p>(1) Sei $u_{m+1}$ Lösung von $\varphi(u_{m+1},u_m,\ldots,u_{m-k+1})=0$
($\forall m\ge k$).
Dann heißt</p>
<div class=math>
$$
    d(t_{m+1},y,h) := u_{m+1} - y(t_{m+1})
$$
</div>
<p>globaler Diskretisierungsfehler an der Stelle $t_{m+1}$ für das
Differenzenverfahren $\varphi$.</p>
<p>(2) Das Residuum</p>
<div class=math>
$$
    r(t_{m+1},y,h) := \varphi(y(t_{m+1}),y(t_m),\ldots,y(t_{m-k+1}))
    \qquad (m\ge k)
$$
</div>
<p>heißt lokaler Abbruchfehler an der Stelle $t_{m+1}$ für das
Differenzenverfahren $\varphi$.</p>
<p>(3) Sei $u_{m+1}$ Lösung von $\varphi(u_{m+1},y(t_m),\ldots,y(t_{m-k+1}))=0$.
Dann heißt die Differenz</p>
<div class=math>
$$
    s(t_{m+1},y,h) := u_{m+1} - y(t_{m+1})
$$
</div>
<p>lokaler Diskretisierungsfehler an der Stelle $t_{m+1}$ für das
Differenzenverfahren $\varphi$.</p>
<p><strong>5. Bemerkung:</strong>  Beim lokalen Abbruchfehler werden in alle $k+1$
Argumente von $\varphi$, die exakten Werte $y(t_i)$ eingesetzt und das
entsprechende Residuum heißt lokaler Abbruchfehler.
Beim lokalen Diskretisierungsfehler nimmt man für die letzten $k$ Argumente
von $\varphi$ die exakten Kurvenwerte und der sich dann ergebende Lösungswert
der Differenzengleichung wird mit dem exakten Wert der Kurve verglichen.
Der lokale Diskretisierungsfehler ist ein spezieller globaler
Diskretisierungsfehler, nämlich derjenige, der zusätzlich die Bedingung
$\varphi(u_{m+1},y(t_m),\ldots,y(t_{m-k+1}))=0$ erfüllt, also ein globaler
Fehler unter Nebenbedingungen.</p>
<p>Bei einfachen Zusatzvoraussetzungen an $\varphi$, sind die Bedingungen (2)
und (3) zueinander gleichwertig.</p>
<p><strong>6. Satz:</strong>  Voraussetzungen: Für</p>
<div class=math>
$$
    \varphi(\xi,v_1,\ldots,v_k) = \pmatrix{
        \varphi^1(\xi,v_1,\ldots,v_k)\cr
        \vdots\cr
        \varphi^{n\ell}(\xi,v_1,\ldots,v_k)\cr
    } \in \mathbb{R}^{n\ell}, \qquad
    \xi,v_1,\ldots,v_k\in\mathbb{R}^{n\ell},
$$
</div>
<p>sei $\varphi_1'$ die Jacobimatrix von $\varphi$ bzgl. des ersten Vektorargumentes,
wobei jede Zeile der Jacobimatrix an verschiedenen Stellen ausgewertet wird, also</p>
<div class=math>
$$
    \varphi_1'(\boldsymbol{\eta},v_1,\ldots,v_k) = \pmatrix{
        D_1 \varphi^1(\eta_1,v_1,\ldots,v_k)\cr
        \vdots\cr
        D_1 \varphi^{n\ell}(\eta_{n\ell},v_1,\ldots,v_k)\cr
    } \in \mathbb{R}^{n\ell\times n\ell}, \qquad
    \eta_1,\ldots,\eta_{n\ell},v_1,\ldots,v_k\in\mathbb{R}^{n\ell},
$$
</div>
<p>wobei $D_1$ Ableitung nach dem ersten Vektorargument bezeichnet, also</p>
<div class=math>
$$
    D_1 \varphi^i(\xi,v_1,\ldots,v_k) = \left(
        {\partial\varphi^i\over\partial\xi_1}, \ldots, {\partial\varphi^i\over\partial\xi_{n\ell}}
    \right) = \nabla_\xi \varphi^i, \qquad \xi_1,\ldots,\xi_{n\ell}\in\mathbb{R}.
$$
</div>
<p>Für $u_{m+1}$ gelte $\varphi(u_{m+1},y(t_m),\ldots,y(t_{m-k+1}))=0$, und
$\varphi_1'$ sei beschränkt und invertierbar für $h\to0$.</p>
<p>Behauptung:$\qquad r={\cal O}(h^{p+1}) \quad\iff\quad s={\cal O}(h^{p+1})$.</p>
<p><em>Beweis:</em>  Es gilt</p>
<div class=math>
$$
\eqalign{
    0 &= \varphi(u_{m+1},y(t_m),\ldots,y(t_{m-k+1}))\cr
      &= \varphi(y(t_{m+1}),y(t_m),\ldots,y(t_{m-k+1}))
         + \varphi_1'(\boldsymbol{\eta},y(t_m),\ldots,y(t_{m-k+1}))
            \left(u_{m+1} - y(t_{m+1})\right),\cr
}
$$
</div>
<p>woraus wegen der Beschränktheit und Invertierbarkeit für $\varphi_1'$ die
Behauptung folgt.
    ☐</p>
<p><strong>7. Corollar:</strong>  Für das zyklische lineare Mehrschrittverfahren</p>
<div class=math>
$$
    \varphi(u_{m+1},u_m,\ldots,u_{m-k+1})
    = \sum_{i=0}^k A_i u_{m+1+i-k} - h B_i \dot u_{m+1+i-k}
$$
</div>
<p>gilt für beliebige feste $\mu$:</p>
<div class=math>
$$
\eqalign{
    & r(t_{m+1},y,h) = (c_{p+1}\otimes I) y^{p+1}(t_\mu) h^{p+1} + {\cal O}(h^{p+1})\cr
    \iff& s(t_{m+1},y,h) = (A_k^{-1}c_{p+1}\otimes I) y^{p+1}(t_\mu) h^{p+1} + {\cal O}(h^{p+1}).\cr
}
$$
</div>
<p>Deutet man $c_{p+1}$ als Vektor der Fehlerfaktoren der Stufen, so besagt das
Resultat, wie man vom lokalen Abbruchfehler in den lokalen
Diskretisierungsfehler umrechnet, nämlich einfach durch Multiplikation mit
$A_k^{-1}$, zumindestens bis auf Anschmiegungen der Ordnung $p+2$ in $h$.
Im Falle $\det A_k=0$, also $\varphi_1'$ nicht invertierbar, gilt der Satz
nicht mehr so ohne weiteres.</p>
<p><strong>8. Definition:</strong>  Sei $y$ ein beliebige Kurve des $\mathbb{R}^{n\ell}$.</p>
<p>(1) Das Verfahren $\varphi$ heißt (polynomial) konsistent mit der
(polynomialen) Konsistenzordnung $p$ genau dann, wenn</p>
<div class=math>
$$
    r(t_{m+1},\mathbb{P}_\mu,h) = 0, \quad\hbox{ für } \mu=0,1,\ldots,p, \quad \forall m\ge k.
$$
</div>
<p>Äquivalent hierzu ist unter der Bedingung $\varphi_1'$ beschränkt und invertierbar,
daß $s(t_{m+1},\mathbb{P}_\mu,h)=0$.</p>
<p>(2) Das Verfahren $\varphi$ heißt (polynomial) konvergent der (polynomialen)
Konvergenzordnung $p$ genau dann, wenn
$d(t_{m+1},\mathbb{P}_\mu,h)=0$, für $\mu=0,1,\ldots,p$, $h\to0$.</p>
<p>Die Betonung auf polynomialer Konsistenz und polynomialer Konvergenz beruht
darauf, daß es auch andere Konsistenz- und Konvergenzarten gibt, z.B. basierend
auf trigonometrischen Funktionen oder anderen Funktionensystemen.</p>
<p>Der nächste Abschnitt ist im großen und ganzen nichts weiter als eine
längliche Fassung des obigen Corollars.</p>
<h2>2. Einfache Beziehung zwischen exakten und berechneten Werten<a id=Beziehung></a></h2>
<p><strong>1.</strong> Zu einem $\ell$-stufigen Zyklus mit $k$ Startwerten sei betrachtet</p>
<div class=math>
$$
    L(t_{m\ell},y,h) := \sum_{i=0}^\kappa \left[(A_i\otimes I)Y_{m+i} -
        h(B_i\otimes I)\dot Y_{m+i}\right]
$$
</div>
<p>mit</p>
<div class=math>
$$
    A_i = \pmatrix{
        \alpha_{1,(i-\kappa)\ell+1} & \ldots & \alpha_{1,(i-\kappa)\ell+\ell}\cr
        \vdots & \ddots & \vdots\cr
        \alpha_{\ell,(i-\kappa)\ell+1} & \ldots & \alpha_{\ell,(i-\kappa)\ell+\ell}\cr
    }, \qquad i=0,\ldots,\kappa
$$
</div>
<p>und</p>
<div class=math>
$$
    Y_{m+i} = \pmatrix{
        y(t_{(m+i-\kappa)\ell+1})\cr
        \vdots\cr
        y(t_{(m+i-\kappa)\ell+\ell})\cr
    },
    \qquad i=0,\ldots,\kappa.
$$
</div>
<p>$\dot Y_{m+i}$ enthält die entsprechenden Ableitungen.
Die $B_i$ sind ganz analog wie die $A_i$.
Hierbei sind</p>
<div class=math>
$$
    Y_{m+i}\in\mathbb{R}^{n\ell}, \qquad A_i,B_i\in\mathbb{R}^{\ell\times\ell},
        \qquad  I = \mathop{\rm diag}(1,\ldots,1)\in\mathbb{R}^{n\times n}.
$$
</div>
<p>Es ist $\kappa = \lceil k/\ell \rceil$, mit der Anzahl der Startwerte $k$.
Es ist</p>
<div class=math>
$$
    \alpha_{ij} = \beta_{ij} = 0, \qquad j \lt  -k+1, \quad i=1,\ldots,\ell .
$$
</div>
<p>Die Assoziation von $L$ gemäß obiger Festlegung mit $t_{m\ell}$ besitzt eine
gewisse Freizügigkeit.
Ein fester Wert $t$ innerhalb des Intervalles $[t_{m\ell+1}, t_{m\ell+\ell}]$
beispielsweise, wäre ebenfalls genauso brauchbar.</p>
<p>Sei $L=(L_1,\ldots,L_\ell)$, mit $L_i\in\mathbb{R}^n$ $(i=1,\ldots,\ell)$, so
ist hiermit</p>
<div class=math>
$$
    L_i(t_{m\ell},y,h) =
    \sum_{j=-k+1}^{\ell} \left[ \alpha_{ij}y(t_{m\ell+j})
        - h\beta_{ij}\dot y(t_{m\ell+j}) \right].
$$
</div>
<p><strong>2.</strong> Ist die Funktion $y$ Lösung der Differentialgleichung</p>
<div class=math>
$$
    \dot y = f(t,y), \qquad y(t_0) = y_0 \in \mathbb{R}^n,
$$
</div>
<p>so drückt $L_i$ im Falle $L_i(t_{m\ell},y,h)\ne0$ aus, in wie weit die
exakte Lösung der Differentialgleichung die $i$-te Stufe nicht erfüllt.
Man findet jetzt durch Taylorentwicklung aller $y(t_{m\ell+j})$ mit der
Entwicklungsstelle $t_{m\ell+\hat\imath}$, daß</p>
<div class=math>
$$
    L_i(t_{m\ell},y,h)
    = c_{i,p_i+1} y^{(p_i+1)}(t_{m\ell+\hat\imath})h^{p_i+1} + {\cal O}(h^{p_i+2}),
$$
</div>
<p>wobei die $c_{ij}$ gegeben sind durch</p>
<div class=math>
$$
    c_{ij} = \sum_{\nu=-k+1}^{\ell} \left[
      {(\nu-\hat\imath)^j \over j!}\alpha_{i\nu} - {(\nu-\hat\imath)^{j-1} \over (j-1)!}\beta_{i\nu}
      \right], \qquad j\gt 0,
$$
</div>
<p>und für $j=0$ durch</p>
<div class=math>
$$
    c_{i0} = \sum_{\nu=-k+1}^{\ell} \alpha_{i\nu}, \qquad j=0.
$$
</div>
<p>Die Koeffizienten $c_{ij}$ nehmen also Vorzeichen und Fakultäten der
Taylorentwicklung in sich auf.
Man beachte, daß alle Stufen der Tendlerschen Zyklen jeweils die gleiche
Konsistenzordnung haben, daher erscheint letztendlich für jedes
$i\in\{1,\ldots,\ell\}$ die gleiche $h$-Potenz, also schließlich $p\equiv p_i$.</p>
<p>Die $c_{ij}$ für $0\le j\le p_i$ hängen nicht von $\hat\imath$ ab, und
$\hat\imath$ muß nicht notwendigerweise ganzzahlig sein.
Die $c_{ij}$ für $j&gt;p_i$ können von $\hat\imath$ abhängen.</p>
<p>Für $L=(L_1,\ldots,L_\ell)$ erhält man damit</p>
<div class=math>
$$
    L(t_{m\ell},y,h)
    = (c_{p+1}\otimes I) y^{(p+1)}(t_{m\ell+\hat\imath})h^{p+1}
        + {\cal O}(h^{p+2}),
$$
</div>
<p>wobei</p>
<div class=math>
$$
    c_{p+1} = \pmatrix{ c_{1,p+1}\cr \vdots\cr c_{\ell,p+1}\cr }.
$$
</div>
<p>Der Vektor $c_{p+1}$ hängt nicht von der
Taylor-Entwicklungsstelle $\hat\imath$ ab.</p>
<p>Die Konsistenzordnung ist immer gleich der Konvergenzordnung bei sämtlichen
Tendlerschen Zyklen, wie man durch längere, aber elementare Rechnung
nachweist.
Bei zyklischen Formeln, selbst wenn alle Stufen die gleiche Konsistenzordnung
aufweisen, muß die Konvergenzordnung nicht grundsätzlich mit der
Konsistenzordnung übereinstimmen.
Diese Überlegungen findet man in allgemeiner Form dargestellt bei
Albrecht (1985)._{Albrecht, Peter}</p>
<p>Seien $y_{m\ell+i}\in\mathbb{R}^n$ im folgenden die vom Programm
TENDLER berechneten Näherungen für $y(t_{m\ell+i})\in\mathbb{R}^n$.
Die Komponenten von $y_{m\ell+i}$ bzw. von $y(t_{m\ell+i})$ seien mit
$y_{\nu,m\ell+i}$ bzw. mit $y_\nu(t_{m\ell+i})$ bezeichnet, $\nu=1,\ldots,n$.</p>
<p><strong>3.</strong> Unter der vereinfachenden Annahme, daß</p>
<div class=math>
$$
    y(t_{m\ell+j}) = y_{m\ell+j}, \qquad j=-k+1,\ldots,0,
$$
</div>
<p>erhält man durch komponentenweises Anwenden eines Mittelwertsatzes unter
Beachtung von beschränkten, geeigneten Inversen ($h$ ausreichend klein), daß</p>
<div class=math>
$$
    \pmatrix{ y(t_{m\ell+1})\cr \vdots\cr y(t_{m\ell+\ell})\cr }
        - \pmatrix{ y_{m\ell+1}\cr \vdots\cr y_{m\ell+\ell}\cr }
    = (d_{p+1}\otimes I) y^{(p+1)}(t_{m\ell+\hat\imath})h^{p+1} + {\cal O}(h^{p+2})
    \tag{1}
$$
</div>
<p>mit</p>
<div class=math>
$$
    d_{p+1} = A_\kappa^{-1} c_{p+1}.
$$
</div>
<p>Die vereinfachende Annahme liegt hier darin, daß Gleichheit für “vergangene”
Werte $y(t_{m\ell+j})$ und $y_{m\ell+j}$ für geeignete $j$, angenommen wird.
Diese Größen können jedoch grundverschieden sein und dürfen nicht miteinander
verwechselt werden.</p>
<p><strong>4.</strong> Anstatt zyklusweise vorzugehen, kann man auch stufenweise
vorgehen.
Nimmt man vereinfachend an, daß</p>
<div class=math>
$$
    y(t_{m\ell+j}) = y_{m\ell+j}, \qquad j=-k+1,\ldots,i-1,
$$
</div>
<p>für ein festes $i\in\{1,\ldots,\ell\}$, so erhält man</p>
<div class=math>
$$
    y(t_{m\ell+j}) - y_{m\ell+j} = {c_{i,p+1}\over\alpha_{ii}}
        y^{(p+1)}(t_{m\ell+i})h^{p+1} + {\cal O}(h^{p+2}), \qquad j=i+1. \tag{2}
$$
</div>
<p>Die Vereinfachung liegt hier wieder in der vorausgesetzten Exaktheit
vergangener Werte.
Gleichungen $(1)$ und $(2)$ sind die jeweilige Grundlage für Phase 1 und
Phase 2 der Fehlerkontrolle im Programm TENDLER.
In der Phase 2 wird lediglich der Fall $i=3$ und ggf. der Fall $i=4$ betrachtet.</p>
<p><strong>5.</strong> Dem Term $y^{(p+1)}(t_{m\ell+\hat\imath}){\mskip 3mu} h^{p+1}$
mißt man jetzt in der Fehlerkontrolle große Bedeutung bei.
Alle anderen einfliessenden Terme, also insbesondere die Terme höherer
Ordnung, oder andere Störgrößen, die z.B. aus der Korrektoriteration stammen
könnten, werden nicht weiter gesondert beachtet.
Aber auch Effekte, die ihren Ursprung in einem Schrittweiten- oder
Ordnungswechsel haben, oder Startfehler, alles dies wird völlig
in den nachfolgenden Überlegungen ignoriert.
Dies heißt nicht, daß diese Größen keinen Einfluß hätten.
Im Vergleich zu den einfachen Tests, wie sie nachfolgend beschrieben werden,
entziehen sich diese Einflüsse aber leider einer einfach zu handhabenden,
kostengünstigen Überprüfung ihres quantitativen Einflusses.
Allerdings wird dann an anderer Stelle versucht durch Sicherheitsfaktoren
und Sicherheitsreserven hier einen gewissen Ausgleich zu erzielen.</p>
<p>Es ist nun notwendig $y^{(p+1)}(t_{m\ell+\hat\imath}) {\mskip 3mu} h^{p+1}$ durch
leichter berechenbare Größen zu ersetzen.
Hierzu wird $\nabla^{p+1}y_{m\ell+i}$ genommen, wobei wie üblich $\nabla$
die rückwärtsgenommene Differenz bezeichnet.</p>
<p>Es gilt nun,
z.B. siehe <a href="https://www.amazon.de/Introduction-Numerical-Analysis-Applied-Mathematics/dp/0070287619">Hildebrand, Francis B., Hildebrand (1956)</a>
[S.47, (2.6.6) und S.92, (4.2.7)],
oder siehe <a href="https://www.amazon.com/Introduction-Numerical-Analysis-Carl-Froberg/dp/0201020963">Fröberg, Carl-Erik, Fröberg (1970)</a> [S.170], daß</p>
<div class=math>
$$
    \nabla^{p+1}y(t_{m\ell+i}) = y^{(p+1)}(\xi) {\mskip 3mu} h^{p+1},
    % \quad\hbox{für eine Zwischenstelle}\quad
    \qquad \xi \in \left[t_{m\ell+i-p-1}{\mskip 3mu},{\mskip 5mu}t_{m\ell+i}\right].
$$
</div>
<p>Für diese Zwischenstelle $\xi$ gilt nicht notwendig $\xi=t_{m\ell+i}$.
Da die rückwärtsgenommenen Differenzen ehedem zu Interpolationszwecken
berechnet werden müssen, erfordert die Bereitstellung von
$\nabla^{p+1}y_{m\ell+i}$ nur eine Vektoroperation.
Dieses Argument kann man natürlich auch anders herum betrachten: Da schon
sowieso eine Fehlerkontrolle über $\nabla^{p+1}y_{m\ell+i}$ durchgeführt
wird, kann man auch leicht mit rückwärtsgenommenen Differenzen interpolieren.</p>
<p>Nach diesen Vorbereitungen sollen nun die beiden wichtigen
Glieder der Fehlerkontrolle vorgestellt werden.</p>
<p>Bibliographisch:</p>
<ol>
<li><a href="">Hildebrand, Francis Begnaud</a>: “<a href="https://www.amazon.de/Introduction-Numerical-Analysis-Applied-Mathematics/dp/0070287619">Introduction to Numerical Analysis</a>”,
McGraw Hill Book Company, New York Toronto London, 1956, <em>x</em>+511 S.</li>
<li><a href="https://sv.wikipedia.org/wiki/Carl-Erik_Fr%C3%B6berg">Fröberg, Carl-Erik</a>:
“<a href="https://www.amazon.com/Introduction-Numerical-Analysis-Carl-Froberg/dp/0201020963">Introduction to Numerical Analysis</a>&amp;rdquo,
Addison-Wesley, Reading (Massachusetts) Menlo Park London Sydney Manila,
2nd Edition, 1970, <em>xii</em>+433 S.</li>
</ol>
<h2>3. Die Phase 1 der Fehlerkontrolle<a id=Phase1></a></h2>
<p><strong>1.</strong> Der Fehlerkontroll-Teil ist in zwei Phasen eingeteilt.
In der ersten Phase wird nach den ersten <em>beiden</em> Schritten
$\nabla^{p+1}y_{m\ell+2}$ ausgerechnet.
Die berechneten <em>beiden</em> Näherungen
$y_{m\ell+1}$ und $y_{m\ell+2}$ werden nun akzeptiert, falls</p>
<div class=math>
$$
    \left\|\nabla^{p+1}y_{m\ell+2}\right\|_w \: \le\: 
        {\varepsilon\over\mathopen|d_{2,p+1}\mathclose|}. \tag{Phase 1}
$$
</div>
<p>Hierbei sind $d_{i,p+1}$, mit $i=1,\ldots,\ell$, die Komponenten
des Vektors $d_{p+1}$.
Der Nenner wurde gewählt als</p>
<div class=math>
$$
    \max\left( \mathopen|d_{1,p+1}\mathclose|, \mathopen|d_{2,p+1}\mathclose|\right)
    = \mathopen|d_{2,p+1}\mathclose|.
$$
</div>
<p>Diese Beziehung gilt für alle Ordnungen $p=1,\ldots,7$.</p>
<p>Aus Sicherheitsgründen und um möglichst die vorgegebene Toleranzschwelle
nicht zu überschreiten, wird natürlich dem Maximum der beiden Werte der
Vorzug eingeräumt.
Im Falle, daß Phase 1 oder Phase 2 einen Schritt zurückweisen, kommen dann
anschliessend die gleichen Strategien zur Anwendung.</p>
<p>D.h. in der zweiten Stufe entscheidet man über die zweite berechnete
Näherung und gleichzeitig aber auch über die erste Näherung.
Dies liegt daran, daß nicht immer genügend viele vergangene
Lösungswerte bekannt sind, um die rückwärtsgenommenen
Differenzen entsprechend hoher Ordnung zu bilden.
Dies ist beim Start der Integration der Fall.</p>
<p>Die Vektoren $d_{p+1}=A_\kappa^{-1}c_{p+1} \in \mathbb{R}^{\ell\times\ell}$, für
die Ordnungen $p=1,\ldots,7$, sind wie nachfolgend, teilweise gerundet.</p>
<table>
<thead>
<tr>
<th align="center">$i$</th>
<th align="center">$d_2$</th>
<th align="center">$d_3$</th>
<th align="center">$d_4$</th>
<th align="center">$d_5$</th>
<th align="center">$d_6$</th>
<th align="center">$d_7$</th>
<th align="center">$d_8$</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">1</td>
<td align="center">-0.5</td>
<td align="center">$-0.\overline{2}$</td>
<td align="center">$-0.1\overline{36}$</td>
<td align="center">-0.096</td>
<td align="center">-0.072992</td>
<td align="center">-0.058309</td>
<td align="center">-0.048209</td>
</tr>
<tr>
<td align="center">2</td>
<td align="center">-1</td>
<td align="center">$-0.\overline{518}$</td>
<td align="center">-0.359504</td>
<td align="center">-0.28032</td>
<td align="center">-0.232830</td>
<td align="center">-0.203812</td>
<td align="center">-0.178361</td>
</tr>
<tr>
<td align="center">3</td>
<td align="center">-1.5</td>
<td align="center">-0.839506</td>
<td align="center">1.680440</td>
<td align="center">-0.704419</td>
<td align="center">-0.427500</td>
<td align="center">-0.396400</td>
<td align="center">-0.468812</td>
</tr>
<tr>
<td align="center">4</td>
<td align="center">*</td>
<td align="center">*</td>
<td align="center">*</td>
<td align="center">*</td>
<td align="center">-1.174794</td>
<td align="center">-1.295310</td>
<td align="center">-1.185795</td>
</tr>
</tbody>
</table>
<p>Hierbei sieht man also tatsächlich, daß von den ersten beiden
Komponenten, die zweite betragsmässig immer die größere ist.
Nur die zweite Zeile findet in dem Programm TENDLER Anwendung, die
anderen Zeilen werden nicht benötigt.
Abgespeichert werden jedoch nicht diese Werte sondern die <em>Kehrwerte</em>.</p>
<p><strong>2.</strong> Es ist hierbei $|\cdot |_w$ dieselbe gewichtete Norm wie sie auch bei der
Korrektoriteration auftrat.
Eine Möglichkeit den Gewichtsvektor zu aktualisieren ist wie folgt.
Man wählt für jede Komponente des Gewichtsvektor das Maximum von</p>
<ol>
<li>eins und</li>
<li>dem Betrag der größten Näherung, die bisher berechnet wurde.</li>
</ol>
<p>Diese Wahl der Gewichte würde die Fehlerkontrolle in der
folgenden Weise beeinflussen: Die Fehlerkontrolle wäre</p>
<ol>
<li><em>relativ</em> für diejenigen Komponenten die betragsmässig größer sind als eins,</li>
<li><em>absolut</em> für die Komponenten, die betragsmässig
kleiner als 1 sind und so bleiben und</li>
<li><em>absolut</em> gefolgt von <em>relativ</em> für diejenigen
Komponenten, die erst betragsmässig kleiner und anschließend
größer sind als 1.</li>
</ol>
<p>Die genaue Wahl des Gewichtsvektors kann der Benutzer beliebig vorgeben.
Das Programm TENDLER erzwingt oder erfordert hier keinerlei
Einschränkungen.
Nichts desto trotz hat die Wahl der Norm Einfluß auf die Effizienz des
Programmes.</p>
<p>Nicht unüblich ist hierbei auch eine Kopplung des Gewichtsvektors mit
der geforderten Genauigkeit.
Aber auch mit berechneten Werten für die Ableitungen kann man die
Normroutine versehen.
Diese Berechnungsvorschriften hängen z.T. von der zugrunde liegenden
Zielsetzung des Programmbenutzers ab.</p>
<p>Eine Beschreibung zu dem Komplex der Normberechnung findet man z.B. bei
<a href="https://www.amazon.de/-/en/Computer-Solution-Ordinary-Differential-Equations/dp/0716704617">Shampine/Gordon (1984)</a>.
Wenn Geschwindigkeitsüberlegungen im Vordergrund stehen, ist eine auf
der Maximumnorm aufbauende Norm kostengünstiger zu berechnen, als eine
Routine basierend auf der euklidischen Norm.
Mit beiderlei Arten von Normroutinen wurde das Programm TENDLER getestet.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://www.researchgate.net/profile/Lawrence-Shampine">Lawrence F. Shampine</a></li>
<li><a href="https://zbmath.org/authors/gordon.marilyn-k">Marilyn K. Gordon</a></li>
</ol>
<h2>4. Die Phase 2 der Fehlerkontrolle<a id=Phase2></a></h2>
<p><strong>1.</strong> Wie vorher wird $y^{(p+1)}(t_{m\ell+\hat\imath}) {\mskip 3mu} h^{p+1}$ durch
$\nabla^{p+1}y_{m\ell+i}$ angenähert, insbesondere mit $\hat\imath=i$.
Die Werte $1/d_{2,p+1}$ liegen in etwa zwischen 1 und 6.
Die Werte $\alpha_{ii}/c_{i,p+1}$ liegen größenordnungsmäßig zwischen 1 und 20.</p>
<p>Die maximale Stufenzahl $\ell$ ist hierbei $\ell=3$, für $p\in\{1,2,3,4\}$
und $\ell=4$, für $p\in\{5,6,7\}$.
In der zweiten Phase der Fehlerkontrolle wird für die letzte
$\ell$-te Stufe, bzw. letzten beiden (d.h. für $\ell-1$ und $\ell$)
Stufen im Zyklus, der folgende Test angewendet, um auf Akzeptanz zu prüfen:</p>
<div class=math>
$$
    \left\| \nabla^{p+1}y_{m\ell+i} \right\|_w  \: \le\: 
    {\varepsilon \over c_{i,p+1}/ \alpha_{ii}},
    \qquad\hbox{für}\quad i=3,\ldots,\ell.  \tag{Phase 2}
$$
</div>
<p>Wird dieser Test nicht bestanden, so wird der gesamte Zyklus zurückgewiesen,
und es wird für den zu wiederholenden Zyklus eine geeignete neue
Schrittweite bestimmt.</p>
<p>Je nach gewählter Option können die Tests während der Phase 2 zu einem
einzigen Test zusammenschrumpfen.
Testläufe zeigen, daß die maßgeblichste Überprüfung, diejenige der
Phase 1 ist, also gemeint sind damit die Überprüfungen, die zu einem
Wiederholen des Zyklus führen.
Aufgrund der Größenverhältnisse der verwendeten Konstanten ist dies
nicht verwunderlich.
Dies darf natürlich nicht dahingehend interpretiert werden, daß dies bei allen
zyklischen Formeln so der Fall ist, auch nicht bei den zyklischen Formeln
von J.M. Tendler.
Zu den Gründen warum gleich der gesamte Zyklus wiederholt wird, anstatt
nur die betreffende Stufe, gelten die Überlegungen, die beim
Konvergenztest angegeben wurden, entsprechend (Stummelzyklusproblem).
Gelegentlich tritt der Fall ein, daß ein zurückgewiesener Schritt seine
Ursachen in einer zu alten Iterationsmatrix $W$ hatte, jedoch ist dies
selten.
Es ist gerade die Aufgabe des Hindmarsh-Testes hier für eine entsprechend
günstige Aktualisierung zu sorgen.</p>
<p><strong>2.</strong> Zur Interpolation der Zwischengitterpunkte wird das Unterprogramm
<code>tdlintsglbase()</code> aufgerufen,
welches wiederum $(p-1)$-mal das Unterprogramm <code>tdlnewtform()</code> aufruft.</p>
<p>Da $y_{m\ell}$ schon bekannt ist, müssen nur $(p-1)$-mal, anstatt $p$-mal
Werte berechnet werden.
Die insgesamt $p$ Ordinatenwerte müssen dann umgeformt werden in
rückwärtsgenommene Differenzen.
Dies geschieht mit dem Unterprogramm <code>tdlformbackdiff()</code>.</p>
<p>Schließlich muß noch für den Prädiktor der Wert $hf_{m\ell-1}$ auf die
neue Schrittweite angepasst werden.
Dies besorgt das Unterprogramm <code>tdladapthz()</code>.</p>
<p>Der Arbeitsaufwand für einen Schrittweitenwechsel beträgt insgesamt
${\cal O}({3\over2}p^2+{1\over2}p)$ Vektoroperationen.
Die Bereitstellung und die ständige Pflege und Aktualisierung der
Differenzentabelle pro Stufe kostet $p$ Vektoroperationen.
Das Programm DE/STEP benötigt hier $(p+2)$ Vektoroperationen.
Bzgl. der Überlegungen, ob es günstiger ist den gesamten Zyklus zu
wiederholen oder nur die zurückgewiesene Stufe, beachte man, daß innerhalb
eines Zykluses dann eine Differenzentabelle für Ableitungswerte
mitgeführt werden müsste.
Dies würde den Speicherplatzbedarf auf jeden Fall anschwellen lassen und
möglicherweise auch den Rechenzeitbedarf.
Wie erwähnt treten auch theoretische Schwierigkeiten bzgl. des
Stummelzyklus, also des nicht zu Ende geführten Zyklus, hinzu.</p>
<p>Nocheinmal soll darauf hingewiesen werden, daß in dem Programm
TENDLER nicht alle Stufen einer Fehlerkontrolle unterzogen werden.
Beachtet man gewisse Eigenheiten beim Start der Integration, so liesse
sich diese Eigenschaft leicht verändern.
Der Integrationsanfang ist insofern einer Sonderbehandlung zu unterziehen,
als daß dort nicht gleich genügend viele rückwärtsgenommene Differenzen
entsprechender Ordnung zur Verfügung stehen.</p>
<h2>5. Die verwendeten Fehlerfaktoren im Programm TENDLER<a id=Fehlerfaktoren></a></h2>
<p>Die Reziprokwerte der Beträge der skalierten Fehlerfaktoren, also</p>
<div class=math>
$$
    \left|{c_{i,p+1} / \alpha_{ii}}\right|,
    \qquad i=1,\ldots,4, \quad p=1,\ldots,7
$$
</div>
<p>sind in der fünfzeiligen Tabelle zusammengefaßt.
Die Werte sind gerundet.</p>
<table>
<thead>
<tr>
<th align="center">$p$</th>
<th align="center">1</th>
<th align="center">2</th>
<th align="center">3</th>
<th align="center">4</th>
<th align="center">5</th>
<th align="center">6</th>
<th align="center">7</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">$\left\vert{\alpha_{11}/c_{1,p+1}}\right\vert$</td>
<td align="center">2.0</td>
<td align="center">4.5</td>
<td align="center">$7.\overline{3}$</td>
<td align="center">10.4167</td>
<td align="center">13.7</td>
<td align="center">17.15</td>
<td align="center">20.7429</td>
</tr>
<tr>
<td align="center">$\left\vert{\alpha_{22}/c_{2,p+1}}\right\vert$</td>
<td align="center">2.0</td>
<td align="center">4.5</td>
<td align="center">$7.\overline{3}$</td>
<td align="center">10.4167</td>
<td align="center">13.7</td>
<td align="center">17.9504</td>
<td align="center">20.7429</td>
</tr>
<tr>
<td align="center">$\left\vert{\alpha_{33}/c_{3,p+1}}\right\vert$</td>
<td align="center">2.0</td>
<td align="center">4.5</td>
<td align="center">6.0</td>
<td align="center">9.3</td>
<td align="center">13.8687</td>
<td align="center">17.4349</td>
<td align="center">15.921</td>
</tr>
<tr>
<td align="center">$\left\vert{\alpha_{44}/c_{4,p+1}}\right\vert$</td>
<td align="center">*</td>
<td align="center">*</td>
<td align="center">*</td>
<td align="center">*</td>
<td align="center">9.6904</td>
<td align="center">9.472</td>
<td align="center">14.7809</td>
</tr>
</tbody>
</table>
<p>Man behalte im Auge, daß für die Fehlerkontrolle, nur die letzten beiden
Zeilen der bzw. die letzten drei Zeilen der angegebenen fünfzeiligen
Tabelle verwendet werden und zwar für die <em>zweite</em> Phase des
Fehlerkontrollteils.</p>
<p>Die erste Phase benutzte die Werte $d_{p+1}=A_\kappa^{-1}c_{p+1}$.
Die obigen Werte $\alpha_{ii}/c_{i,p+1}$ werden in transponierter Form
in der Konstantenmatrix <code>alfa_div_errfac[8][4]</code> abgespeichert.
Die erste Zeile dieser Tabelle wird also in dem Programm TENDLER nirgendwo
benutzt.
Dennoch sind diese Werte gespeichert, da sie u.U. bei einer Änderung des
Konvergenztestes benutzt werden könnten.</p>
<p>Für die erste Phase werden ja die Reziprokwerte der Beträge
$\mathopen|d_{2,p+1}\mathclose|$ für die Ordnungen $p=1$ bis $p=7$ benutzt.
Diese lauten gerundet:</p>
<table>
<thead>
<tr>
<th align="center">$p$</th>
<th align="center">1</th>
<th align="center">2</th>
<th align="center">3</th>
<th align="center">4</th>
<th align="center">5</th>
<th align="center">6</th>
<th align="center">7</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">$\mathopen\vert1/d_{2,p+1}\mathclose\vert$</td>
<td align="center">1.0</td>
<td align="center">1.9286</td>
<td align="center">2.7816</td>
<td align="center">3.5674</td>
<td align="center">4.295</td>
<td align="center">4.9065</td>
<td align="center">5.6066</td>
</tr>
</tbody>
</table>
<p>Diese Konstanten sind in dem Konstantenvektor <code>errconst[8]</code> abgespeichert.</p>
<h2>6. Programmnahe Beschreibung der Fehlerkontrolle<a id=ProgrammnaheBeschr></a></h2>
<blockquote>
<p>Since for a stiff problem it is stability and not accuracy that
controls step-length, an error control mechanism based on accuracy
requirements is unnecessary. The numerical results certainly bear
this out. We are left with the interesting thought that, in general,
algorithms for stiff systems, based on explicit methods used in some
acceptably stable manner, do not need to have an error control
mechanism.</p>
<p><a href="https://doi.org/10.1016/0898-1221(86)90238-5">Jack D. Lambert (1985)</a></p>
</blockquote>
<p><strong>1.</strong> Die erste Stufe des Zykluses wird <em>immer</em> durchgelassen.
Im Programm TENDLER ist hier also $i=0$.
In diesem Falle finden somit keinerlei weitere Überprüfungen statt,
insbesondere keine Normberechnungen.
Gesetzt wird nun die maximal zulässige Schranke $\varepsilon_{\rm max}$
für die weiteren Stufen, also für $i=1,2$ und gegebenenfalls noch
für $i=3$.
Man beachte hier die Indizierung von 0 an, anstatt von 1, im Gegensatz zu oben.
Man setzt nun</p>
<div class=math>
$$
    \varepsilon_{\rm max} = \varepsilon\cdot\cases{
        \texttt{errconst[}p\texttt{]}, & falls $i=1$,\cr
        \texttt{alfa_div_errfac[}p\texttt{][}i\texttt{]}, & falls $i\gt 1$.\cr}
$$
</div>
<p>und testet jetzt hiermit auf Akzeptanz des Schrittes durch den Test</p>
<div class=math>
$$
    \mathopen\|\nabla^{p+1}y\mathclose\| \le \varepsilon_{\rm max}.
$$
</div>
<p>Wird dieser Test nicht bestanden, so wird die Schrittweite $h$ auf jeden
Falle verkleinert und zwar um den Faktor <code>ratio</code>, mit</p>
<div class=math>
$$
    \texttt{ratio} = \cases{  \texttt{ecsaffac[}\xi\texttt{]}\cdot
        {\displaystyle\root p+1\of{\varepsilon_{\max}\over
        \mathopen\|\nabla^{p+1}y\mathclose\|}},
            & beim ersten Fehlschlag,\cr
        1/2,  & beim zweiten Fehlschlag,\cr
        1/10, & beim dritten Fehlschlag.\cr
    }
$$
</div>
<p>Hierbei ist</p>
<div class=math>
$$
    \xi = \begin{cases}
        0, & \text{falls Iterationsart} \in\left\{ \texttt{MNI}, \texttt{MNIFLOAT} \right\}, \\
        1, & \text{falls Iterationsart} \in\left\{ \texttt{FIX}, \texttt{FIXFLOAT}, \texttt{FIXPECE} \right\}. \\
    \end{cases}
$$
</div>
<p>Schließlich ist <code>ecsaffac[]</code> = $\{0.7, 0.6\}$.</p>
<p>Beim dritten konsekutiven Fehlschlag, also drei Fehlschläge direkt
hintereinanderfolgend bei demselben Zyklus, wird die Ordnung $p$ auf 1
gesetzt und dies unabhängig davon, welche Ordnung vorher auch immer
benutzt wurde.</p>
<p>Erfahrung und Testläufe zeigten, daß ein Fehlschlag selten ist, circa
1 Fehlschlag auf 400 Schritte, als grober Hinweis.
Dies ist natürlich von der Differentialgleichung und der angeforderten
Genauigkeit abhängig, aber auch —und das ist wichtig— von der
Schrittweiten- und Ordnungssteuerung.</p>
<p>Ein doppelter Fehlschlag ist noch seltener.
Dreifache Fehlschläge in dem Programm TENDLER sind ebenfalls sehr selten.
Für Aussagen solcher Art dienen u.a. die generierten Statistiken.
Gleichzeitig ergab sich, daß bei vierstufigen Zyklen, also bei den
Ordnungen $p\in\{5,6,7\}$, die Fehlerkontrolle für die dritte Stufe
($i=2$) nie versagte.
Anteil hat maßgeblich die zweite Stufe und danach die letzte Stufe.
Diese Beobachtung gilt ersteinmal nur für das Programm TENDLER, mit seinen
Faktoren $\left|\alpha_{33}/c_{3,p+1}\right|$.
Für andere Programme, basierend auf möglicherweise anderen zyklischen
Formeln, kann das Bild vielleicht schon ganz anders aussehen.</p>
<p>Bei der Zurückweisung eines Schrittes werden die neu benötigten Werte auf dem
neuen, engeren Gitter durch Interpolation bestimmt.
Bei einem Einschrittverfahren entfällt diese Aufgabe.
Wenn in dem Programm TENDLER mit dem impliziten Eulerverfahren gerechnet
werden soll, ist also bei einem Schrittweitenwechsel keine Interpolation
erforderlich.
Die Schrittweite wird um den Faktor <code>ratio</code> verkleinert.
Die Interpolation mit Hilfe rückwärtsgenommener Differenzen geschieht durch
das Unterprogramm <code>tdloldbdf()</code>.</p>
<p><strong>2.</strong> Wird ein Schritt zurückgewiesen, so werden die folgenden Maßnahmen ergriffen:</p>
<ol>
<li>Die Ordnung wird niemals erhöht, höchstens drastisch erniedrigt.</li>
<li>Falls die Fehlerkontrolle weniger als drei Mal nicht erfolgreich
war, so wird die Schrittweite verkleinert, sofern sie die minimale
Schrittweite noch überschreiten sollte.<ul>
<li>Nach dem ersten Fehlschlag, wird die neue Schrittweite
ähnlich bestimmt, wie im Abschnitt über die
Schrittweiten- und Ordnungssteuerung.</li>
<li>Nach dem zweiten Fehlschlag wird die
Schrittweite halbiert, soweit sie dieses zuläßt.</li>
</ul>
</li>
<li>Sollte die Schrittweite die kleinstzulässige Schrittweite nicht
überschreiten, so wird die Ordnung auf 2 gesetzt, falls die Ordnung größer
ist als 2, und sie wird auf 1 gesetzt, falls sie vorher nur noch 2 war.</li>
<li>In den beiden Fällen (2) und (3) wird dann der <em>gesamte</em>
Zyklus wiederholt.</li>
<li>Sollte das nicht möglich sein, d.h. die Schrittweite ist minimal
und die Ordnung ist gleich eins, dann wird der Zyklus zwangsweise
akzeptiert.
Je nach entsprechend gesetztem Modus erfolgt eine Fehlermeldung und eine
entsprechende Markierung in den Rückgabeparametern.</li>
<li>Nach drei Zurückweisungen wird der Zyklus gänzlich neu gestartet,
und zwar fast so, wie bei dem allerersten Aufruf des Programmes
TENDLER.
Die Schrittweite wird, soweit sie dieses zuläßt, noch gezehntelt.</li>
<li>Das Betreten der Schrittweiten- und Ordnungssteuerung wird
durch Setzen der Sperrvariablen <code>problem</code> und <code>wait[]</code> unterbunden.</li>
</ol>
<p>Die in dem Programm TENDLER verwendeten Taktiken sind denjenigen des
Programmes <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a> und <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">DIFJMT</a> ähnlich.
Die verwendeten Strategien sind überdies ähnlich denjenigen Taktiken, wie
sie auch verwendet werden in dem Programm <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a>,
siehe <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">Gear (1971b)</a>,
siehe <a href="https://www.amazon.com/Numerical-Differential-Equations-Automatic-Computation/dp/0136266061">Gear (1971c)</a> [9.3, S.156--166].
Ähnlichkeiten bestehen auch zu dem Programm <a href="https://doi.org/10.1137/0906063">DSTIFF</a>,
siehe Gupta, Gopal K., Gupta (1985), S.942–943, welches seinerseits sich
anlehnt an das Programm DIFSUB.
Es gibt jedoch auch eine Reihe von Unterschieden.
Z.B. wird an keiner Stelle pauschal 10-mal gewartet bis die
Schrittweiten- und Ordnungssteuerung erneut betreten wird.</p>
<p>Bibliographisch:</p>
<ol>
<li>Lambert, Jack D.: <a href="https://doi.org/10.1016/0898-1221(86)90238-5">A stable sequence of steplengths for Euler's rule applied to stiff systems of differential equations</a>,
Computer &amp; Mathematics with Applications, Vol. 12, Issues 5-6, Part 2, September-December 1986, pages 1141–1151</li>
<li>Gupta, Gopal K.: “<a href="https://doi.org/10.1137/0906063">Description and Evaluation of a Stiff ODE Code DSTIFF</a>”,
SIAM Journal on Scientific and Statistical Computing, Vol 6, No 4,
October 1985, pp.939–950</li>
<li><a href="https://en.wikipedia.org/wiki/C._William_Gear">Gear, Charles William (1935—2022)</a></li>
<li>Gear (1968), Charles William: “The Automatic Integration of Stiff
Ordinary Differential Equations”, IFIP Congress 68,
Edinburgh, Scotland, $5^{\rm th}$–$10^{\rm th}$ August 1968,
North Holland Publishing Company, Amsterdam, pp.A81–A85</li>
<li>Gear (1971a), Charles William: “Experience and Problems with the
Software for the Automatic Solution of Ordinary Differential Equations”,
in “Mathematical Software”, ACM Monograph Series, Editor John Rice,
Academic Press, New York London, 1971, pp.211–227</li>
<li>Gear (1971b), Charles William: “<a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">The Automatic Integration of
Ordinary Differential Equations</a>”,
CACM, Vol 14, No 3, March 1971, pp.176–179</li>
<li>Gear (1971b), Charles William: “<a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">Algorithm 407.
DIFSUB for Solution of Ordinary Differential Equations [D2]</a>”,
CACM, Vol 14, No 3, March 1971, pp.185–190</li>
<li>Gear (1971c), Charles William: “<a href="https://www.amazon.com/Numerical-Differential-Equations-Automatic-Computation/dp/0136266061">Numerical Initial Value
Problems in Ordinary Differential Equations</a>”, Prentice-Hall,
Englewood Cliffs (New Jersey), 1971, _xvii+253 S.</li>
<li>Tendler, Joel Marvin: <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">A Stiffly Stable Integration Process Using Cyclic Composite Methods</a></li>
<li>Tendler, J.M., Bickart, T.A., Picel, Z.: <a href="https://doi.org/10.1145/356502.356495">A Stiffly Stable Integration Process Using Cyclic Composite Methods</a>. ACM Trans. Math. Softw. 4(4), 339–368 (1978)</li>
</ol>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/02-18-stability-mountain-for-majid-suleiman-omar</link>
		<guid>https://eklausmeier.goip.de/blog/2026/02-18-stability-mountain-for-majid-suleiman-omar</guid>
		<title>Stability Mountain for Majid/Suleiman/Omar</title>
		<category>mathematics</category>
		<pubDate>Wed, 18 Feb 2026 20:30:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>Here we analyze the method from <a href="https://emis.de/ft/40667">Majid/Suleiman/Omar</a>.
This is a block implicit method of order 4.</p>
<div class=math>
$$
\begin{array}{r|rrr}
p=4 & 1 & 2 & 3\cr
\hline
-1 &  -24 &   0 &   0 \cr
 0 &   24 & -24 &   0 \cr
 1 &    0 &  24 & -24 \cr
 2 &    0 &   0 &  24 \cr
\hline
-1 &    9 &  -1 &   1 \cr
 0 &   19 &  13 &  -5 \cr
 1 &   -5 &  13 &  19 \cr
 2 &    1 &  -1 &   9 \cr
\hline
c_{5i} & -0.026 & 0.015 & -0.026\cr
\end{array}
$$
</div>
<p>The error constant is</p>
<div class=math>
$$
    c_{p+1} = \frac{1}{\alpha_{i}\,(p+1)!} \sum_{i=0}^k\bigl(\alpha_ii^{p+1}-(p+1)\beta_ii^p\bigr).
$$
</div>
<pre><code class="language-bash">Majid, p=4, k=1, l=3
       -24.0000         0.0000         0.0000
        24.0000       -24.0000         0.0000
         0.0000        24.0000       -24.0000
         0.0000         0.0000        24.0000
         9.0000        -1.0000         1.0000
        19.0000        13.0000        -5.0000
        -5.0000        13.0000        19.0000
         1.0000        -1.0000         9.0000
rho_0          0.000000000           0.000000000           0.000000000
rho_1          0.000000000           0.000000000           0.000000000
rho_2          0.000000000           0.000000000           0.000000000
rho_3          0.000000000           0.000000000           0.000000000
rho_4          0.000000000           0.000000000           0.000000000
rho_5         -0.026388889           0.015277778          -0.026388889   &lt;-----

Parasitic roots of Majid
        nr      real                    imag                    abs                     3-th root
         0      1.00000000         0.00000000              1.00000000                1.00000000
         1      0.00000000         0.00000000              0.00000000                0.00000000
         2      0.00000000         0.00000000              0.00000000                0.00000000
</code></pre>
<p>The method, written as</p>
<div class=math>
$$
    A_1 y_{n+1} + A_0 y_n = h\cdot \left(B_1 f(y_{n+1} + B_0 f(y_n)\right)
$$
</div>
<p>has the stability polynomial</p>
<div class=math>
$$
    Q(\mu,H) = \det\left( A_1\mu + A_0 - H\cdot(B_1\mu + B_0) \right).
$$
</div>
<p>The matrices are</p>
<div class=math>
$$
    A_1 = \pmatrix{
        24 & 0 & 0\cr
        -24 & 24 & 0\cr
        0 & -24 & 24
    }, \quad
    A_0 = \pmatrix{ 0 & 0 & -24\cr 0&0&0\cr 0&0&0 }, \quad
    B_1 = \pmatrix{
        19 & -5 & 1\cr
        13 & 13 & -1\cr
        -5 & 19 & 9
    }, \quad
    B_0 = \pmatrix{ 0&0&9\cr 0&0&-1\cr 0&0&1 }.
$$
</div>
<p>For $\mathop{\rm Re} H\to -\infty$ the matrix $B_0$ will dominate.
Matrix $B_0$ has eigenvalues 1, 0, 0.</p>
<p>We assume that the implicitness is resolved by a full Newton method.
I.e., for a scaler differential equation we would have to solve a three-dimensional equation <em>at each step.</em>
The method is $A$-stable but not $A_\infty^0$-stable (also called $L$-stable).
See <a href="https://eklausmeier.goip.de/blog/2026/01-20-tendler-like-formulas-for-stiff-odes">Tendler-like Formulas for Stiff ODEs</a> for the definitions of all these stability properties.</p>
<p><a href="https://emis.de/ft/40667">Majid/Suleiman/Omar</a>, however, treat the implicitness via fixed point iteration.
Also, they do not solve a three-dimensional system but solve the block by either Jacobi or Gauß-Seidel iteration.
In that case the method is <em>no longer</em> $A$-stable.
The stability diagrams are given in their <a href="https://emis.de/ft/40667">paper</a>.</p>
<p>It would be interesting to investigate the effect of Gauß-Seidel combined with a Newton iteration <em>per stage</em>.</p>
<h2>1. Stability region.</h2>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion3 -f MajidOmar -oj -r120
</code></pre>
<div id="container_Majid" class="chartarea"></div>
<h2>2. Stability mountain.</h2>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion3 -fMajidOmar -o3 -L5:-20:5:20
</code></pre>
<p>Majid/Suleiman/Omar stability mountain.
One can clearly see a trough around zero.
Also, clearly the roots approach 1 at infinity.
So visually it is obvious that the method is not $A_\infty^0$-stable.</p>
<div id="container3d_Majid" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/02-17-searching-for-tendler-like-formulas-p3</link>
		<guid>https://eklausmeier.goip.de/blog/2026/02-17-searching-for-tendler-like-formulas-p3</guid>
		<title>Searching for Tendler-like formulas, #3</title>
		<category>mathematics</category>
		<pubDate>Tue, 17 Feb 2026 08:00:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#order3">1. Order 3</a></li>
<li><a href="#order4">2. Order 4</a></li>
<li><a href="#order5">3. Order 5</a></li>
<li><a href="#order6">4. Order 6</a></li>
<li><a href="#order7">5. Order 7</a></li>
<li><a href="#order8">6. Order 8</a></li>
<li><a href="#order9">7. Order 9</a></li>
</ul>
<p>This post is a continuation of</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas">Searching for Tendler-like formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2026/02-07-searching-for-tendler-like-formulas-p2">Searching for Tendler-like formulas, #2</a></li>
</ol>
<p>Here we search for further Tendler-like formulas.
We extended <a href="https://github.com/eklausme/c/blob/master/stabregion2.c"><code>stabregion2.c</code></a> to <a href="https://github.com/eklausme/c/blob/master/stabregion3.c"><code>stabregion3.c</code></a> to include higher order base formulas during the search process.
This essentially removes restriction R3 given in <a href="https://eklausmeier.goip.de/blog/2026/01-20-tendler-like-formulas-for-stiff-odes">Tendler-like Formulas for Stiff ODEs</a>.</p>
<p>For reference, below are Widlund-wedge angle α and Widlund-distance δ for the original Tendler formulas and for Tischer's formulas.
See <a href="https://eklausmeier.goip.de/blog/2026/01-20-tendler-like-formulas-for-stiff-odes">Tendler-like Formulas for Stiff ODEs</a>.</p>
<table>
<thead>
<tr>
<th><em>p</em></th>
<th><em>l</em></th>
<th>abs(root)</th>
<th>α(Tendler)</th>
<th>δ(Tendler)</th>
<th></th>
<th>α(Tischer)</th>
<th>δ(Tischer)</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>3</td>
<td>0</td>
<td>90°</td>
<td>0</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>0.333333333</td>
<td>90°</td>
<td>0</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td>0.55371901</td>
<td>89.427°</td>
<td>0.004776</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>0.35406989</td>
<td>80.882047°</td>
<td>0.244157</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>5</td>
<td>4</td>
<td>0.42931855</td>
<td>77.477315°</td>
<td>1.421472</td>
<td></td>
<td>86.649352°</td>
<td>0.040844</td>
</tr>
<tr>
<td>6</td>
<td>4</td>
<td>0.52827598</td>
<td>63.245842°</td>
<td>2.933167</td>
<td></td>
<td>76.311756°</td>
<td>0.280752</td>
</tr>
<tr>
<td>7</td>
<td>4</td>
<td>0.66669430</td>
<td>33.531759°</td>
<td>10.179501</td>
<td></td>
<td>57.663061°</td>
<td>0.959187</td>
</tr>
<tr>
<td>8</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td></td>
<td>22.149242°</td>
<td>2.534082</td>
</tr>
</tbody>
</table>
<p>The new eTendler formulas have below characteristics.</p>
<table>
<thead>
<tr>
<th><em>p</em></th>
<th><em>l</em></th>
<th>abs(root)</th>
<th>α(new)</th>
<th>δ(new)</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>3</td>
<td>3</td>
<td>0.70756795</td>
<td>89.72423°</td>
<td>0.00164</td>
<td>worse root modulus, better δ</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>0.28351644</td>
<td>84.91216°</td>
<td>0.07106</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>5</td>
<td><strong>3</strong></td>
<td>0.48870093</td>
<td>77.81321°</td>
<td>0.42370</td>
<td>shorter cycle length, better α, better δ</td>
</tr>
<tr>
<td>6</td>
<td>4</td>
<td>0.29026688</td>
<td>71.63806°</td>
<td>1.03854</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>7</td>
<td>4</td>
<td>0.57300425</td>
<td>55.13529°</td>
<td>3.87902</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>8</td>
<td>4</td>
<td>0.61600197</td>
<td>none</td>
<td>15.05503</td>
<td>no other formula with α&gt;0.1 found</td>
</tr>
<tr>
<td>9</td>
<td><strong>5</strong></td>
<td>0.76270334</td>
<td>none</td>
<td>38.22753</td>
<td>cycle length &gt; 4 seems to be required</td>
</tr>
</tbody>
</table>
<p>We will see that when we use more base sets that this unfortunately does not lead to a higher Widlund-wedge angle.</p>
<h2>1. Order 3<a id=order3></a></h2>
<p>We employ the program <a href="https://github.com/eklausme/c/blob/master/stabregion3.c"><code>stabregion3.c</code></a> for the search using random numbers.
One can observe that we hit a wall when approaching 90°.
The parasitic roots never get below 0.7 and a magnitude for the error constant of 0.1xx is the best we get.</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1  1 1  1 1 1 : 0 1 1  1 1 1 : 0 0 0  1 1 1 | stabregion3 -l- -bBase3:Base4:Base5 -I3:-450:450:98290900 -W89.75 -E2
W= 89.75367, xmin= -0.00134, parasitic=0.7408, |e|=0.136364	      1.000000   -116.976784   -160.273476    408.544509   -292.870403    258.037289      0.000000    -14.075707    196.676322    277.554276     36.174752    205.967153      0.000000      0.000000      0.000000      8.158036   -280.198221    -31.891473		1
W= 89.75748, xmin= -0.00126, parasitic=0.7416, |e|=0.136364	      1.000000   -129.033953    308.617742   -312.952059    232.284569    281.491023      0.000000   -185.527614    427.835000    357.601449   -131.864607   -108.235271      0.000000      0.000000      0.000000    102.657864   -442.822505    418.360371		2
W= 89.75603, xmin= -0.00138, parasitic=0.7445, |e|=0.209612	      1.000000    183.654754    -83.632788    207.673820   -218.713396    363.329801      0.000000   -186.569124    432.516866    384.545013    349.684793    109.006432      0.000000      0.000000      0.000000   -137.437044    136.879014   -386.410650		3
W= 89.76454, xmin= -0.00133, parasitic=0.7386, |e|=0.136364	      1.000000   -155.175878    -89.336642    428.639437    -23.498355    138.550631      0.000000    206.574634   -348.349077    305.763657   -187.166483    333.663008      0.000000      0.000000      0.000000     70.111688   -319.297164      3.326473		4
W= 89.76309, xmin= -0.00129, parasitic=0.7415, |e|=0.205720	      1.000000    378.930931    338.803078   -412.942075   -171.051043     75.858141      0.000000   -293.809291    186.627542    427.743682   -296.959306    346.637517      0.000000      0.000000      0.000000     23.022649   -169.510911     11.972462		5
W= 89.75091, xmin= -0.00140, parasitic=0.7277, |e|=0.136364	      1.000000   -254.028948    137.138084    308.785130   -362.535901   -200.160496      0.000000   -247.179942    314.404991    312.135153    173.075259   -319.042412      0.000000      0.000000      0.000000     22.176050   -353.400848    -33.246268		6
W= 89.77507, xmin= -0.00126, parasitic=0.7448, |e|=0.195145	      1.000000     80.923590   -264.633620    396.446330    158.964791   -381.872453      0.000000   -114.860961    403.520001   -147.691001   -134.852720     88.339630      0.000000      0.000000      0.000000    134.589696   -348.529725    221.884990		7
W= 89.76553, xmin= -0.00132, parasitic=0.7365, |e|=0.719422	      1.000000    175.253405     -4.649851    112.784379   -158.925687   -229.208964      0.000000   -108.214251    139.410784    430.401274     39.104481    -41.630376      0.000000      0.000000      0.000000     63.944518   -384.330667    138.610250		8
W= 89.78191, xmin= -0.00123, parasitic=0.7472, |e|=0.136364	      1.000000     61.055741   -198.294609     32.046989     98.461421   -149.943627      0.000000    137.961787   -165.238399   -442.538390    236.330556    192.949704      0.000000      0.000000      0.000000    -53.239934    407.183359   -117.471106		9
W= 89.78060, xmin= -0.00123, parasitic=0.7441, |e|=0.136364	      1.000000    150.998010   -156.362153   -348.736299   -364.968312   -378.011467      0.000000    221.897029   -398.173532   -319.851506   -222.120826    135.960244      0.000000      0.000000      0.000000     -8.374722    373.098748     15.659284		10
W= 89.76218, xmin= -0.00133, parasitic=0.7304, |e|=0.136364	      1.000000    323.658466    315.178302   -410.366970    292.301800     13.507339      0.000000   -374.064908    367.539590     73.736412   -360.799354    180.270600      0.000000      0.000000      0.000000    -92.677790    365.730122    -81.373393		11
W= 89.75691, xmin= -0.00137, parasitic=0.7402, |e|=0.136364	      1.000000    203.572050    -56.015338   -292.557649   -427.196344   -271.268842      0.000000     59.668657   -305.631254   -320.484164   -310.237454   -114.796578      0.000000      0.000000      0.000000    -38.170217    362.681799    -58.316759		12
W= 89.76035, xmin= -0.00135, parasitic=0.7318, |e|=0.404415	      1.000000    284.950681     24.449900     33.452911   -258.407145    157.378944      0.000000    -89.020339     22.940782    300.822134     33.191338   -172.344509      0.000000      0.000000      0.000000     33.768718   -258.903285     30.498808		13
W= 89.75581, xmin= -0.00137, parasitic=0.7404, |e|=0.180624	      1.000000   -123.835519    333.009876   -204.997227    153.097603   -392.069727      0.000000    -53.903527     31.176056     44.650735   -246.174318    326.061206      0.000000      0.000000      0.000000   -134.147381    343.991005   -231.660855		14
W= 89.78454, xmin= -0.01065, parasitic=0.7467, |e|=0.136364	      1.000000     34.103396   -420.602979    -30.047193     87.867905   -417.113907      0.000000    154.529430    -61.508100    180.095993   -108.404215    371.867991      0.000000      0.000000      0.000000     52.537943   -235.512929     14.696203		15
W= 89.75374, xmin= -0.00139, parasitic=0.7316, |e|=0.489392	      1.000000     28.663639   -138.924713     44.064525    420.340753      2.669112      0.000000    -26.547494    132.148589   -420.531962   -250.456259   -427.886573      0.000000      0.000000      0.000000     -5.904934    260.326887     53.562520		16
W= 89.77986, xmin= -0.00124, parasitic=0.7428, |e|=0.136364	      1.000000     25.685866    -39.302164    391.344673    232.439293    254.900519      0.000000    136.305323   -225.347826    116.045575    217.723295   -357.344302      0.000000      0.000000      0.000000   -112.756647    180.183583    -68.198834		17
W= 89.75973, xmin= -0.00135, parasitic=0.7369, |e|=0.140274	      1.000000    381.080012    239.022568    334.203023   -147.512079    266.191178      0.000000   -357.016897    344.155380    240.513603     63.616317   -216.542182      0.000000      0.000000      0.000000    -18.517658   -144.601978    -31.168430		18
W= 89.76699, xmin= -0.00131, parasitic=0.7370, |e|=0.136364	      1.000000    107.011466   -214.168536   -259.917980   -172.684619     51.079469      0.000000    201.677352   -406.919795    189.202022   -430.407307    413.204307      0.000000      0.000000      0.000000    -85.794106    337.041601   -271.407788		19
W= 89.76877, xmin= -0.00130, parasitic=0.7410, |e|=0.136364	      1.000000     31.099816    283.777003     -4.124611     -6.860574    376.483818      0.000000   -134.195783    110.878411   -276.463037   -102.745840   -165.034031      0.000000      0.000000      0.000000     15.649431     99.431587     11.141108		20
W= 89.75796, xmin= -0.00136, parasitic=0.7408, |e|=0.136364	      1.000000   -219.063328     40.749167   -146.841633    291.463272    304.645313      0.000000   -177.912851    288.961947    215.745549   -202.211167    -87.027854      0.000000      0.000000      0.000000     25.464944   -210.529958    -17.877108		21
W= 89.76663, xmin= -0.00131, parasitic=0.7417, |e|=0.136364	      1.000000     99.714629    209.863448   -367.191853    173.606977    253.456032      0.000000     89.904003   -330.632884    108.501680    385.754803    214.194288      0.000000      0.000000      0.000000    -83.670184    249.112338   -112.548350		22
W= 89.75009, xmin= -0.00140, parasitic=0.7244, |e|=0.136364	      1.000000   -249.795660   -422.294539   -371.731097    -64.092641   -416.636461      0.000000    272.919215   -169.252243   -271.474092    -95.730028   -138.558940      0.000000      0.000000      0.000000    -17.000242    201.591734    165.597548		23
W= 89.76301, xmin= -0.00133, parasitic=0.7388, |e|=0.136364	      1.000000   -204.213428     99.457138   -158.906589    123.908916    435.798693      0.000000    -86.745705    156.849191   -203.199164   -428.666459   -176.589077      0.000000      0.000000      0.000000     28.649724    152.811113     12.401047		24
W= 89.75367, xmin= -0.00138, parasitic=0.7275, |e|=0.136975	      1.000000    423.297815    -36.209715    -26.359224   -428.763901    142.120442      0.000000     48.171874   -340.166501   -362.083040    322.422908   -205.811639      0.000000      0.000000      0.000000    166.636434   -328.995177    250.832148		25
W= 89.75457, xmin= -0.00142, parasitic=0.7474, |e|=0.152973	      1.000000   -409.823383    305.812424    288.563875     38.376089    -92.372310      0.000000    -91.864401    391.633111   -234.252520   -246.881424    271.948837      0.000000      0.000000      0.000000   -189.743462    427.735709   -228.376029		26
W= 89.75019, xmin= -0.00140, parasitic=0.7366, |e|=0.201046	      1.000000    276.180038   -339.419187   -334.449580   -448.880809   -236.281081      0.000000     29.960097    -67.811298    207.833690   -326.915453   -360.141606      0.000000      0.000000      0.000000    253.413107   -439.262953    351.189204		27
W= 89.77134, xmin= -0.00128, parasitic=0.7390, |e|=0.205865	      1.000000   -259.374129    449.371598   -329.277865    403.184883   -110.579535      0.000000   -167.966249     51.272130     77.919328   -188.503527   -183.463488      0.000000      0.000000      0.000000     57.409102   -224.579562    127.959622		28
W= 89.75241, xmin= -0.00140, parasitic=0.7493, |e|=0.210654	      1.000000   -191.786137    129.130026   -312.829797     19.205950   -285.453443      0.000000   -217.726862    317.660768    -39.989494    355.536127   -298.595266      0.000000      0.000000      0.000000     77.821446   -350.707765    250.186521		29
W= 89.76256, xmin= -0.00134, parasitic=0.7413, |e|=0.494356	      1.000000    213.548364    318.581150     10.934892    -17.614539   -218.143078      0.000000   -125.893359    -54.867132    128.226298    260.461626    449.254358      0.000000      0.000000      0.000000   -167.390018    311.244687   -357.550872		30
W= 89.78134, xmin= -0.00123, parasitic=0.7448, |e|=0.136947	      1.000000    352.898897    329.075832    136.769069   -148.551863    160.126622      0.000000    -27.905167   -392.844772    372.529358   -447.061610    325.215678      0.000000      0.000000      0.000000     16.100104   -107.894580   -112.816334		31
W= 89.75446, xmin= -0.00139, parasitic=0.7435, |e|=0.136364	      1.000000    -15.727516   -187.021297    161.176836   -445.103397    -26.821952      0.000000    160.694198   -349.500503   -294.015474     64.348508    248.604151      0.000000      0.000000      0.000000    -77.851755    337.945794   -376.140783		32
W= 89.76236, xmin= -0.00133, parasitic=0.7380, |e|=0.211262	      1.000000    434.002513    235.079330    -44.575849   -389.433552   -208.107843      0.000000    -82.060360   -222.514668    364.322833     92.446762    401.999523      0.000000      0.000000      0.000000   -109.738777    238.481477   -268.240858		33
W= 89.75488, xmin= -0.00138, parasitic=0.7258, |e|=0.136364	      1.000000     20.928995   -327.392947    269.542790    161.484241    152.504733      0.000000    114.472827    -29.570414    421.567964   -438.124646    124.289900      0.000000      0.000000      0.000000     81.410609   -378.859490    -78.656568		34
W= 89.78756, xmin= -0.00119, parasitic=0.7468, |e|=0.136364	      1.000000     -8.832946    100.294506   -325.339728    -65.811852     62.690415      0.000000   -171.282613    286.107495   -376.086381   -425.466738    128.246495      0.000000      0.000000      0.000000    -23.071592    435.073550    -42.880603		35
W= 89.76263, xmin= -0.00133, parasitic=0.7312, |e|=0.480469	      1.000000   -245.240665    446.470245    349.908989    276.965008   -218.165050      0.000000     56.687945   -280.913379    -30.709237     64.157672    -10.457298      0.000000      0.000000      0.000000     78.832930   -320.458664     82.108958		36
W= 89.76705, xmin= -0.00131, parasitic=0.7423, |e|=0.163441	      1.000000   -203.843000    424.933439   -399.618249    315.005757   -207.471136      0.000000    -48.452572   -189.009794   -176.393002    168.717864   -102.851870      0.000000      0.000000      0.000000    -29.953563    236.853916    204.314353		37
W= 89.75350, xmin= -0.00139, parasitic=0.7415, |e|=0.136364	      1.000000   -149.790619   -104.075913   -138.855563    285.978942    424.769460      0.000000    -10.927132    251.046144   -252.037816   -278.533266    348.818309      0.000000      0.000000      0.000000    -74.116261    341.607228   -396.190807		38
W= 89.77773, xmin= -0.00125, parasitic=0.7417, |e|=0.136364	      1.000000   -178.960794    280.828044    207.133164    442.296637    118.973985      0.000000   -160.294640    266.169366     53.142887    344.490646    168.830815      0.000000      0.000000      0.000000   -106.544732    148.375906   -191.397292		39
W= 89.78756, xmin= -0.00119, parasitic=0.7465, |e|=0.136364	      1.000000   -341.992780    431.334392   -211.921671   -351.458616   -337.483949      0.000000   -260.033163    415.677100    293.517891    221.483085   -211.088126      0.000000      0.000000      0.000000   -138.962109    305.507126    -34.353886		40
W= 89.77169, xmin= -0.00129, parasitic=0.7483, |e|=0.136364	      1.000000    421.025843   -365.825979    448.040214   -211.352210    351.976519      0.000000    317.328312   -425.116573    237.696662    135.727328    277.993672      0.000000      0.000000      0.000000     30.629383   -387.450667   -130.539697		41
W= 89.75328, xmin= -0.00139, parasitic=0.7375, |e|=0.172628	      1.000000   -396.098535    419.808545   -184.677287    344.767852    -76.785761      0.000000    -93.015377    395.041624   -271.886952    182.686214    -56.846711      0.000000      0.000000      0.000000    -25.628668    113.510289    -67.100009		42
W= 89.77301, xmin= -0.00127, parasitic=0.7434, |e|=0.256286	      1.000000   -351.730449    417.553159     20.866873   -295.291437     29.606004      0.000000     14.182971    -64.630154    373.976682     54.223662    428.314058      0.000000      0.000000      0.000000    -37.519438     -7.912151   -202.232815		43
W= 89.75596, xmin= -0.00134, parasitic=0.7435, |e|=0.137342	      1.000000   -127.182246    243.741919   -399.325102    -72.178036    103.014820      0.000000   -102.073710     97.822805    206.013564    409.808908    212.854062      0.000000      0.000000      0.000000     45.853252   -316.643410     95.219448		44
W= 89.76309, xmin= -0.00130, parasitic=0.7382, |e|=0.136364	      1.000000    132.865068   -409.024850    178.845656   -316.580168   -391.798313      0.000000    201.879775   -264.517454   -289.610831    321.498627     55.238804      0.000000      0.000000      0.000000    -86.097366    416.051761   -223.843797		45
W= 89.76927, xmin= -0.00130, parasitic=0.7439, |e|=0.136364	      1.000000   -124.813930   -419.793286   -435.817314    175.944973   -194.533221      0.000000    136.652468     98.648960   -286.232273    370.189534   -186.701739      0.000000      0.000000      0.000000     28.117698     51.313153    200.068635		46
W= 89.76173, xmin= -0.00121, parasitic=0.7452, |e|=0.933924	      1.000000    430.602656     32.670987     87.929955     37.212202   -147.238043      0.000000   -175.191725     83.977770    -24.121277    331.111339     31.891646      0.000000      0.000000      0.000000     79.374536   -343.969791    289.976882		47
W= 89.76116, xmin= -0.00135, parasitic=0.7458, |e|=0.523493	      1.000000    445.891462    182.531786    315.299413    308.194728    202.827527      0.000000   -154.956620    -97.550614     76.331153   -150.881466   -254.617345      0.000000      0.000000      0.000000     76.332965   -250.376896    206.911878		48
W= 89.76277, xmin= -0.00133, parasitic=0.7470, |e|=0.163645	      1.000000    -64.369019     66.759265    428.293163   -297.993564    350.834466      0.000000    266.217011   -377.292410    103.929803    235.066500    -15.013322      0.000000      0.000000      0.000000   -134.120272    420.927133   -110.747602		49
W= 89.76674, xmin= -0.00131, parasitic=0.7451, |e|=0.141357	      1.000000    354.499789    -83.004965     73.826239    115.158505    338.651170      0.000000     62.125852   -410.431316     57.979900    322.380052   -142.543632      0.000000      0.000000      0.000000   -229.127839    447.203106   -401.205395		50
W= 89.75872, xmin= -0.00136, parasitic=0.7406, |e|=0.136364	      1.000000    215.906696    276.570148    336.335373   -138.929824   -130.746345      0.000000   -308.866599    251.171394   -393.345737     49.184195    415.882721      0.000000      0.000000      0.000000    136.822814   -369.464419     27.323412		51
W= 89.76769, xmin= -0.00130, parasitic=0.7339, |e|=0.136364	      1.000000     83.080319   -443.890715    -65.706305    103.698276    106.714828      0.000000    335.769080   -416.979548    -28.984432    -12.240426   -430.006958      0.000000      0.000000      0.000000     89.695269   -274.684735    189.040293		52
W= 89.77492, xmin= -0.00127, parasitic=0.7497, |e|=0.136364	      1.000000    123.438153   -139.648883    220.443532   -176.095605   -201.437351      0.000000     66.773780   -220.621085    -30.145988    -42.643143    228.795513      0.000000      0.000000      0.000000     42.631375    -92.926260     51.730424		53
W= 89.76506, xmin= -0.00117, parasitic=0.7475, |e|=0.136364	      1.000000     71.277364   -239.884499    153.245373   -133.699320   -168.412304      0.000000    201.577629   -382.071237   -257.443917    216.489029   -182.330474      0.000000      0.000000      0.000000    -54.464956    279.293071   -147.847875		54
W= 89.78117, xmin= -0.00123, parasitic=0.7424, |e|=0.136364	      1.000000   -354.554119    446.311372     81.684252   -413.604368    -55.834801      0.000000   -265.624200    385.508744    162.205483    211.822565    -93.401023      0.000000      0.000000      0.000000     94.570135   -397.473411     76.179853		55
W= 89.75013, xmin= -0.00140, parasitic=0.7329, |e|=0.136364	      1.000000     42.210504   -214.509656   -440.573314   -153.568236    370.404283      0.000000    -87.576810    261.800563   -100.940269    243.630479    352.401103      0.000000      0.000000      0.000000    125.133123   -354.631478    -16.636935		56
W= 89.77430, xmin= -0.00127, parasitic=0.7490, |e|=0.221059	      1.000000   -140.318297    274.411305    380.832643   -419.461366    339.893361      0.000000     -4.794404   -152.756636    221.118888     33.947865   -435.866453      0.000000      0.000000      0.000000   -134.924327    393.173609    -52.017944		57
W= 89.77080, xmin= -0.00129, parasitic=0.7448, |e|=0.298215	      1.000000   -234.766427    -15.942354    124.936655   -147.327346    382.481340      0.000000     48.505689     82.515378   -412.353322    -66.418583   -141.911231      0.000000      0.000000      0.000000    -84.344566    429.829116   -310.892319		58
W= 89.75424, xmin= -0.00139, parasitic=0.7446, |e|=0.186595	      1.000000    370.055015    444.510746     46.599669   -279.820392   -156.511270      0.000000   -297.722320    233.248532    213.590631   -425.828765    -17.685181      0.000000      0.000000      0.000000    141.948761   -293.591570    380.073389		59
W= 89.77610, xmin= -0.00126, parasitic=0.7411, |e|=0.136364	      1.000000    225.866903    417.117072     17.827242    -82.600120    -88.816168      0.000000   -257.230519     77.419135    161.928871   -178.408155    -86.069961      0.000000      0.000000      0.000000     49.255387   -230.086650     16.016344		60
W= 89.75719, xmin= -0.00136, parasitic=0.7305, |e|=0.136364	      1.000000   -193.153567    137.664650    230.649879   -224.949056    405.229602      0.000000   -101.109083    261.059260   -157.845227    326.640587   -440.994787      0.000000      0.000000      0.000000   -171.706160    446.557281   -142.064385		61
W= 89.77381, xmin= -0.00127, parasitic=0.7451, |e|=0.136364	      1.000000    -15.409174   -358.357756     95.849758     20.900664    299.911656      0.000000    124.990381    -81.283881   -105.440162   -356.560141   -301.189076      0.000000      0.000000      0.000000    154.475941   -300.944699    312.992857		62
W= 89.75264, xmin= -0.00139, parasitic=0.7258, |e|=0.136364	      1.000000   -224.008368    239.588537   -384.346759    373.256883   -213.866417      0.000000   -247.579827    385.790988   -121.044399   -123.754239    329.228064      0.000000      0.000000      0.000000    -68.641397    342.719265    -27.291667		63
W= 89.75983, xmin= -0.00135, parasitic=0.7365, |e|=0.136364	      1.000000   -149.642476    232.876448    195.447139   -315.372119   -259.799635      0.000000   -116.214152    279.994735     84.064685    230.322790    422.651211      0.000000      0.000000      0.000000     98.962980   -351.615634    166.033683		64
W= 89.77370, xmin= -0.00127, parasitic=0.7416, |e|=0.136364	      1.000000   -119.585281   -410.405049   -341.831290   -398.619320   -289.039836      0.000000    266.499853   -108.715141   -337.009451    -41.325805    -50.915688      0.000000      0.000000      0.000000    -19.588155    411.934521    136.832079		65
W= 89.76759, xmin= -0.00131, parasitic=0.7367, |e|=0.136364	      1.000000   -355.888651    209.885524    288.800991    386.506721    422.224534      0.000000   -136.705168    403.295108   -256.660933   -363.825009    191.296996      0.000000      0.000000      0.000000    168.453619   -446.354337    218.277582		66
W= 89.75469, xmin= -0.00138, parasitic=0.7458, |e|=0.136364	      1.000000   -136.839927    446.053755    219.909726    141.824550    102.534901      0.000000   -228.179359    -10.567296   -270.575852    246.990765   -102.668197      0.000000      0.000000      0.000000    -53.659587    319.309033     84.184524		67
W= 89.77380, xmin= -0.00127, parasitic=0.7399, |e|=0.136364	      1.000000    -15.974678    177.005456    -82.368730   -329.398366   -323.396976      0.000000   -219.981416    318.602933    216.894260   -254.519019   -192.980537      0.000000      0.000000      0.000000    110.816830   -408.620823    201.273262		68
W= 89.75120, xmin= -0.00140, parasitic=0.7291, |e|=0.136364	      1.000000    353.730883   -371.093824   -118.322881    399.338280    -70.767732      0.000000    147.095374   -387.784454   -190.678985    140.142182    -16.355951      0.000000      0.000000      0.000000    -78.070969    257.248501   -146.905876		69
W= 89.78731, xmin= -0.00120, parasitic=0.7472, |e|=0.136364	      1.000000    205.053204   -447.980278     14.744914   -291.852747    -85.349780      0.000000    179.676852   -236.239294   -260.869050    352.106335    166.700136      0.000000      0.000000      0.000000    -95.866478    402.188360   -213.112997		70
W= 89.75389, xmin= -0.00138, parasitic=0.7254, |e|=0.136364	      1.000000    249.778179    277.106497    306.484130   -190.833469   -206.732775      0.000000   -335.932263    375.208305   -267.207101    396.322805    393.191487      0.000000      0.000000      0.000000    154.383015   -442.886902     75.392282		71
W= 89.77341, xmin= -0.00128, parasitic=0.7395, |e|=0.136364	      1.000000   -420.874000    301.711110    185.072523   -212.225958    -52.911867      0.000000   -141.785393    338.736159    -84.673817     51.826361   -304.368429      0.000000      0.000000      0.000000    -82.787400    304.828031    -83.480538		72
W= 89.75252, xmin= -0.00124, parasitic=0.7412, |e|=0.259950	      1.000000   -444.196089      6.104485    357.888467    -83.535750   -287.858455      0.000000    -30.635936    446.981783     14.664904    287.079280    271.872993      0.000000      0.000000      0.000000    -19.322455    -70.772584    -51.677530		73
W= 89.76658, xmin= -0.00132, parasitic=0.7409, |e|=0.136364	      1.000000     61.196787   -101.398146   -299.595644     80.229810   -104.684550      0.000000    156.404339   -401.199109   -360.508825    310.201802    390.342009      0.000000      0.000000      0.000000    -13.818156    150.176936   -103.909879		74
W= 89.78440, xmin= -0.00121, parasitic=0.7465, |e|=0.186271	      1.000000    145.871553   -123.672604   -163.408271   -241.409270     51.011515      0.000000     10.454118    -37.319092   -340.029732   -434.576056    -82.523089      0.000000      0.000000      0.000000    201.565199   -279.494102    289.304566		75
W= 89.78260, xmin= -0.00122, parasitic=0.7442, |e|=0.136364	      1.000000     28.109706   -144.750998    226.329999    396.554580    366.367569      0.000000    179.337366   -287.740688   -438.788134    162.993651    -28.857024      0.000000      0.000000      0.000000    -88.111821    404.176073   -145.697014		76
W= 89.76893, xmin= -0.00130, parasitic=0.7381, |e|=0.136364	      1.000000   -111.003687   -339.033308      7.612326   -409.924594   -438.708482      0.000000    332.640531   -247.251951    307.020835   -382.394822    429.486220      0.000000      0.000000      0.000000     15.876319   -110.743508   -144.467287		77
W= 89.76003, xmin= -0.00123, parasitic=0.7453, |e|=0.266667	      1.000000   -384.948700     76.805853   -373.350736   -322.384302   -170.959585      0.000000     65.483532     44.798017     55.800206    395.976358   -442.311669      0.000000      0.000000      0.000000    -62.385323    230.381951    -19.665090		78
W= 89.76706, xmin= -0.00131, parasitic=0.7424, |e|=0.184317	      1.000000    407.629747    302.728907    193.089297   -168.364858    309.226480      0.000000   -346.083307    355.522422    424.531421   -356.166851   -112.060281      0.000000      0.000000      0.000000    143.442087   -381.223452     37.365952		79
W= 89.75069, xmin= -0.00141, parasitic=0.7337, |e|=0.310915	      1.000000   -403.174283   -307.750817    148.829631    384.901589   -396.761349      0.000000    277.216326   -143.265907    -35.346429    424.243721    -43.232131      0.000000      0.000000      0.000000    -92.175318    185.375119    -58.907914		80
W= 89.77018, xmin= -0.00129, parasitic=0.7481, |e|=0.144633	      1.000000    312.908257   -272.294888   -151.008126   -390.823532      1.674739      0.000000     91.619031   -333.786282    128.037682    234.468681   -270.560644      0.000000      0.000000      0.000000   -160.473835    347.232302   -205.657646		81
W= 89.76490, xmin= -0.00121, parasitic=0.7450, |e|=0.136364	      1.000000    229.479098   -358.442531    268.651730     35.479758    245.771317      0.000000    127.166822   -221.074765   -100.832155     43.142801     47.979357      0.000000      0.000000      0.000000   -109.140615    399.570960   -372.504755		82
W= 89.76061, xmin= -0.00135, parasitic=0.7461, |e|=0.136364	      1.000000   -304.176650    -12.993181   -173.791844   -428.046792   -408.381869      0.000000    -61.559614    133.859081    325.347034    126.142931    300.659052      0.000000      0.000000      0.000000     57.538204   -431.978808    -79.213578		83
W= 89.76388, xmin= -0.00133, parasitic=0.7439, |e|=0.199940	      1.000000    259.186802    385.719823   -105.257597    272.735850    399.004900      0.000000    -69.011327   -305.772107      3.714090    230.245064     56.042764      0.000000      0.000000      0.000000   -151.120740    329.615907   -444.427842		84
W= 89.77866, xmin= -0.00124, parasitic=0.7463, |e|=0.136364	      1.000000   -280.733990   -333.579192   -365.318709    372.448903   -350.623972      0.000000    340.813805   -396.248697    -49.293573    287.493159     34.095824      0.000000      0.000000      0.000000    -94.236589    158.538951     50.012541		85
W= 89.77840, xmin= -0.00125, parasitic=0.7419, |e|=0.136364	      1.000000   -413.228065    142.927180    240.578724   -204.941619    212.041076      0.000000    -80.557835    312.621383   -189.012503    122.274623    165.274025      0.000000      0.000000      0.000000     91.823004   -224.549279     27.974817		86
W= 89.75890, xmin= -0.00126, parasitic=0.7430, |e|=0.142345	      1.000000    292.205456   -224.859041   -278.637209    281.072687   -282.327805      0.000000     89.304719   -376.046226     38.519136    146.023829   -235.102781      0.000000      0.000000      0.000000   -162.680729    423.508013   -351.139000		87
W= 89.75360, xmin= -0.00139, parasitic=0.7446, |e|=0.136364	      1.000000    -56.410911    316.252343    -75.069160     23.892977    413.521413      0.000000   -174.402043    404.359990     14.495427     57.836666   -310.835299      0.000000      0.000000      0.000000    117.861074   -294.408131    373.574866		88
W= 89.75242, xmin= -0.00139, parasitic=0.7264, |e|=0.208108	      1.000000   -285.772452     92.640981   -215.418021    411.108767   -202.913788      0.000000     31.324287    -35.753705    188.187009    211.051199   -173.247960      0.000000      0.000000      0.000000   -136.696170    314.868607     90.329586		89
W= 89.76119, xmin= -0.00134, parasitic=0.7382, |e|=0.136364	      1.000000    231.612470   -386.775976     85.761442   -286.461290   -195.549111      0.000000    116.687393   -214.345387   -243.277639   -328.917492    153.369410      0.000000      0.000000      0.000000    162.447264   -211.995308    185.424464		90
W= 89.76476, xmin= -0.00132, parasitic=0.7364, |e|=0.188662	      1.000000    426.299237     66.023894   -375.390939    174.875895     22.583983      0.000000    -31.247652   -275.243811    242.235729   -302.470260    270.263551      0.000000      0.000000      0.000000     68.910124   -212.376573    106.806749		91
W= 89.75986, xmin= -0.00135, parasitic=0.7319, |e|=0.136364	      1.000000   -130.128012    363.866494    261.528733    225.840632    316.666520      0.000000   -360.739962    408.116598   -143.049748    -43.890326    244.309752      0.000000      0.000000      0.000000   -102.615771    410.758375   -170.956910		92
W= 89.76273, xmin= -0.00133, parasitic=0.7310, |e|=0.136364	      1.000000    420.355995    419.350911   -260.268899     31.048078     72.140835      0.000000    -22.839407   -424.770758    415.407144   -428.321560     30.886585      0.000000      0.000000      0.000000     84.225484   -355.379583     23.524572		93
W= 89.75958, xmin= -0.00135, parasitic=0.7339, |e|=0.979394	      1.000000    427.129767   -418.926298   -267.552524    432.847491   -315.346908      0.000000   -165.129896    378.572487   -307.964325    287.200524    -93.883533      0.000000      0.000000      0.000000     19.336411    -50.803447    215.181848		94
W= 89.77055, xmin= -0.00129, parasitic=0.7377, |e|=0.267511	      1.000000    445.501537   -412.571499   -307.532912     87.951092   -147.918075      0.000000    -45.549323    110.841447    274.682866   -239.682413   -417.590901      0.000000      0.000000      0.000000     71.540856   -301.048598    276.391854		95
W= 89.77527, xmin= -0.00127, parasitic=0.7480, |e|=0.243797	      1.000000   -109.590580    135.799856   -215.969834   -351.431632   -379.536654      0.000000    112.363703   -307.470381   -357.867280    -59.211971    275.507564      0.000000      0.000000      0.000000    -80.190053    439.911820   -278.835825		96
W= 89.75340, xmin= -0.00139, parasitic=0.7337, |e|=0.486307	      1.000000    429.221666   -337.399647   -291.509795    -46.248190   -268.180038      0.000000   -118.873346    198.672196     62.604979   -229.698466     77.258031      0.000000      0.000000      0.000000    173.829432   -375.663286    298.499933		97
W= 89.76637, xmin= -0.00131, parasitic=0.7427, |e|=0.272469	      1.000000   -423.010696    434.441577   -189.071408   -404.876637   -253.695095      0.000000     29.380119    -25.422066    404.414923    149.010199   -142.384760      0.000000      0.000000      0.000000    -15.157480    -85.780170     66.049198		98
W= 89.76019, xmin= -0.00135, parasitic=0.7362, |e|=0.137015	      1.000000   -363.281808   -265.168836    177.348982    316.414599   -287.734144      0.000000      7.548019    442.763001     81.206892    -56.236154    163.345479      0.000000      0.000000      0.000000   -185.648010    416.961270   -359.054702		99
W= 89.77873, xmin= -0.00125, parasitic=0.7498, |e|=0.367139	      1.000000   -235.870971    448.545108    -81.667739     84.903337     33.427918      0.000000     37.411256   -270.780262    -84.706265   -117.357665   -331.745970      0.000000      0.000000      0.000000    -85.124399    441.237897    -56.181037		100
W= 89.77164, xmin= -0.00129, parasitic=0.7451, |e|=0.157950	      1.000000   -295.735575   -275.748632   -212.231373      7.777889   -218.923673      0.000000     32.254322    354.207298     10.076695    266.357128    265.711340      0.000000      0.000000      0.000000   -180.960398    440.522085   -415.194004		101
W= 89.75278, xmin= -0.00139, parasitic=0.7422, |e|=0.678653	      1.000000    329.081000    -56.742899     82.432507     96.421090   -388.422257      0.000000   -211.826225    340.030124    120.006083    429.769736    225.771661      0.000000      0.000000      0.000000   -173.647693    237.307743   -326.519140		102
W= 89.75645, xmin= -0.00135, parasitic=0.7336, |e|=0.136364	      1.000000    -15.244183     87.026038   -408.940011    -84.028017   -221.579858      0.000000    -88.602751    191.158454     82.925835    -18.850975    402.665108      0.000000      0.000000      0.000000    -82.126725    298.273650   -282.730705		103
W= 89.75237, xmin= -0.00139, parasitic=0.7274, |e|=0.176032	      1.000000    364.754310     28.426399    -12.802153   -369.438507    329.834919      0.000000    -16.010740   -213.829237    378.329043   -408.708419   -421.938852      0.000000      0.000000      0.000000    153.040728   -440.103640    185.985458		104
W= 89.76957, xmin= -0.00129, parasitic=0.7393, |e|=0.136364	      1.000000   -217.451693    406.176759    431.848313     44.694273    -86.499853      0.000000   -205.444469    309.784825    312.307361   -219.933484    258.621895      0.000000      0.000000      0.000000     43.321827   -391.308578     72.174605		105
W= 89.78199, xmin= -0.00123, parasitic=0.7467, |e|=0.136364	      1.000000   -118.298052    159.105392   -153.665189    302.733950   -252.846506      0.000000   -187.292237    431.518963    133.616388   -125.061667    -95.057200      0.000000      0.000000      0.000000   -130.358036    300.752142   -117.324471		106
W= 89.75362, xmin= -0.00139, parasitic=0.7442, |e|=0.273776	      1.000000    371.013026    119.327217    333.949223    -24.062264    265.611701      0.000000    -68.936453   -260.520201    125.815644    416.573994   -283.169839      0.000000      0.000000      0.000000   -168.257940    243.566599   -421.527358		107
W= 89.75374, xmin= -0.00138, parasitic=0.7366, |e|=0.149214	      1.000000   -310.943875    205.684651    411.116624   -362.452303    -31.292296      0.000000    -65.009934    273.070172    173.512601   -369.115648    -15.240620      0.000000      0.000000      0.000000    213.126571   -436.536821    144.160285		108
W= 89.76591, xmin= -0.00132, parasitic=0.7386, |e|=0.136364	      1.000000   -222.999230    421.586695   -449.487450    232.579847    -82.689443      0.000000   -101.682928     47.823939    402.415789   -113.106560    148.507306      0.000000      0.000000      0.000000   -146.624663    397.827788   -243.871763		109
W= 89.76546, xmin= -0.00132, parasitic=0.7353, |e|=0.136364	      1.000000    227.495045   -373.383727   -250.955683     41.211178   -402.089163      0.000000    123.382042   -180.282245   -173.803453    -46.041558     42.931989      0.000000      0.000000      0.000000    -76.357537    353.379465    -72.136691		110
W= 89.75651, xmin= -0.00137, parasitic=0.7405, |e|=0.136364	      1.000000     93.349628     25.211927    270.850076    161.758133    183.181988      0.000000   -262.970663    402.065351    163.696718    203.035979    331.671476      0.000000      0.000000      0.000000     10.486731   -285.227680    -86.277192		111
W= 89.76825, xmin= -0.00131, parasitic=0.7382, |e|=0.136364	      1.000000    347.128855   -394.306341    264.327202    378.916403    447.667256      0.000000    210.356575   -367.244867    -40.021993   -154.178402    340.908372      0.000000      0.000000      0.000000     60.729194   -246.019568    -41.577275		112
W= 89.76780, xmin= -0.00131, parasitic=0.7395, |e|=0.151690	      1.000000    344.507053    327.424725     92.642086    279.216773    -13.190469      0.000000   -304.693740    281.828552     72.987957    -78.669020    202.668951      0.000000      0.000000      0.000000    111.136182   -368.220976    157.219205		113
W= 89.78730, xmin= -0.00120, parasitic=0.7474, |e|=0.136364	      1.000000   -208.256464    301.846153    217.550167   -400.504409    409.955377      0.000000   -150.875110    263.706950    -32.945504    127.737464     71.629484      0.000000      0.000000      0.000000    -95.570962    327.250759   -272.623000		114
W= 89.76841, xmin= -0.00130, parasitic=0.7371, |e|=0.136364	      1.000000    106.611009   -419.567005    103.014713     -8.775303    257.098551      0.000000    190.919723   -225.883158   -295.306981    343.676142   -259.716949      0.000000      0.000000      0.000000   -110.922897    379.171585   -140.802109		115
W= 89.77057, xmin= -0.00129, parasitic=0.7376, |e|=0.136364	      1.000000    168.504485    327.061323   -362.351230   -220.061711    167.752940      0.000000   -191.332104     82.544692    218.716966   -435.364931     19.283513      0.000000      0.000000      0.000000     64.495335   -134.465360     47.621563		116
W= 89.76390, xmin= -0.00133, parasitic=0.7335, |e|=0.149233	      1.000000   -432.216478    307.892197    356.482734   -287.245374    -74.537252      0.000000    -76.114688    221.833060    131.874700   -161.463974    328.180286      0.000000      0.000000      0.000000    106.953512   -349.957309      0.501497		117
W= 89.78073, xmin= -0.00123, parasitic=0.7450, |e|=0.136364	      1.000000     42.829119   -255.553560   -181.549940   -383.439701   -319.194171      0.000000   -117.826136    411.664495    447.234713    120.074881    -26.738831      0.000000      0.000000      0.000000   -202.642161    400.423392   -195.305981		118
W= 89.78207, xmin= -0.00855, parasitic=0.7428, |e|=0.188128	      1.000000    347.121405    113.783544   -337.605142     -4.462774    313.500472      0.000000    -43.682736   -162.847469    393.750161   -180.276557   -282.054242      0.000000      0.000000      0.000000     70.279365   -311.631402     82.766489		119
W= 89.75396, xmin= -0.00138, parasitic=0.7276, |e|=0.136364	      1.000000   -174.857950    255.300727     76.214570    -84.358997   -288.657758      0.000000   -235.739137    445.878933    259.553635    -72.696535    267.451606      0.000000      0.000000      0.000000   -178.609360    436.546902   -292.657932		120
W= 89.76757, xmin= -0.00131, parasitic=0.7432, |e|=0.136364	      1.000000    112.568423    435.573302    264.779922   -334.299769   -121.842251      0.000000   -323.424481    125.794074    -95.892173   -255.932726    172.259788      0.000000      0.000000      0.000000    129.317535   -427.154545    -99.164514		121
W= 89.75603, xmin= -0.00137, parasitic=0.7386, |e|=0.143062	      1.000000    291.525885   -265.994597    -19.421128    282.545598   -111.392413      0.000000     55.558974    -25.827119   -209.620802   -318.674594   -271.577079      0.000000      0.000000      0.000000    -49.729131    377.865265     14.659369		122
W= 89.77215, xmin= -0.00121, parasitic=0.7457, |e|=0.365192	      1.000000    334.615140   -364.773726    116.595652    -13.353262     -8.960215      0.000000    -64.453124    177.981603    -98.340270   -290.801937   -193.379488      0.000000      0.000000      0.000000    107.939200   -296.158573    267.684350		123
W= 89.76854, xmin= -0.00130, parasitic=0.7380, |e|=0.136364	      1.000000   -199.112083    207.925313    336.558016   -404.599780    175.496856      0.000000   -200.840493    311.866438     37.075061    -80.871741    263.274308      0.000000      0.000000      0.000000     78.916799   -284.998650    -75.862051		124
W= 89.75165, xmin= -0.00140, parasitic=0.7398, |e|=0.172266	      1.000000   -316.701533    393.186841    173.547020   -431.801212     43.879088      0.000000    -77.682271    246.837348   -242.150106    292.535632    319.695994      0.000000      0.000000      0.000000   -144.894848    418.924138   -442.934586		125
W= 89.76782, xmin= -0.00131, parasitic=0.7425, |e|=0.136364	      1.000000   -257.385130   -415.752285      7.385644   -287.044525    434.557631      0.000000     -7.516007    385.921129   -325.632563   -288.081834    -45.096974      0.000000      0.000000      0.000000    187.301457   -410.683740    131.009642		126
W= 89.77018, xmin= -0.00129, parasitic=0.7392, |e|=0.213797	      1.000000   -288.231063     76.698440   -433.936402    416.347726    -44.335715      0.000000   -115.770037    430.741466   -120.958221    254.374589     56.393401      0.000000      0.000000      0.000000    110.446304   -329.492620    280.619997		127
W= 89.77796, xmin= -0.00125, parasitic=0.7414, |e|=0.137732	      1.000000    347.465531   -408.307245    -51.029004    354.258711   -344.245842      0.000000    110.028862   -163.270804   -356.978178    212.803042     25.122622      0.000000      0.000000      0.000000   -111.357124    397.778921    -24.906169		128
W= 89.78144, xmin= -0.00123, parasitic=0.7490, |e|=0.136364	      1.000000   -296.283558    -97.237173    173.288967    -44.627130    150.407133      0.000000    -34.019241    387.232213   -440.667210   -307.687476   -128.051110      0.000000      0.000000      0.000000    158.973690   -182.940940    234.085694		129
W= 89.77351, xmin= -0.00127, parasitic=0.7441, |e|=0.329990	      1.000000   -325.914060    406.912100   -372.142006   -319.194216   -224.478238      0.000000     44.840282   -149.266356   -279.757087   -377.238414   -309.035727      0.000000      0.000000      0.000000    232.422412   -316.249303    405.072969		130
W= 89.77681, xmin= -0.00125, parasitic=0.7411, |e|=0.136364	      1.000000   -223.970839    180.044900   -348.375679    168.492659    314.647714      0.000000    -95.938385    123.627578   -115.347243    444.983715   -351.422347      0.000000      0.000000      0.000000   -116.176584    426.544772     80.332585		131
W= 89.75300, xmin= -0.00139, parasitic=0.7407, |e|=0.136364	      1.000000   -222.825840    184.646578   -114.463876    229.133049   -292.443841      0.000000   -257.303623    344.038082   -328.640192    274.253864   -213.912873      0.000000      0.000000      0.000000    -43.045770    337.688347    111.624463		132
W= 89.77625, xmin= -0.00126, parasitic=0.7482, |e|=0.136364	      1.000000   -338.394659    236.774008    169.861625    267.520527   -357.323083      0.000000    -69.516857     23.985477    142.721942    383.936130   -268.441155      0.000000      0.000000      0.000000     16.643566   -362.132043    100.007257		133
W= 89.75567, xmin= -0.00137, parasitic=0.7480, |e|=0.143925	      1.000000   -308.120850    205.010571     31.250950    147.287424   -277.553504      0.000000    -80.923701    359.637050    -27.394880     22.216994   -312.049659      0.000000      0.000000      0.000000   -198.831967    341.162731    -86.713002		134
W= 89.75227, xmin= -0.00140, parasitic=0.7403, |e|=0.302978	      1.000000    160.859356   -100.345107    286.756836    282.438222    -13.578683      0.000000    -30.823459     54.604493    306.720706    -20.511186   -418.832644      0.000000      0.000000      0.000000     18.841245   -432.375229    196.519807		135
W= 89.75521, xmin= -0.00131, parasitic=0.7361, |e|=0.138012	      1.000000    408.773195    428.407197   -150.123846   -441.600872    316.137117      0.000000   -367.265000    312.521815    421.735651    313.581872   -323.286644      0.000000      0.000000      0.000000     55.321675   -419.961062    283.315495		136
W= 89.76031, xmin= -0.00135, parasitic=0.7374, |e|=0.136364	      1.000000    -90.172958   -372.688030   -345.571742    -46.168944    -40.909304      0.000000    366.531218   -431.821389    -67.056192    233.302960    441.659605      0.000000      0.000000      0.000000    -54.623439    300.971445   -186.402088		137
W= 89.77519, xmin= -0.00126, parasitic=0.7410, |e|=0.136364	      1.000000   -134.660786    249.784319    293.356588    -54.048469   -427.917653      0.000000   -130.708683     86.143704   -173.751212   -334.190058    237.982723      0.000000      0.000000      0.000000    127.638144   -354.901942      6.941210		138
W= 89.78016, xmin= -0.00123, parasitic=0.7461, |e|=0.245213	      1.000000   -133.149279     39.585457     76.392364   -154.991459   -164.620057      0.000000     22.331612    -22.675409   -353.272594    390.661665   -128.757664      0.000000      0.000000      0.000000    -39.103954    278.566272     97.205214		139
W= 89.76972, xmin= -0.00129, parasitic=0.7452, |e|=0.136364	      1.000000   -341.941288    -91.357603    266.876059    232.247846     10.576752      0.000000    -35.951324    206.247254    101.186753    355.471882   -228.539722      0.000000      0.000000      0.000000   -130.992855    288.492756    -25.282792		140
W= 89.77311, xmin= -0.00128, parasitic=0.7473, |e|=0.136364	      1.000000    125.902204   -382.212797    -75.587370   -420.016814   -153.402830      0.000000    142.895511   -265.940743    364.945957      3.738814    131.240870      0.000000      0.000000      0.000000    118.427412   -395.991189    313.610022		141
W= 89.76028, xmin= -0.00135, parasitic=0.7331, |e|=0.136364	      1.000000    291.543852   -207.019107    390.676939     24.107483    368.396365      0.000000    133.759815   -399.108510    358.155969    386.517591     -6.485179      0.000000      0.000000      0.000000     30.550186   -427.588580     88.033052		142
W= 89.76053, xmin= -0.00134, parasitic=0.7466, |e|=0.156822	      1.000000   -257.943843    115.441697    135.532124   -374.391827   -247.414065      0.000000    -37.848033    239.132263    383.664837    152.136277    254.480502      0.000000      0.000000      0.000000    113.381815   -327.649711     13.477787		143
W= 89.75802, xmin= -0.00136, parasitic=0.7332, |e|=0.156902	      1.000000    207.954974    -48.074555   -321.594793   -413.248370    129.221661      0.000000     15.477675   -145.673938   -359.185124    405.510352   -309.039966      0.000000      0.000000      0.000000    -69.880444    299.620585     64.892890		144
W= 89.75885, xmin= -0.00136, parasitic=0.7350, |e|=0.188230	      1.000000   -365.434539    217.811057    229.165018   -246.556813    151.480088      0.000000    -18.250526    183.236948   -113.345993    328.470489    347.477880      0.000000      0.000000      0.000000   -151.292186    417.906017   -444.677759		145
W= 89.77767, xmin= -0.00125, parasitic=0.7430, |e|=0.136364	      1.000000   -215.151765   -327.131608   -374.644566    -39.962776    416.824380      0.000000    230.240618   -167.564782   -149.518417   -314.267004   -444.761716      0.000000      0.000000      0.000000      3.952825    180.639774     87.026675		146
W= 89.75470, xmin= -0.00115, parasitic=0.7481, |e|=0.302922	      1.000000    169.297111   -207.869209    381.490856     30.936820     -6.601309      0.000000   -151.912454    389.951665   -105.381592    -70.867841    209.542848      0.000000      0.000000      0.000000    -82.794577    310.242009   -344.209028		147
W= 89.76066, xmin= -0.00135, parasitic=0.7375, |e|=0.223155	      1.000000   -420.435570   -232.944866    144.548439    -71.488034   -374.005424      0.000000     75.977458    295.702157    426.617559   -252.782839   -164.784688      0.000000      0.000000      0.000000     89.280576   -388.599968    290.975705		148
W= 89.75940, xmin= -0.00135, parasitic=0.7448, |e|=1.119829	      1.000000    348.844277   -315.636264   -277.924693     -8.223012    105.173631      0.000000   -138.913526    291.675916   -260.518670    352.024729   -159.904598      0.000000      0.000000      0.000000    174.000249   -338.872857    303.061699		149
W= 89.76500, xmin= -0.00132, parasitic=0.7341, |e|=0.136364	      1.000000     93.580791   -319.454214   -186.266560    153.307317   -236.151455      0.000000    105.871907    -77.210557   -168.093192   -307.826516     -9.598594      0.000000      0.000000      0.000000    -42.335016    250.648032     22.985358		150
W= 89.76091, xmin= -0.00134, parasitic=0.7303, |e|=0.136364	      1.000000   -238.818322    212.926449   -140.221467    -25.028225     31.946449      0.000000   -197.932667    288.382654    408.064916    -85.527747   -145.290989      0.000000      0.000000      0.000000   -156.423210    366.085356    -93.546090		151
W= 89.75551, xmin= -0.00137, parasitic=0.7422, |e|=0.162600	      1.000000    352.184764   -346.588579    196.797346   -281.250922     29.737533      0.000000     81.279412   -299.382082     33.102915    -81.043114     16.303676      0.000000      0.000000      0.000000   -138.985949    347.600611   -299.133554		152
W= 89.75860, xmin= -0.00907, parasitic=0.7344, |e|=0.136364	      1.000000    285.953162   -117.847791     62.857122    441.988931   -236.278489      0.000000    295.105908   -336.855251    249.291022   -395.912639   -266.181820      0.000000      0.000000      0.000000     64.814520   -440.701270    -31.772228		153
W= 89.75869, xmin= -0.00136, parasitic=0.7342, |e|=0.136364	      1.000000    -27.359176    -49.880854    282.803009    118.639008    -34.858892      0.000000    214.142259   -397.188307    271.712842    104.888264     76.880036      0.000000      0.000000      0.000000     24.606594   -364.506817     74.316170		154
W= 89.75395, xmin= -0.00138, parasitic=0.7248, |e|=0.136364	      1.000000    -90.123354   -388.506502   -102.972200   -122.688358   -317.880685      0.000000    350.624469   -330.616273   -136.243061    256.096615    345.306468      0.000000      0.000000      0.000000    -53.727447    223.638671    -23.906345		155
W= 89.75320, xmin= -0.00139, parasitic=0.7423, |e|=0.136364	      1.000000   -236.625187     43.864103   -189.912738    257.767877    394.444579      0.000000    276.750962   -399.032871   -367.141566    135.998353    353.441424      0.000000      0.000000      0.000000    -30.416041    412.535297   -122.014125		156
W= 89.75840, xmin= -0.00136, parasitic=0.7304, |e|=0.136364	      1.000000     27.465756   -421.185226    251.504922    378.673788   -271.537856      0.000000    318.323881   -198.614686    254.765085   -427.646613    292.801019      0.000000      0.000000      0.000000    -15.655986   -110.104913   -136.211793		157
W= 89.76867, xmin= -0.00130, parasitic=0.7367, |e|=0.286990	      1.000000    165.119298   -219.404664   -179.571155    273.731009   -348.447582      0.000000   -150.613184    380.850530    309.154665    -57.633443   -345.972866      0.000000      0.000000      0.000000   -207.016289    432.509263    -92.885337		158
W= 89.75904, xmin= -0.00136, parasitic=0.7494, |e|=0.475944	      1.000000    226.001118   -421.631723      5.964671    396.355018   -318.214908      0.000000    -40.804952    177.530018   -409.483253    449.071388    182.246090      0.000000      0.000000      0.000000    -26.781655     29.138467    -15.593038		159
W= 89.75342, xmin= -0.00139, parasitic=0.7489, |e|=0.375455	      1.000000   -445.579902   -270.582537   -283.724821   -155.929519     39.517030      0.000000    134.329789    221.492786   -170.546425   -303.114064    175.797364      0.000000      0.000000      0.000000    176.653274   -204.484940    281.711118		160
W= 89.77187, xmin= -0.00128, parasitic=0.7371, |e|=0.136364	      1.000000     80.659715    425.175447   -190.942982   -392.707016    123.570368      0.000000   -119.474076    -96.263327    449.116452    243.203328     78.968611      0.000000      0.000000      0.000000   -172.819261    385.804264   -199.366967		161
W= 89.76919, xmin= -0.00120, parasitic=0.7471, |e|=0.136364	      1.000000   -146.527441    283.036392    149.815775    257.111988     56.650280      0.000000   -111.383553    158.834776    393.149193   -399.093632    -74.945097      0.000000      0.000000      0.000000     46.796887   -395.751975    207.217875		162
W= 89.76800, xmin= -0.00132, parasitic=0.7335, |e|=0.136364	      1.000000   -220.938166    305.804038   -384.884114    191.723430    -17.173226      0.000000   -259.777560    370.394120    -38.632376   -146.190138    326.693412      0.000000      0.000000      0.000000    122.959769   -311.846224     68.703553		163
W= 89.78610, xmin= -0.00120, parasitic=0.7473, |e|=0.136364	      1.000000   -387.969593    251.538660    417.416760   -370.841643    345.570742      0.000000   -144.972146    447.994722   -350.085631    -87.806145    171.500121      0.000000      0.000000      0.000000    197.332753   -404.094728    182.792938		164
W= 89.76529, xmin= -0.00132, parasitic=0.7348, |e|=0.149037	      1.000000   -158.371924     11.863890   -161.075850    279.450524   -421.530811      0.000000   -137.777007    394.794317    336.645826   -437.973047    130.081755      0.000000      0.000000      0.000000     -8.743175    -73.645048     42.102443		165
W= 89.75642, xmin= -0.00138, parasitic=0.7369, |e|=0.157711	      1.000000   -449.264157    356.707698    105.790707    -10.405382   -137.629401      0.000000    -59.245859    101.922965   -132.459289   -121.714177    -87.410542      0.000000      0.000000      0.000000     92.391640   -290.381830    204.041212		166
W= 89.75494, xmin= -0.00138, parasitic=0.7375, |e|=0.256655	      1.000000    313.305013   -337.162196    123.661630   -153.998883   -365.259106      0.000000    -34.961560    196.643782    246.716209   -449.522267    312.293735      0.000000      0.000000      0.000000     46.258781   -274.928674    -78.210539		167
W= 89.76653, xmin= -0.00131, parasitic=0.7493, |e|=0.185429	      1.000000   -164.053210     94.988411    209.166776     48.286219    224.941279      0.000000    176.457077   -404.534239    -20.407370    194.567952    -19.622878      0.000000      0.000000      0.000000    150.914258   -384.402405    189.869315		168
W= 89.77051, xmin= -0.00129, parasitic=0.7415, |e|=0.136364	      1.000000    313.666012   -373.632633    381.741454    290.045515    -60.816791      0.000000    164.987493   -365.913732    283.526153    182.288667    184.043403      0.000000      0.000000      0.000000     77.494977   -424.757778     20.064660		169
W= 89.75894, xmin= -0.00136, parasitic=0.7316, |e|=0.136364	      1.000000    286.994597    201.958938    138.446153    109.043644    -61.681465      0.000000   -281.614747    324.726028   -256.705775    408.885349   -234.577577      0.000000      0.000000      0.000000   -107.069111    315.501046   -103.038531		170
W= 89.76023, xmin= -0.00123, parasitic=0.7424, |e|=0.158335	      1.000000   -346.583867    387.614467   -410.184483     49.523708   -106.903618      0.000000    -87.536535    239.395486   -350.327430    360.037348    352.231465      0.000000      0.000000      0.000000    -56.098045    378.669618   -312.394406		171
W= 89.75704, xmin= -0.00137, parasitic=0.7477, |e|=0.136364	      1.000000    -61.003469   -186.492752    117.247311     56.406740    -19.174359      0.000000    -29.776746    278.377249     64.203540     95.341041   -191.712620      0.000000      0.000000      0.000000   -118.790386    209.085336   -231.535271		172
W= 89.75788, xmin= -0.00136, parasitic=0.7303, |e|=0.136364	      1.000000    204.356467    124.493353   -120.216287    -96.768581   -383.084243      0.000000     53.421677   -328.447188    -85.394817    414.969381    159.937738      0.000000      0.000000      0.000000   -120.511742    312.654651   -102.548855		173
W= 89.75440, xmin= -0.00138, parasitic=0.7330, |e|=0.136364	      1.000000    -88.963674   -195.360640   -311.426792    183.023826    285.230746      0.000000    220.982405   -359.111473    306.929556    -34.965800    199.772693      0.000000      0.000000      0.000000   -141.629766    285.323146   -290.368134		174
W= 89.75316, xmin= -0.00132, parasitic=0.7373, |e|=0.136364	      1.000000      9.878288    363.213232     16.119068   -126.960146    289.208345      0.000000   -234.668258    411.090302    248.594117   -304.142591    -24.876912      0.000000      0.000000      0.000000     96.143463   -319.057600    294.666081		175
W= 89.77626, xmin= -0.00126, parasitic=0.7492, |e|=0.233130	      1.000000   -389.149506    365.940817    308.654249     34.864795   -287.959949      0.000000      5.728402     38.953009   -173.673417    188.502825   -334.580305      0.000000      0.000000      0.000000    179.212557   -447.730134    327.462904		176
W= 89.75967, xmin= -0.00135, parasitic=0.7373, |e|=0.361050	      1.000000   -258.416856   -384.491820    417.333412    186.668103    -71.206471      0.000000     97.730578    209.053975   -319.183919     -0.991875   -414.029321      0.000000      0.000000      0.000000    182.546756   -440.592139    424.625689		177
W= 89.77609, xmin= -0.00119, parasitic=0.7493, |e|=0.208980	      1.000000    289.196873   -280.465919     17.759807    -50.396895   -107.750942      0.000000      3.221292     15.349839   -249.208272    246.563242     11.214013      0.000000      0.000000      0.000000    -64.566514    347.446338   -158.291391		178
W= 89.75242, xmin= -0.00139, parasitic=0.7242, |e|=0.150790	      1.000000   -351.670101    281.473647    126.789151    190.296862   -333.695986      0.000000    -59.141849    117.455769    433.613204    208.542453    236.158446      0.000000      0.000000      0.000000   -221.494265    355.666301   -236.497962		179
W= 89.75727, xmin= -0.00125, parasitic=0.7433, |e|=0.416404	      1.000000   -328.449705    277.130346    -94.751891    205.171616    191.721245      0.000000     81.064780   -161.288118   -127.609759    -69.117683   -342.334533      0.000000      0.000000      0.000000    -71.994770    373.022681   -167.937737		180
W= 89.75400, xmin= -0.00138, parasitic=0.7349, |e|=0.183387	      1.000000    138.468879   -126.191899    128.920231    -29.847486   -208.604163      0.000000   -154.466249    371.409033   -111.574684     52.623253   -225.363031      0.000000      0.000000      0.000000    140.038444   -338.807616    297.334325		181
W= 89.75957, xmin= -0.00135, parasitic=0.7339, |e|=0.136364	      1.000000     37.664951   -357.007957    -77.055334    118.490467    157.158891      0.000000    149.820737   -142.951496    139.293491    345.752457   -263.453275      0.000000      0.000000      0.000000    113.252181   -438.655710    224.124151		182
W= 89.75163, xmin= -0.00141, parasitic=0.7433, |e|=0.136364	      1.000000    214.662476    134.888918   -331.268845   -344.825372    306.161994      0.000000    279.606189   -295.112300    262.386321    -20.702008    176.390233      0.000000      0.000000      0.000000     55.184004   -302.735302   -242.259544		183
W= 89.77454, xmin= -0.00127, parasitic=0.7460, |e|=0.136364	      1.000000   -314.471775    437.985374   -108.615447    346.682566    299.059324      0.000000   -199.122709    176.188302   -195.833141    285.452839   -405.092806      0.000000      0.000000      0.000000    -42.574205    212.068734     53.103921		184
W= 89.77720, xmin= -0.00125, parasitic=0.7405, |e|=0.136364	      1.000000    -10.787797    224.384293    157.200475   -297.892740      6.581912      0.000000   -241.783096    360.247663    341.539372    367.880308    294.766009      0.000000      0.000000      0.000000   -167.346243    295.478239   -294.715659		185
W= 89.77534, xmin= -0.00126, parasitic=0.7407, |e|=0.136364	      1.000000    317.442740    267.795728    296.343704    283.395556   -307.504252      0.000000    -19.460391   -335.667425    410.772759    288.416933   -444.958279      0.000000      0.000000      0.000000     13.219922   -424.061414    220.911852		186
W= 89.75476, xmin= -0.00138, parasitic=0.7345, |e|=0.139101	      1.000000   -164.137227    121.379342    313.536540   -275.690039    156.518615      0.000000   -208.795998    378.050326   -378.247677    172.520525   -178.916407      0.000000      0.000000      0.000000    102.373766   -223.940738    128.197250		187
W= 89.77675, xmin= -0.00125, parasitic=0.7416, |e|=0.136364	      1.000000    121.127659      3.604070     93.246987     34.260127     50.534985      0.000000   -202.104325    373.547078    -24.860219   -147.843990    339.375583      0.000000      0.000000      0.000000   -100.950692    326.453905   -233.758112		188
W= 89.75629, xmin= -0.00112, parasitic=0.7493, |e|=0.136364	      1.000000    210.233686   -307.666163     51.005930    446.574580    141.949673      0.000000    179.475302   -419.497246   -346.843729   -123.176335    250.348318      0.000000      0.000000      0.000000    126.898718   -290.213422    244.096301		189
W= 89.75949, xmin= -0.00136, parasitic=0.7453, |e|=0.136364	      1.000000    193.713624    315.819364   -133.401217     49.501248    151.940619      0.000000   -271.374500    406.493187   -184.411992    -87.357823   -373.149097      0.000000      0.000000      0.000000   -114.480293    374.461498   -244.907372		190
W= 89.76677, xmin= -0.00131, parasitic=0.7498, |e|=0.136364	      1.000000    153.237425    242.665131    291.206307   -262.636631    116.411701      0.000000   -270.159469    166.579452   -392.589832    120.018252    282.465830      0.000000      0.000000      0.000000    107.038280   -237.879707    -58.253592		191
W= 89.76141, xmin= -0.00134, parasitic=0.7328, |e|=0.136364	      1.000000   -377.818804    392.201609   -145.926644    244.573353     60.684926      0.000000   -103.171236      7.321949    364.055091   -337.619441   -202.827362      0.000000      0.000000      0.000000     51.419552   -346.551232      2.436197		192
W= 89.76231, xmin= -0.00134, parasitic=0.7423, |e|=0.220506	      1.000000   -323.709562    156.077508   -305.451401    129.841519   -309.764092      0.000000     12.261724    128.718615      8.724963   -207.412658    172.939364      0.000000      0.000000      0.000000   -159.311773    422.684450   -208.310740		193
W= 89.75701, xmin= -0.00137, parasitic=0.7461, |e|=0.558046	      1.000000    322.337895     60.760359    440.102858   -343.129455   -436.020922      0.000000   -112.433508    -14.804066   -110.424851    -92.456189    402.945434      0.000000      0.000000      0.000000    245.568701   -447.895517    232.180081		194
W= 89.75086, xmin= -0.00140, parasitic=0.7489, |e|=0.136364	      1.000000     19.197821    185.328462    205.275163   -387.697666    293.460693      0.000000    -53.166561     21.873068    102.423011   -200.161297   -206.267661      0.000000      0.000000      0.000000    200.086879   -378.609662    415.192741		195
W= 89.75550, xmin= -0.00510, parasitic=0.7310, |e|=0.136364	      1.000000    -40.576660    176.148471   -165.073836   -187.362109    278.785640      0.000000   -323.192050    320.262987    314.234450      3.854645     47.920380      0.000000      0.000000      0.000000      7.823137   -157.358560   -115.297503		196
W= 89.75022, xmin= -0.00141, parasitic=0.7424, |e|=0.136364	      1.000000    -18.469147   -138.275221    -21.950634    -93.094685   -374.357774      0.000000     70.105527    -96.400289   -201.783816   -246.700804   -437.038935      0.000000      0.000000      0.000000   -106.317095    365.146260   -107.713322		197
W= 89.75202, xmin= -0.00139, parasitic=0.7428, |e|=0.136364	      1.000000   -158.952109   -374.411954   -224.079312     15.985116     31.510308      0.000000    372.172281   -130.767018     94.681525    357.758728    254.327607      0.000000      0.000000      0.000000   -108.657872    414.284007     86.674978		198
W= 89.77281, xmin= -0.00128, parasitic=0.7492, |e|=0.136364	      1.000000    -18.631456    -47.723641    345.284112   -206.746712     56.772414      0.000000   -245.620996    393.317144   -195.449901    107.439295    143.348968      0.000000      0.000000      0.000000     88.759827   -313.878952    -36.153044		199
W= 89.76349, xmin= -0.00133, parasitic=0.7415, |e|=0.173086	      1.000000    329.535172    176.208727    -98.293159    141.114413    -20.710117      0.000000   -300.146490    393.187837    228.662106     11.240506     10.293191      0.000000      0.000000      0.000000   -202.325190    382.711356   -257.353300		200
W= 89.75711, xmin= -0.00137, parasitic=0.7462, |e|=0.208856	      1.000000   -331.806904    205.224442    -33.452368    -94.005536   -295.810779      0.000000     -7.637166    185.337406   -107.290987    424.607486    279.885214      0.000000      0.000000      0.000000   -230.131881    440.148476   -364.458498		201
W= 89.75079, xmin= -0.00140, parasitic=0.7226, |e|=0.136364	      1.000000    260.593235    420.021273    195.897825    161.212211    272.789655      0.000000   -243.390196     81.154597    321.256747   -111.731026    297.832659      0.000000      0.000000      0.000000      6.934654   -169.325979   -172.011761		202
W= 89.75405, xmin= -0.00141, parasitic=0.7485, |e|=0.233133	      1.000000    380.112660    143.673965   -200.291928    176.603217   -236.103956      0.000000   -317.228242    441.524950   -227.284619   -214.517509    292.041842      0.000000      0.000000      0.000000   -161.282257    352.645443    -70.738779		203
W= 89.76670, xmin= -0.00132, parasitic=0.7370, |e|=0.136364	      1.000000    283.333978   -411.269315   -388.009179   -108.836637    381.265393      0.000000    225.774996   -383.873597    413.131677    141.245510    232.695956      0.000000      0.000000      0.000000   -123.281708    284.623658   -304.637152		204
W= 89.77070, xmin= -0.00129, parasitic=0.7372, |e|=0.136364	      1.000000    100.010836   -165.298010   -318.250636    164.865090     35.102403      0.000000    282.183503   -405.429364   -428.542392    282.366690   -106.344657      0.000000      0.000000      0.000000     53.392644     22.437476    179.768712		205
W= 89.75976, xmin= -0.00135, parasitic=0.7289, |e|=0.136364	      1.000000   -350.067775   -416.999998     55.508991    -15.547026   -238.717192      0.000000    361.040918   -278.169918    259.611620    270.859981    101.158945      0.000000      0.000000      0.000000   -174.447528    325.831772   -161.753432		206
W= 89.77966, xmin= -0.00123, parasitic=0.7495, |e|=0.445937	      1.000000    341.118028    437.886806    343.129513     19.594351    -52.680513      0.000000   -131.149156   -230.965608    186.685889   -337.601516   -280.586053      0.000000      0.000000      0.000000     39.193368   -165.658779    167.545112		207
W= 89.76707, xmin= -0.00131, parasitic=0.7354, |e|=0.136364	      1.000000   -317.099580    274.719327   -193.427937     19.033919   -431.784582      0.000000   -154.442399    340.488898     58.365343    333.024454    193.659994      0.000000      0.000000      0.000000   -113.332913    263.152368   -101.450010		208
W= 89.76601, xmin= -0.01158, parasitic=0.7458, |e|=0.136364	      1.000000     85.631481    175.552095    251.413618    -24.808562   -422.887017      0.000000   -317.086372    425.206010    317.144771     78.603253   -306.210805      0.000000      0.000000      0.000000    -13.484374   -210.442369     57.078197		209
W= 89.76914, xmin= -0.00125, parasitic=0.7460, |e|=0.232160	      1.000000   -444.323949    233.235850    223.609711    448.222956   -378.923694      0.000000     43.275649    -11.306728    161.838633   -181.672334   -380.243128      0.000000      0.000000      0.000000   -108.464272    223.731112    -42.511241		210
W= 89.76209, xmin= -0.00134, parasitic=0.7406, |e|=0.701609	      1.000000   -216.668927    249.074251    410.144968    146.769308     54.520817      0.000000     71.645516   -182.218649   -168.519761     61.170693     84.140606      0.000000      0.000000      0.000000    169.332683   -388.511849    116.997416		211
W= 89.75065, xmin= -0.00141, parasitic=0.7417, |e|=0.136364	      1.000000    242.803456    247.794036    440.210244     18.639068   -342.393775      0.000000   -269.989136    400.633890    -12.958198   -172.900977    377.530184      0.000000      0.000000      0.000000    105.966057   -262.603780    180.901883		212
W= 89.75716, xmin= -0.00136, parasitic=0.7400, |e|=0.136364	      1.000000    259.374549   -269.274685   -348.114745   -373.807217    254.417025      0.000000    141.547331   -398.755006   -322.785861    -62.683711    186.029180      0.000000      0.000000      0.000000   -103.221277    447.507220   -194.768257		213
W= 89.75023, xmin= -0.00141, parasitic=0.7290, |e|=0.136364	      1.000000     99.290929    274.155515   -381.570897     52.588262    297.319062      0.000000   -126.702920     45.877545    341.519157    220.172385    168.704437      0.000000      0.000000      0.000000    -69.516486     84.631545   -173.907305		214
W= 89.75850, xmin= -0.00135, parasitic=0.7307, |e|=0.136364	      1.000000   -415.127786     26.717577      3.037861   -193.061580   -345.588499      0.000000    -24.373320    119.754109    -82.542852    -16.206430   -309.158717      0.000000      0.000000      0.000000    -93.951111    417.254625    129.176402		215
W= 89.77794, xmin= -0.00118, parasitic=0.7497, |e|=0.231052	      1.000000    319.272571   -308.830794    165.454320     58.426323   -117.671834      0.000000      1.800629    -66.102733     37.617319    400.163121   -209.678125      0.000000      0.000000      0.000000     87.213920   -415.950716    345.091338		216
W= 89.76305, xmin= -0.00134, parasitic=0.7385, |e|=0.211252	      1.000000   -252.986243    -71.369416   -109.184195    -59.555999    238.048381      0.000000     30.896928    175.249188     81.468471      8.767238   -267.361851      0.000000      0.000000      0.000000   -140.646059    381.140540   -281.612038		217
W= 89.75393, xmin= -0.00138, parasitic=0.7267, |e|=0.136364	      1.000000    -32.422669    246.373167    190.582259    357.695837    163.899243      0.000000    129.450488   -417.767945   -209.969885    131.356194     69.309319      0.000000      0.000000      0.000000    110.516127   -345.285805    110.036834		218
W= 89.76214, xmin= -0.00134, parasitic=0.7333, |e|=0.136364	      1.000000     99.133169    281.614641   -412.349622    160.480482    385.353952      0.000000   -287.207291    349.786782    -40.911876    145.313875   -325.121186      0.000000      0.000000      0.000000    -93.672284    373.609869    -66.970391		219
W= 89.76207, xmin= -0.00134, parasitic=0.7451, |e|=0.136364	      1.000000   -164.778697    386.666845     -7.868658    401.602835   -178.182767      0.000000   -268.505831    144.192875    249.927657   -333.912792   -301.677368      0.000000      0.000000      0.000000     59.890344   -442.801531     57.717581		220
W= 89.77320, xmin= -0.00127, parasitic=0.7426, |e|=0.136364	      1.000000     48.864511   -325.732933    -96.829026   -372.026615    181.249691      0.000000    244.571568   -404.852760   -232.125335    -53.709005    250.423541      0.000000      0.000000      0.000000    233.860302   -432.760879    214.122360		221
W= 89.75468, xmin= -0.00138, parasitic=0.7386, |e|=0.237534	      1.000000    428.145623    -40.152989   -263.808098   -268.151107    409.713287      0.000000    -49.745120   -199.152350    130.440394   -192.424653   -233.634720      0.000000      0.000000      0.000000    217.653821   -446.407582    358.305925		222
W= 89.75964, xmin= -0.00135, parasitic=0.7439, |e|=0.188110	      1.000000    247.258576     80.406171    412.084649    340.503854    127.500002      0.000000   -228.332053    356.570737    -87.745283     13.528149    251.234877      0.000000      0.000000      0.000000   -146.171276    288.622977   -359.580331		223
W= 89.75161, xmin= -0.00140, parasitic=0.7271, |e|=0.136364	      1.000000    289.975104     69.706326    -19.149322     70.514741   -289.688790      0.000000     66.742575   -318.673152   -241.418238    336.384457    -12.332180      0.000000      0.000000      0.000000   -106.621694    410.345247    -63.230766		224
W= 89.77302, xmin= -0.00128, parasitic=0.7462, |e|=0.136364	      1.000000    -18.176792    -29.341039    332.829785    143.328544    -79.905725      0.000000    121.958312   -301.847098    335.239754    -40.132452   -432.385618      0.000000      0.000000      0.000000     56.164910   -350.499753    288.995461		225
W= 89.78347, xmin= -0.00122, parasitic=0.7478, |e|=0.136364	      1.000000    273.306475    115.334230   -200.846718     -3.838398    275.756717      0.000000   -277.860187    332.236054   -236.954847    336.018809    278.761756      0.000000      0.000000      0.000000     -8.747147    165.761671    -96.772750		226
W= 89.76800, xmin= -0.00130, parasitic=0.7386, |e|=0.136364	      1.000000   -340.148620    431.240077   -138.758834   -115.409449    292.799420      0.000000   -277.923310    219.616670   -393.796651   -414.380391   -125.976497      0.000000      0.000000      0.000000     48.262536    217.165166     64.999656		227
W= 89.78164, xmin= -0.00123, parasitic=0.7442, |e|=0.136364	      1.000000     48.586895    105.089124    -52.171793     43.507906   -162.424857      0.000000   -243.269451    399.332346    -40.367291    307.245818    218.153872      0.000000      0.000000      0.000000   -132.877539    410.475229   -186.383161		228
W= 89.78109, xmin= -0.00123, parasitic=0.7437, |e|=0.136364	      1.000000    -51.819840    285.895604    269.906000    323.790923    -52.965929      0.000000   -256.939891    429.425148    158.379054   -321.710744   -155.672717      0.000000      0.000000      0.000000     59.084729   -306.201799    167.021714		229
W= 89.77291, xmin= -0.00548, parasitic=0.7468, |e|=0.151565	      1.000000    413.430370    327.342378   -356.760376   -117.181086    197.414501      0.000000   -378.248777    414.021617    351.873812    219.418121     59.689455      0.000000      0.000000      0.000000   -111.822422    138.399664   -125.508079		230
W= 89.75926, xmin= -0.00135, parasitic=0.7353, |e|=0.136364	      1.000000     51.249188   -204.922364     46.117908     -7.825441   -398.021122      0.000000   -132.887038    431.043677    -17.155894     49.604045     32.867050      0.000000      0.000000      0.000000    116.570156   -341.637286    266.759069		231
W= 89.75484, xmin= -0.00138, parasitic=0.7297, |e|=0.180147	      1.000000   -326.489162   -185.259035   -314.559372   -312.240131   -330.777686      0.000000     54.254182    133.735299   -380.677734    195.714028    204.464175      0.000000      0.000000      0.000000      6.418630    264.731641    101.114043		232
W= 89.75622, xmin= -0.00137, parasitic=0.7294, |e|=0.243647	      1.000000    287.800084   -241.015165    122.559602    321.116103    -44.357699      0.000000    -21.541550     40.396851     -2.785939   -121.683552    305.431615      0.000000      0.000000      0.000000     75.056918   -276.155125     51.936392		233
W= 89.78881, xmin= -0.00119, parasitic=0.7487, |e|=0.136364	      1.000000    -71.179759    -40.545599   -221.944879    322.338164     44.955404      0.000000    185.662576   -310.448507   -162.671511   -275.485485   -289.441130      0.000000      0.000000      0.000000    -70.546721    400.138442    -21.488670		234
W= 89.75833, xmin= -0.00136, parasitic=0.7378, |e|=0.181298	      1.000000    311.978782    369.053609   -407.082806   -442.099547    258.424300      0.000000   -246.026136    139.127683     13.922433    177.034783    427.372162      0.000000      0.000000      0.000000   -115.478011    350.768712   -278.353862		235
W= 89.75337, xmin= -0.00138, parasitic=0.7261, |e|=0.136364	      1.000000   -217.099057    -45.151606    203.445366    349.224774   -131.234172      0.000000    -70.411111    311.249935    -52.051655    210.211754    340.511993      0.000000      0.000000      0.000000   -110.550513    197.742464   -149.143613		236
W= 89.78487, xmin= -0.00121, parasitic=0.7464, |e|=0.136364	      1.000000    159.642220   -342.281792   -351.969601   -439.685574   -214.588944      0.000000    221.009895   -399.696811    145.800877    -74.010103    288.133529      0.000000      0.000000      0.000000    152.854302   -410.684340    249.662670		237
W= 89.75120, xmin= -0.00140, parasitic=0.7491, |e|=0.224747	      1.000000   -331.191612   -335.391867    400.158991    149.245026     43.713815      0.000000     77.420979    304.696873    -55.220291    174.625138    282.734786      0.000000      0.000000      0.000000    225.289163   -438.918380     71.063100		238
W= 89.76686, xmin= -0.00132, parasitic=0.7367, |e|=0.136364	      1.000000     30.407953    281.324408    -96.567554   -391.207606     23.735788      0.000000     32.705040   -279.499067   -122.593902   -399.316157   -107.737572      0.000000      0.000000      0.000000    166.665996   -356.329932    322.912978		239
W= 89.76008, xmin= -0.00135, parasitic=0.7409, |e|=0.136364	      1.000000    -81.245374    364.788535    111.529837     66.091858    119.922912      0.000000   -177.282357    328.898064    330.269236   -126.170147     62.849154      0.000000      0.000000      0.000000     87.148984   -345.720276    204.488073		240
W= 89.75624, xmin= -0.00137, parasitic=0.7460, |e|=0.136364	      1.000000    317.651694    182.238906    380.876119   -311.872865   -412.886282      0.000000   -381.708735    379.286901    350.006805   -164.582630     16.674040      0.000000      0.000000      0.000000     11.267548   -352.353380    -12.350270		241
W= 89.76266, xmin= -0.00133, parasitic=0.7391, |e|=0.136364	      1.000000     95.340036    320.924518    -24.162617    -39.154630   -162.454558      0.000000   -424.395072    383.859175    254.254790    387.747896    435.439881      0.000000      0.000000      0.000000   -150.311628    367.034719   -127.407390		242
W= 89.75666, xmin= -0.00137, parasitic=0.7276, |e|=0.136364	      1.000000   -180.603120    353.764691   -317.346403   -282.709311     39.770782      0.000000   -149.464337    141.319319    -34.025626      0.260982    322.365002      0.000000      0.000000      0.000000    -64.091951    329.858487   -121.447570		243
W= 89.77910, xmin= -0.00124, parasitic=0.7499, |e|=0.199329	      1.000000    336.556897   -251.811052    -98.449453   -181.927830    415.676603      0.000000     13.314103   -122.344582   -440.694077   -237.975186    137.453071      0.000000      0.000000      0.000000    -60.871638    415.332308   -186.394765		244
W= 89.77456, xmin= -0.00127, parasitic=0.7400, |e|=0.136364	      1.000000    -83.559174    443.647715    441.352327    -79.725261    -35.383197      0.000000   -261.857065    332.720316    344.233346    -59.443643    125.724253      0.000000      0.000000      0.000000     66.393686   -360.627452    -52.689153		245
W= 89.75334, xmin= -0.00139, parasitic=0.7288, |e|=0.136364	      1.000000    -26.197612   -289.517732    222.699941   -423.289446    327.912916      0.000000    186.664914   -120.351840    436.477160    144.658692    -84.205223      0.000000      0.000000      0.000000    -18.962690   -192.741726   -124.983525		246
W= 89.75853, xmin= -0.00135, parasitic=0.7312, |e|=0.136364	      1.000000   -438.991450     64.831172   -406.539901    139.407728    360.465651      0.000000   -117.500049    225.076097    -38.868469    -30.428336   -141.468989      0.000000      0.000000      0.000000    -36.902704    248.664331     73.366277		247
W= 89.75661, xmin= -0.00734, parasitic=0.7337, |e|=0.136364	      1.000000    223.393723    -88.613171   -299.751890    -63.035886     75.660796      0.000000    301.726634   -343.683303    436.506168     72.363059    411.550534      0.000000      0.000000      0.000000   -140.146095    359.621744    -94.087245		248
W= 89.75180, xmin= -0.00140, parasitic=0.7482, |e|=0.136364	      1.000000      6.188321     32.616893    300.543565     24.476737   -131.672305      0.000000    210.683491   -277.991352    368.935602   -178.209967    376.412730      0.000000      0.000000      0.000000    -47.275882   -113.110629   -200.085852		249
W= 89.75191, xmin= -0.00139, parasitic=0.7383, |e|=0.136364	      1.000000     27.888452     98.726506   -326.760224    335.732769    112.062409      0.000000    100.920176   -355.679721    448.520429   -371.161815     55.380755      0.000000      0.000000      0.000000     95.248674   -287.382852    125.371779		250
W= 89.75954, xmin= -0.00135, parasitic=0.7284, |e|=0.136364	      1.000000    300.994607    350.720228   -302.303059   -229.723046    230.323687      0.000000     11.291235   -403.875682   -372.443999   -301.770172    116.508379      0.000000      0.000000      0.000000     51.669707    181.909003     24.518209		251
W= 89.76225, xmin= -0.00133, parasitic=0.7457, |e|=0.136364	      1.000000   -107.215096    -95.120999    333.994852    270.727135    279.228670      0.000000    202.161800   -385.570573   -386.820900   -420.397097   -359.971080      0.000000      0.000000      0.000000    276.073714   -431.206715    350.753298		252
W= 89.76152, xmin= -0.00134, parasitic=0.7373, |e|=1.550083	      1.000000    168.068571   -256.788979   -158.274286    413.396398    244.547414      0.000000    -70.018587    220.252457    331.777778      7.480720   -169.678957      0.000000      0.000000      0.000000     71.564145   -355.820735    171.081411		253
W= 89.76014, xmin= -0.00135, parasitic=0.7465, |e|=0.148431	      1.000000   -290.967974   -256.623630     18.249837   -142.503248    381.679896      0.000000    274.912200   -360.975368   -102.475623   -246.196514     70.985831      0.000000      0.000000      0.000000    -55.727963    262.381868   -276.622528		254
W= 89.76687, xmin= -0.00131, parasitic=0.7362, |e|=0.725394	      1.000000   -140.342516    192.215742    295.351392   -131.762869    341.288149      0.000000     93.650852   -253.079496    -29.855767    279.895579    249.993746      0.000000      0.000000      0.000000    106.333788   -409.931337     98.220465		255
W= 89.76861, xmin= -0.00130, parasitic=0.7367, |e|=0.549894	      1.000000   -409.655164   -174.440812    382.460313   -363.749232    -37.359476      0.000000    153.150087     22.497319    297.744682   -300.082117    133.374231      0.000000      0.000000      0.000000     73.622812   -345.198805     27.512133		256
W= 89.75278, xmin= -0.00139, parasitic=0.7358, |e|=0.136364	      1.000000    155.959035    208.602159   -355.297734     -0.848635    282.535928      0.000000     71.521976   -449.066552    -36.728554   -372.706051   -171.841446      0.000000      0.000000      0.000000    -55.122195    268.269400    -66.122327		257
W= 89.76404, xmin= -0.00126, parasitic=0.7451, |e|=0.447538	      1.000000    377.295640      6.060578    273.127499   -248.861905   -411.267189      0.000000   -265.545072    406.151050    218.537804    222.186893    -95.319280      0.000000      0.000000      0.000000     84.005750   -413.937318    398.208461		258
W= 89.76450, xmin= -0.00132, parasitic=0.7454, |e|=0.143331	      1.000000    406.082615   -382.219216   -169.957489      9.674844    158.008297      0.000000    121.919472   -389.112346   -152.039619    126.441369   -336.980287      0.000000      0.000000      0.000000   -183.222680    424.025265   -104.780647		259
W= 89.75249, xmin= -0.00139, parasitic=0.7376, |e|=0.136364	      1.000000     10.450492     14.364351   -241.327553      7.864045    163.402354      0.000000    -85.233221    208.532181     68.149678    430.992085     63.607500      0.000000      0.000000      0.000000   -171.021500    301.278037   -246.127726		260
W= 89.75965, xmin= -0.00135, parasitic=0.7297, |e|=0.136364	      1.000000    280.751248   -405.602905    375.007161    -50.213007    415.785450      0.000000    109.668752    -49.810832    177.803832   -418.608838   -166.362582      0.000000      0.000000      0.000000     75.862445   -300.481111    -58.897262		261
W= 89.75147, xmin= -0.00140, parasitic=0.7442, |e|=0.252992	      1.000000   -354.306384    292.153491    250.973173    206.410118    210.797505      0.000000   -338.548362    156.194009     27.095598    430.871916   -448.596790      0.000000      0.000000      0.000000    -48.422791      1.870845     88.853140		262
W= 89.75319, xmin= -0.00118, parasitic=0.7451, |e|=0.136364	      1.000000   -170.019839   -179.972026    200.583782   -424.372587    229.460921      0.000000    239.042489   -385.771152    159.871358     78.697992     14.804407      0.000000      0.000000      0.000000   -107.122478    288.527959   -377.249481		263
W= 89.76090, xmin= -0.00134, parasitic=0.7455, |e|=0.136364	      1.000000    -25.756719   -194.402443   -118.119867   -146.666066    -66.475467      0.000000    146.545157   -249.714439   -238.637211    -75.169393    410.481447      0.000000      0.000000      0.000000    247.228666   -420.639445    303.581052		264
W= 89.75994, xmin= -0.00135, parasitic=0.7301, |e|=0.143077	      1.000000   -429.534519    345.686680    218.594507    252.502775   -103.546602      0.000000    -76.302124     76.606219   -343.720945   -155.065998   -295.403125      0.000000      0.000000      0.000000    153.398762   -394.397682    206.485297		265
W= 89.75158, xmin= -0.00139, parasitic=0.7445, |e|=0.136364	      1.000000   -186.285660    220.968459     94.415670    -79.146118    -47.030748      0.000000   -435.166522    227.340011   -147.989756    -13.792757    220.368334      0.000000      0.000000      0.000000    -64.525674    422.549576    108.181364		266
W= 89.75546, xmin= -0.00131, parasitic=0.7367, |e|=0.136364	      1.000000   -366.101035    355.649763    185.216997     75.541851   -213.967292      0.000000   -147.444071    359.627434   -245.704143     30.421360    359.290477      0.000000      0.000000      0.000000    117.707907   -341.571389    217.611773		267
W= 89.76278, xmin= -0.00128, parasitic=0.7410, |e|=0.136364	      1.000000   -443.670360   -434.507488     58.810520   -252.705510    133.360418      0.000000    448.482070   -432.468800   -295.625751     66.167820   -274.997605      0.000000      0.000000      0.000000    -54.676628    405.937420   -165.186877		268
W= 89.76704, xmin= -0.00131, parasitic=0.7432, |e|=0.136364	      1.000000    119.060742    123.500913   -408.762728   -177.574627     28.349272      0.000000    181.897635   -448.147466    315.156986   -326.631424   -221.245024      0.000000      0.000000      0.000000     92.869847   -399.791940    173.581668		269
W= 89.76523, xmin= -0.00132, parasitic=0.7332, |e|=0.136364	      1.000000   -276.424535    -48.568607    137.934748   -187.256688   -169.740852      0.000000   -155.074021    438.349637   -157.080854   -397.588531   -344.855849      0.000000      0.000000      0.000000     86.361798   -127.216415    139.015446		270
W= 89.78057, xmin= -0.00123, parasitic=0.7473, |e|=0.136364	      1.000000    188.339467   -107.617799    404.133011   -259.894456     78.536043      0.000000    232.559250   -372.461015     -1.029126    272.932198   -255.162064      0.000000      0.000000      0.000000   -108.126441    310.258384    -68.440280		271
W= 89.75227, xmin= -0.00139, parasitic=0.7299, |e|=0.136364	      1.000000   -149.492806    300.740064    242.410276    296.899029    408.629288      0.000000   -135.095857    229.882835    -93.262626     37.936384   -281.159023      0.000000      0.000000      0.000000    133.578866   -385.918938    194.401707		272
W= 89.76715, xmin= -0.00125, parasitic=0.7457, |e|=0.136364	      1.000000     18.837653   -370.914598    282.770662    159.298728   -146.064122      0.000000    200.209106   -340.713262   -125.297972   -130.497469    126.494903      0.000000      0.000000      0.000000    102.706485   -273.617591    257.485084		273
W= 89.75774, xmin= -0.00136, parasitic=0.7287, |e|=0.136364	      1.000000    219.932460   -404.785673   -167.343484    -61.793731   -143.628194      0.000000    267.940964   -408.249149    216.303859   -156.493420   -260.657142      0.000000      0.000000      0.000000   -107.784820    285.373028    -39.670860		274
W= 89.75017, xmin= -0.00140, parasitic=0.7346, |e|=0.136364	      1.000000    153.138414    419.015020    445.247329     19.817684    274.385878      0.000000   -123.323046    -82.769071   -412.701466    403.135704    -94.991532      0.000000      0.000000      0.000000    -83.417416    204.427454   -142.337858		275
W= 89.78548, xmin= -0.00121, parasitic=0.7460, |e|=0.147130	      1.000000    432.183100    418.926092    -99.937382    -36.902215    -57.360184      0.000000   -376.618313    280.371578   -389.831063    167.721028    269.941380      0.000000      0.000000      0.000000     -0.549240    194.374653    -49.766945		276
W= 89.76150, xmin= -0.00127, parasitic=0.7458, |e|=0.136364	      1.000000   -168.391124   -178.266663     47.831270    -80.401498   -282.432264      0.000000     -0.588920    210.249536   -137.246887   -375.288561   -384.467532      0.000000      0.000000      0.000000    117.886989   -322.390373    359.923563		277
W= 89.75098, xmin= -0.00140, parasitic=0.7414, |e|=0.136364	      1.000000    100.799060   -298.539402   -368.941558    298.858593    218.359407      0.000000    178.854199   -356.399093    -45.602662   -274.078127   -191.263806      0.000000      0.000000      0.000000    129.091294   -191.223543    206.501332		278
W= 89.75522, xmin= -0.00143, parasitic=0.7494, |e|=0.136364	      1.000000     76.805893   -286.382404     59.587821   -174.196512   -123.256377      0.000000     78.358327    -88.479514   -126.074286    -19.751212     34.214174      0.000000      0.000000      0.000000    223.356151   -325.483238    159.262806		279
W= 89.78211, xmin= -0.00123, parasitic=0.7442, |e|=0.164316	      1.000000   -309.953076    200.252107    181.595344    386.585215     -4.742985      0.000000    -29.793965    104.995062     73.507066    -44.742591    266.621130      0.000000      0.000000      0.000000     68.166642   -339.151024     50.706619		280
W= 89.75045, xmin= -0.00139, parasitic=0.7494, |e|=0.996753	      1.000000    388.320901    276.403630    327.930588   -305.996138    145.697140      0.000000   -164.446226    -89.151521    356.711598    247.708216    324.246707      0.000000      0.000000      0.000000    105.951897   -414.058967    301.471808		281
W= 89.76447, xmin= -0.00133, parasitic=0.7497, |e|=0.136364	      1.000000    199.402795   -248.571586    138.077120    -61.335232    156.165316      0.000000    303.818936   -338.049142   -211.556344    267.140425    -31.386848      0.000000      0.000000      0.000000    -36.436456    239.574497    -24.417157		282
W= 89.77201, xmin= -0.00129, parasitic=0.7390, |e|=0.383470	      1.000000   -385.426662    -58.581715   -220.952942    394.214296   -316.005166      0.000000    271.271914   -331.223513   -368.042774    253.557729    -67.231158      0.000000      0.000000      0.000000    -51.061679    291.331064    -31.915933		283
W= 89.75143, xmin= -0.00140, parasitic=0.7254, |e|=0.136364	      1.000000   -311.316657    248.998450   -330.763573   -370.613981   -418.898803      0.000000    -96.176730    149.667549   -201.375961    360.351528     60.639255      0.000000      0.000000      0.000000    -26.550007    214.893856     78.464089		284
W= 89.76239, xmin= -0.00134, parasitic=0.7380, |e|=0.136364	      1.000000     61.117980   -238.022910    -44.935025   -355.496350    302.262198      0.000000    170.338059   -326.693164   -254.869404    -76.325236      4.431465      0.000000      0.000000      0.000000    135.078785   -171.288717    157.649549		285
W= 89.76914, xmin= -0.00125, parasitic=0.7471, |e|=0.167234	      1.000000   -335.726629   -344.048017    -44.666159    263.963521   -429.279110      0.000000     46.620333    410.977749      6.958463   -259.456868    291.088909      0.000000      0.000000      0.000000    116.277092   -311.119191    339.964665		286
W= 89.78409, xmin= -0.00121, parasitic=0.7456, |e|=0.137925	      1.000000    419.091010   -289.326405    197.251530   -277.988041    392.297788      0.000000     86.259964   -193.729678    198.839967     17.542311    260.258425      0.000000      0.000000      0.000000     66.579070   -318.855666    -68.414752		287
W= 89.76112, xmin= -0.00134, parasitic=0.7364, |e|=0.136364	      1.000000    216.895767    388.946394   -431.458502     -5.920263    422.138312      0.000000   -180.236434     25.305063     76.840574    350.833916   -112.391558      0.000000      0.000000      0.000000   -169.703043    389.001211   -207.846745		288
W= 89.77233, xmin= -0.00128, parasitic=0.7375, |e|=0.136364	      1.000000   -380.824612   -342.785671     79.585524    214.294098    153.158532      0.000000     11.710959    357.089606     77.428164    -34.290099   -389.152957      0.000000      0.000000      0.000000     73.504732   -339.073145    108.203275		289
W= 89.78842, xmin= -0.00119, parasitic=0.7478, |e|=0.152830	      1.000000    364.712155    176.239449    134.281453    281.520061   -195.219203      0.000000    -18.169349   -302.358760   -326.043798   -377.078465   -266.715056      0.000000      0.000000      0.000000    169.352624   -367.146592    351.763092		290
W= 89.77604, xmin= -0.00126, parasitic=0.7463, |e|=0.136364	      1.000000     44.255191    185.312060   -335.223271   -386.135269    -30.046460      0.000000   -189.969235    332.699977    344.515601    436.467605    344.133396      0.000000      0.000000      0.000000     62.123813   -306.700701     93.135697		291
W= 89.75537, xmin= -0.00985, parasitic=0.7428, |e|=0.136364	      1.000000    333.152005   -303.552880    140.871564   -187.519758   -269.648626      0.000000    178.985184     68.067849   -386.482616   -317.275698   -339.179368      0.000000      0.000000      0.000000    162.630215   -420.196750    -43.140368		292
W= 89.75907, xmin= -0.00135, parasitic=0.7459, |e|=0.136364	      1.000000    -99.032933    297.677887    423.384950   -436.243042   -137.966482      0.000000   -203.539156    426.226257    317.448851   -216.890993    -74.958805      0.000000      0.000000      0.000000    217.792213   -432.958887     91.972968		293
W= 89.77679, xmin= -0.00125, parasitic=0.7445, |e|=0.136364	      1.000000     31.418057    219.119628    217.271934    391.384713    -37.838945      0.000000   -266.942674    389.963667    -97.574109   -335.473101      6.940996      0.000000      0.000000      0.000000    125.297941   -443.528743    235.229946		294
W= 89.75225, xmin= -0.00140, parasitic=0.7298, |e|=0.136364	      1.000000   -105.545951   -280.744521    275.555627   -395.437295   -335.155097      0.000000    244.893441   -302.407261   -283.966918   -346.105576    118.996388      0.000000      0.000000      0.000000    152.956643   -318.878527    289.828555		295
W= 89.75380, xmin= -0.00138, parasitic=0.7308, |e|=0.199662	      1.000000    214.924653   -180.880618   -128.903131   -449.377594     31.729011      0.000000      8.546863    -49.484632   -127.664674    -72.181295   -305.690629      0.000000      0.000000      0.000000   -105.122697    415.989905    -89.475815		296
W= 89.75572, xmin= -0.00137, parasitic=0.7356, |e|=0.166693	      1.000000    438.279434   -293.956938   -431.582220   -335.594689    128.482726      0.000000     55.175911   -262.311032   -206.816553    157.798235   -295.879022      0.000000      0.000000      0.000000   -104.626410    344.139053     33.504510		297
W= 89.76766, xmin= -0.00130, parasitic=0.7361, |e|=0.257970	      1.000000    302.133769    -44.687359    362.924339    -12.502132     20.350038      0.000000    -50.470076    -42.979449   -314.638037    339.747964    143.215515      0.000000      0.000000      0.000000    -86.307914    250.634410   -133.085662		298
W= 89.76379, xmin= -0.00133, parasitic=0.7316, |e|=0.136364	      1.000000    346.765726    -91.475960    425.454276    -64.273506    224.873714      0.000000     84.171102   -248.666179    303.086459    340.888657   -413.257612      0.000000      0.000000      0.000000   -172.204510    274.271073   -140.896072		299
W= 89.76947, xmin= -0.00130, parasitic=0.7422, |e|=0.136364	      1.000000    -55.734147    -51.513736   -429.109722   -390.476574   -276.381357      0.000000    165.159788   -337.235505    -43.397671     82.240419    -74.032071      0.000000      0.000000      0.000000    194.900658   -415.574055    398.394062		300
W= 89.75537, xmin= -0.00138, parasitic=0.7404, |e|=0.136364	      1.000000   -298.480303   -339.671196    411.939343    330.609147    381.735470      0.000000    314.929395   -370.707900    149.264071    442.781881    124.449990      0.000000      0.000000      0.000000     55.444778   -345.210473      3.545734		301
W= 89.77834, xmin= -0.00125, parasitic=0.7416, |e|=0.136364	      1.000000   -354.429565    100.479454    188.803065   -292.144567    199.535806      0.000000    -95.796710    342.312030    404.434925    312.921168    370.842132      0.000000      0.000000      0.000000      6.854255   -251.787869   -154.338795		302
W= 89.77644, xmin= -0.00126, parasitic=0.7436, |e|=0.136364	      1.000000    187.617718   -291.731108   -313.315839    211.841525    162.406463      0.000000    118.097023   -234.045549   -108.157474   -401.495955    348.813805      0.000000      0.000000      0.000000    165.512043   -307.394317    201.903027		303
W= 89.77019, xmin= -0.00129, parasitic=0.7354, |e|=0.136364	      1.000000    132.329569   -424.196750    359.910883   -334.730679   -194.012532      0.000000    178.694437    -93.412504     16.517462   -284.597974   -275.890016      0.000000      0.000000      0.000000    101.037694   -309.373315     64.741916		304
W= 89.75226, xmin= -0.00139, parasitic=0.7400, |e|=0.218083	      1.000000    419.781521    -97.565667   -388.093603     30.234508    434.860129      0.000000    -25.192186   -227.219607    311.341914   -337.374368    421.045771      0.000000      0.000000      0.000000    -80.677819    205.645091   -279.786505		305
W= 89.75041, xmin= -0.00141, parasitic=0.7277, |e|=0.254339	      1.000000   -447.597316   -186.535420    195.689177    113.094591   -320.606174      0.000000    350.728267   -399.501353   -331.119465    344.861125    -10.157075      0.000000      0.000000      0.000000    -83.149540    311.688009   -165.188571		306
W= 89.75460, xmin= -0.00138, parasitic=0.7361, |e|=0.328529	      1.000000   -251.186778    408.513866   -383.751227     98.945204    440.423301      0.000000     34.275127   -226.485353    -23.136452    331.634383     48.551143      0.000000      0.000000      0.000000    -77.978107    352.233712   -164.242138		307
W= 89.75889, xmin= -0.00135, parasitic=0.7298, |e|=0.136364	      1.000000    383.899047    105.061965   -230.850821     -0.438428   -396.418144      0.000000     94.317416   -340.165878   -266.590897    -23.998041    419.083954      0.000000      0.000000      0.000000    125.231492   -260.795968     74.211689		308
W= 89.75631, xmin= -0.00137, parasitic=0.7440, |e|=0.136364	      1.000000    -13.565310   -280.371446    266.593256    -59.460094   -222.709190      0.000000    164.331637    -67.122474   -370.815733    -77.498244    336.255200      0.000000      0.000000      0.000000     -6.722430    259.719956    -70.401019		309
W= 89.76323, xmin= -0.00133, parasitic=0.7430, |e|=0.301116	      1.000000   -438.824996    291.158977    110.276087    230.811035    -20.478723      0.000000     64.018874     -8.392851    168.335174    133.499284    -83.614326      0.000000      0.000000      0.000000     72.298256   -299.512984    133.585217		310
W= 89.76688, xmin= -0.00131, parasitic=0.7474, |e|=0.164022	      1.000000   -136.716246    106.464419    321.637428    291.700564    112.367281      0.000000    -24.413881    108.821639   -308.406753    -85.278087     32.311637      0.000000      0.000000      0.000000    -79.275208    238.306898   -166.713676		311
W= 89.75148, xmin= -0.00309, parasitic=0.7271, |e|=0.136364	      1.000000     33.148483   -233.186942   -369.495992   -447.082605    380.917355      0.000000    168.973735   -251.404672     46.018231   -145.856868    -47.884081      0.000000      0.000000      0.000000    -83.101808    338.571927   -111.086864		312
W= 89.76812, xmin= -0.00131, parasitic=0.7457, |e|=0.136364	      1.000000     20.346108   -372.538982   -219.285533   -106.809467    187.802874      0.000000   -110.401492    438.409133    304.298238   -176.970408   -335.323727      0.000000      0.000000      0.000000     36.352158   -255.253453    121.887198		313
W= 89.76816, xmin= -0.00130, parasitic=0.7372, |e|=0.136364	      1.000000    -21.660977    -12.037939   -290.658420   -434.657227    135.478622      0.000000    202.469608   -436.332854    288.377638   -246.686931    -23.160285      0.000000      0.000000      0.000000     -4.672283     53.782666    -49.536367		314
W= 89.77566, xmin= -0.00466, parasitic=0.7490, |e|=0.136364	      1.000000    177.627038     96.539554   -229.555474   -189.950076    357.224306      0.000000    185.559461   -304.761455   -241.064224   -188.031240   -103.532032      0.000000      0.000000      0.000000     -6.307472    342.540981     93.068067		315
W= 89.75283, xmin= -0.00139, parasitic=0.7367, |e|=0.136364	      1.000000    -37.309273    287.519515    -18.150484    210.492546    251.092014      0.000000   -220.351111    423.336870   -241.762644   -280.613853   -192.371744      0.000000      0.000000      0.000000    -30.955759    203.866157    -53.959073		316
W= 89.77126, xmin= -0.00128, parasitic=0.7379, |e|=0.447139	      1.000000    267.950119   -142.659471    148.994601    265.136352   -295.401291      0.000000    -76.464905    102.632390   -314.470653   -318.148437    376.986929      0.000000      0.000000      0.000000    -51.942673    294.943530   -105.467180		317
W= 89.76103, xmin= -0.00134, parasitic=0.7295, |e|=0.136364	      1.000000    213.493507    265.744929   -192.102702    124.518960   -280.489521      0.000000    -10.406354   -240.578092    356.498336   -312.416196   -432.019517      0.000000      0.000000      0.000000     92.499384   -445.889771    163.294324		318
W= 89.75100, xmin= -0.00140, parasitic=0.7351, |e|=0.136364	      1.000000   -303.008126   -383.259135     70.753412    243.803656   -250.926270      0.000000    402.821864   -358.769214   -410.819414   -323.666060   -145.290575      0.000000      0.000000      0.000000    119.088996   -200.996892    226.618290		319
W= 89.75478, xmin= -0.00138, parasitic=0.7286, |e|=0.136364	      1.000000    237.762819   -221.402841    112.258702   -361.601742    161.591314      0.000000    131.331969   -297.672335    -64.025598    392.465952   -381.308151      0.000000      0.000000      0.000000    140.005436   -386.624765    190.016388		320
W= 89.76180, xmin= -0.00134, parasitic=0.7307, |e|=0.136364	      1.000000    163.680091    130.360033    207.297953    -42.566745   -375.064529      0.000000   -164.942298    155.113178    301.564945    291.399330     12.750023      0.000000      0.000000      0.000000   -176.106658    310.724435   -141.302971		321
W= 89.75913, xmin= -0.00136, parasitic=0.7392, |e|=0.136364	      1.000000    -89.942111    398.215213    309.307392     88.201777    -25.174982      0.000000   -228.224011    423.738177    234.762199   -160.190349    382.233057      0.000000      0.000000      0.000000     75.112682   -285.947178     40.200677		322
W= 89.75350, xmin= -0.00139, parasitic=0.7440, |e|=0.136364	      1.000000    -38.079790    293.899890    197.874977     12.642021     34.263527      0.000000   -376.618901    289.188244     51.766141    144.631936     92.049529      0.000000      0.000000      0.000000     32.806766   -274.150215    -65.871003		323
W= 89.77832, xmin= -0.00125, parasitic=0.7496, |e|=0.136364	      1.000000   -173.037535    408.184808    -84.362467   -114.929494   -246.805669      0.000000   -173.043663    318.313388   -434.941969    192.360875    432.757677      0.000000      0.000000      0.000000   -121.151750    447.429045   -264.373023		324
W= 89.75490, xmin= -0.00138, parasitic=0.7308, |e|=0.136364	      1.000000    134.803873   -306.705961    159.663346    113.074616   -107.486898      0.000000    190.814657   -299.741575    165.365608     15.616306   -159.263716      0.000000      0.000000      0.000000     77.602660   -438.425386    260.534238		325
W= 89.75133, xmin= -0.00138, parasitic=0.7360, |e|=0.187170	      1.000000   -317.475288    412.187088   -106.167765   -210.328734   -283.342095      0.000000    -36.010898    -25.751966     75.187535   -135.274301    369.182915      0.000000      0.000000      0.000000   -102.190911    448.317785   -302.264813		326
W= 89.75166, xmin= -0.00140, parasitic=0.7442, |e|=0.136364	      1.000000     54.067360    192.250203     22.512284    131.140745   -315.502442      0.000000   -139.971803    226.732314    435.445468    161.238378   -337.224033      0.000000      0.000000      0.000000   -296.039378    435.912185   -389.568391		327
W= 89.75131, xmin= -0.00144, parasitic=0.7437, |e|=0.136364	      1.000000    209.512907    201.834960    -71.733053    162.150740     59.921706      0.000000   -195.294732     39.502955   -215.817351   -245.714643    379.894309      0.000000      0.000000      0.000000    -39.455752    434.017161    131.464891		328
W= 89.76834, xmin= -0.00130, parasitic=0.7413, |e|=0.217867	      1.000000   -138.745627    262.584466   -244.194212    148.650780   -292.263927      0.000000   -186.547706    152.729909    270.336803    -32.190094    -15.410910      0.000000      0.000000      0.000000      1.030163   -157.514110     46.168116		329
W= 89.75412, xmin= -0.00139, parasitic=0.7401, |e|=0.166285	      1.000000    320.558976     27.898122    210.751838   -398.256522   -141.417109      0.000000    -16.572333   -119.956660    444.066564   -367.362208     61.010762      0.000000      0.000000      0.000000     47.976695   -440.455303     78.540369		330
W= 89.77193, xmin= -0.00128, parasitic=0.7396, |e|=0.136364	      1.000000    198.534233    299.975105    181.390471   -116.754367   -291.379018      0.000000   -416.007863    415.591275   -118.839568   -279.949538     -6.390665      0.000000      0.000000      0.000000     54.377299    -97.525144     34.130868		331
W= 89.75724, xmin= -0.00137, parasitic=0.7442, |e|=0.136364	      1.000000     -8.417460   -138.982338   -309.446350   -392.046577    427.860234      0.000000    229.386900   -231.883919   -423.733479   -235.296426    194.733575      0.000000      0.000000      0.000000     65.410934    246.568781    -12.777033		332
W= 89.75652, xmin= -0.00121, parasitic=0.7437, |e|=0.143259	      1.000000    295.586909    184.858896   -215.525696    133.065819   -142.023460      0.000000   -288.541522    380.867761     35.497305    139.152615     81.678896      0.000000      0.000000      0.000000    -89.064158    286.144863   -247.759213		333
W= 89.77133, xmin= -0.00129, parasitic=0.7449, |e|=0.136364	      1.000000     89.659274   -242.373762    263.876106   -313.952067     76.647160      0.000000    178.881320   -423.834094    163.351602    148.238071   -416.550799      0.000000      0.000000      0.000000    127.999918   -442.891190    419.251661		334
W= 89.75403, xmin= -0.00138, parasitic=0.7334, |e|=0.136364	      1.000000   -287.640347    393.334585   -275.882853   -319.767407      2.833352      0.000000   -122.944341    242.774283   -448.679921    238.085225    -67.243121      0.000000      0.000000      0.000000    -91.513134    366.596959     22.012155		335
W= 89.77447, xmin= -0.00127, parasitic=0.7477, |e|=0.136364	      1.000000   -312.812943    372.565160      0.291918   -428.136287    247.790213      0.000000   -144.379144    401.048048   -161.720094    -33.178810    308.789085      0.000000      0.000000      0.000000   -111.367253    433.374307   -390.368879		336
W= 89.77826, xmin= -0.00123, parasitic=0.7448, |e|=0.136364	      1.000000    -32.101532   -135.372491    -23.313382    273.669102    -54.966584      0.000000    193.876513   -306.683358    -27.969487     32.936126   -349.998664      0.000000      0.000000      0.000000    103.738412   -418.849209    327.771482		337
W= 89.78129, xmin= -0.00123, parasitic=0.7490, |e|=0.462603	      1.000000    419.968798    -95.765805   -287.493543    -46.278348    424.931747      0.000000   -127.290228     73.132065   -424.136272   -360.113414   -390.537495      0.000000      0.000000      0.000000     71.243832    106.935159    153.532431		338
W= 89.78357, xmin= -0.00721, parasitic=0.7460, |e|=0.136364	      1.000000    -32.696300   -322.294682   -373.328196   -420.010719     74.752134      0.000000    -82.330358    418.482860    157.872548    361.445881    228.598644      0.000000      0.000000      0.000000   -164.879137    417.135652   -202.749992		339
W= 89.75513, xmin= -0.00138, parasitic=0.7390, |e|=0.136364	      1.000000    294.773486     -4.505310   -408.630907   -317.018198    354.897350      0.000000    111.806250   -276.883933   -408.822172    378.581464   -158.941316      0.000000      0.000000      0.000000    -16.812859    431.339099     24.206925		340
W= 89.75619, xmin= -0.00137, parasitic=0.7379, |e|=0.136364	      1.000000    105.405645    221.059761   -213.750615    401.588596      4.902214      0.000000     34.798518   -320.661711   -111.021457    282.335888    124.238400      0.000000      0.000000      0.000000   -207.692286    421.657496   -234.887991		341
W= 89.77129, xmin= -0.00129, parasitic=0.7403, |e|=0.461261	      1.000000   -423.466314    225.904473     74.294568   -440.050451     14.383199      0.000000    120.127605   -139.612932     33.808403    -96.847443    371.492458      0.000000      0.000000      0.000000    143.995617   -344.950462    118.668745		342
W= 89.76430, xmin= -0.00133, parasitic=0.7429, |e|=0.136364	      1.000000   -303.273228     57.648619    266.708809    436.772072    136.354927      0.000000   -239.906906    386.019422   -285.201738   -319.789931    265.637115      0.000000      0.000000      0.000000    -61.001196    413.458477    -90.022401		343
W= 89.77421, xmin= -0.00127, parasitic=0.7442, |e|=0.321819	      1.000000   -239.216797     14.698721    199.739618     65.336955    402.400569      0.000000     54.427545     34.489952     25.917706    -68.905666    156.805497      0.000000      0.000000      0.000000   -144.411315    379.364578   -379.038580		344
W= 89.77150, xmin= -0.00128, parasitic=0.7385, |e|=0.136364	      1.000000    327.728037   -159.314481    -50.026617   -311.497587   -132.264895      0.000000     65.100443   -130.614768   -289.118222   -163.544551      8.029048      0.000000      0.000000      0.000000    -23.630213    344.115889     10.484367		345
W= 89.76023, xmin= -0.00135, parasitic=0.7410, |e|=1.785833	      1.000000    -45.078458     64.603343    178.384970    140.877785      4.050881      0.000000     25.407876    -70.863138   -390.060771     24.850810    448.388912      0.000000      0.000000      0.000000    147.670963   -406.113610    104.833795		346
W= 89.75433, xmin= -0.00138, parasitic=0.7390, |e|=0.136364	      1.000000     68.365680    148.755031    346.955675     19.877204   -324.953346      0.000000     93.602197   -415.526097     85.198756   -104.416801   -204.579190      0.000000      0.000000      0.000000     50.774957   -183.814780    168.460118		347
W= 89.76467, xmin= -0.00132, parasitic=0.7420, |e|=0.136364	      1.000000    284.968763    272.856432    269.444685   -197.571723    190.101122      0.000000     -9.652045   -371.157738   -370.524675   -239.324271    -67.031214      0.000000      0.000000      0.000000    162.605489   -172.893157    108.159296		348
W= 89.75921, xmin= -0.00131, parasitic=0.7468, |e|=0.136364	      1.000000     22.483332    248.149832    -11.473125    429.347711   -349.290126      0.000000   -150.445059    275.530951    294.769803   -432.896719   -420.224688      0.000000      0.000000      0.000000   -201.632899    426.273769   -366.992980		349
W= 89.75293, xmin= -0.00139, parasitic=0.7255, |e|=0.136364	      1.000000   -272.461338    390.461714   -370.036873   -429.144810    -57.600727      0.000000   -255.273311    438.746014    410.296535    -68.663048   -108.423629      0.000000      0.000000      0.000000     87.410294   -314.202254    114.760252		350
W= 89.75263, xmin= -0.00139, parasitic=0.7335, |e|=0.136364	      1.000000    -73.680242    305.625863    197.722796   -121.902568   -219.510869      0.000000   -204.113327    400.843760    -19.714961     -5.326346    140.631586      0.000000      0.000000      0.000000     79.995926   -222.064228    153.298746		351
W= 89.79101, xmin= -0.00117, parasitic=0.7499, |e|=0.136364	      1.000000   -260.644375     -0.328477   -134.664375   -151.107067    387.152477      0.000000    -48.676902    295.397003     87.466118   -383.900097   -428.663687      0.000000      0.000000      0.000000    116.277286   -272.540642    258.693059		352
W= 89.76501, xmin= -0.00126, parasitic=0.7417, |e|=0.150013	      1.000000   -192.139750    165.873237     43.386642    251.848599    -42.841346      0.000000    -49.305841    180.113109    173.975225    307.832773   -174.108482      0.000000      0.000000      0.000000   -178.212542    353.515227   -368.448775		353
W= 89.76743, xmin= -0.00131, parasitic=0.7470, |e|=0.136364	      1.000000   -206.562055     77.037315     63.622452    -84.528451   -323.247037      0.000000    -79.017179    384.727720    -36.646705    323.283453   -283.339345      0.000000      0.000000      0.000000   -104.042293    192.560772   -134.882816		354
W= 89.77573, xmin= -0.00126, parasitic=0.7484, |e|=0.331718	      1.000000   -198.560265   -205.149470    284.259132   -229.502244   -100.628202      0.000000    133.631193    -52.556245     41.722490     16.941136   -146.014662      0.000000      0.000000      0.000000   -126.409872    294.367239   -215.448247		355
W= 89.76387, xmin= -0.00133, parasitic=0.7357, |e|=0.170050	      1.000000   -261.821271   -226.182950    -50.484503    346.908268    -96.176235      0.000000     37.591558    249.382889   -337.526431    204.326920   -156.001124      0.000000      0.000000      0.000000    -12.893664    103.428260     35.093147		356
W= 89.76097, xmin= -0.00135, parasitic=0.7482, |e|=0.136364	      1.000000     -2.898807   -282.136937    281.560293    114.126895    242.971705      0.000000    200.828801   -435.357451    143.301003     19.307276   -190.983676      0.000000      0.000000      0.000000   -167.309114    308.649252   -438.940583		357
W= 89.78458, xmin= -0.00121, parasitic=0.7453, |e|=0.144909	      1.000000   -365.122658    426.609555   -388.471848   -187.389456    347.200721      0.000000    -95.746476    101.768408   -108.947045    139.114216   -341.749250      0.000000      0.000000      0.000000    171.885796   -443.623966    286.754872		358
W= 89.75374, xmin= -0.00139, parasitic=0.7305, |e|=0.157679	      1.000000   -405.987264     18.614209     51.125909   -174.426700    369.728368      0.000000    -23.221211    362.658965   -179.015103    225.258373   -290.058128      0.000000      0.000000      0.000000   -111.292228    409.796465   -304.961230		359
W= 89.77105, xmin= -0.00129, parasitic=0.7383, |e|=0.232151	      1.000000    278.153632   -273.006642    -77.269559   -420.499542   -322.884921      0.000000    -10.291279     42.944399   -189.619612   -211.416348    106.008397      0.000000      0.000000      0.000000    157.694576   -318.779076    250.395770		360
W= 89.76156, xmin= -0.00133, parasitic=0.7382, |e|=0.136364	      1.000000   -338.925143    306.470861    353.055982    274.907699   -319.856086      0.000000   -143.785729    285.922639    -37.901851     84.509185     -9.553829      0.000000      0.000000      0.000000     19.007195   -205.036159    108.323842		361
W= 89.78378, xmin= -0.00122, parasitic=0.7497, |e|=0.275369	      1.000000    360.535468    287.566300    394.152927    230.871316   -225.545089      0.000000   -264.817357    212.544975     71.370023    125.695354   -443.448058      0.000000      0.000000      0.000000   -191.979748    369.715375   -263.326191		362
W= 89.75125, xmin= -0.00142, parasitic=0.7496, |e|=0.136364	      1.000000      4.376477     68.560296    115.360369    309.947111     85.160002      0.000000   -143.944947    352.800321    325.576310     74.067781   -364.613172      0.000000      0.000000      0.000000    161.141495   -411.511819    170.207480		363
W= 89.77945, xmin= -0.00124, parasitic=0.7478, |e|=0.136364	      1.000000     51.493194    278.021099     -9.614463    364.874946   -423.222975      0.000000   -142.263690      8.362761   -343.464963   -156.908988     -8.546774      0.000000      0.000000      0.000000    -18.337143    262.780328    143.681708		364
W= 89.76442, xmin= -0.00132, parasitic=0.7457, |e|=0.153312	      1.000000   -319.930805    324.406430   -260.028126   -419.672252   -274.150273      0.000000    -84.335996    263.542297    170.268617    208.241550     88.024639      0.000000      0.000000      0.000000    154.277939   -366.265240    224.538373		365
W= 89.76616, xmin= -0.00132, parasitic=0.7385, |e|=0.234733	      1.000000   -367.105015    412.332972   -363.099267   -290.608124   -391.744954      0.000000      0.372414     -6.668660    266.032569     88.211629   -187.758762      0.000000      0.000000      0.000000   -164.390360    385.183523   -138.198776		366
W= 89.76773, xmin= -0.00131, parasitic=0.7410, |e|=0.136364	      1.000000   -447.714499   -392.446744    410.612809     19.262190   -333.138766      0.000000    417.438541   -346.435573    321.251939     71.981173   -398.004078      0.000000      0.000000      0.000000    -44.157905   -174.327193     91.450281		367
W= 89.75805, xmin= -0.00136, parasitic=0.7464, |e|=0.477030	      1.000000    168.593420   -180.898559    317.468289   -269.217726    117.214575      0.000000    -42.089461     93.083354    314.700784    269.689547   -203.598652      0.000000      0.000000      0.000000    175.343409   -437.125182     48.874550		368
W= 89.77080, xmin= -0.00129, parasitic=0.7489, |e|=0.136364	      1.000000    344.517745     15.555900   -339.784230    167.195209     43.760773      0.000000    170.551336   -275.271668   -265.487406    236.493882   -219.895697      0.000000      0.000000      0.000000    -40.945179    370.581443    205.698739		369
W= 89.75745, xmin= -0.00136, parasitic=0.7343, |e|=0.136364	      1.000000   -126.281849    442.799564      1.619676   -261.154279   -418.559159      0.000000   -263.215472    426.700778    209.741941   -443.086516    148.620659      0.000000      0.000000      0.000000     84.740252   -148.888877     46.730971		370
W= 89.78132, xmin= -0.00123, parasitic=0.7470, |e|=0.136364	      1.000000     36.548303    158.795989   -321.357726    401.749774   -257.776278      0.000000   -190.398957    364.120492     76.097428    304.879824   -253.140615      0.000000      0.000000      0.000000   -119.040881    206.874717    -75.521691		371
W= 89.75910, xmin= -0.00135, parasitic=0.7310, |e|=0.279435	      1.000000   -443.731503    110.839085   -378.102035   -385.347325   -198.945646      0.000000     81.282510     15.679708   -288.238659    131.425085    142.656064      0.000000      0.000000      0.000000    -24.417330    291.340214    -22.680475		372
W= 89.75302, xmin= -0.00139, parasitic=0.7437, |e|=0.136364	      1.000000   -247.579561    338.909967   -301.546274   -444.287462    134.744124      0.000000   -336.584192    388.360223   -428.026678    114.747777    346.262353      0.000000      0.000000      0.000000     11.996568    406.200430    -79.668958		373
W= 89.78496, xmin= -0.00121, parasitic=0.7456, |e|=0.136364	      1.000000   -407.099325    399.478137   -338.048917    135.842594     61.860723      0.000000   -155.672921    262.555678    203.448997   -183.707935   -248.356081      0.000000      0.000000      0.000000   -140.671854    440.141786    -99.907572		374
W= 89.77640, xmin= -0.00509, parasitic=0.7480, |e|=0.166592	      1.000000    355.079757   -111.174969    -74.696412    326.305724   -230.326787      0.000000     22.856243   -241.367427   -181.784292    313.841507   -251.045717      0.000000      0.000000      0.000000     -5.110428    -55.636796    177.617882		375
W= 89.77477, xmin= -0.00127, parasitic=0.7392, |e|=0.160941	      1.000000    369.983405    306.817758   -276.487424    183.396377   -384.857161      0.000000    -51.610845   -299.356408   -379.233164   -417.382423    160.547352      0.000000      0.000000      0.000000    -34.180691    388.582152     17.248996		376
W= 89.75052, xmin= -0.00141, parasitic=0.7313, |e|=0.136364	      1.000000    340.610092   -252.289166    147.589253    128.593470   -384.336766      0.000000    110.876571   -229.616338    152.100558   -433.903064    173.077304      0.000000      0.000000      0.000000     85.935459   -395.630400    178.345754		377
W= 89.77783, xmin= -0.00124, parasitic=0.7478, |e|=0.136364	      1.000000    -48.418159    250.884458   -197.700583     31.236410    449.737603      0.000000   -175.646357    196.381133   -208.030648    235.009453   -186.248008      0.000000      0.000000      0.000000    -29.771505    260.545174    -70.612814		378
W= 89.77652, xmin= -0.00850, parasitic=0.7404, |e|=0.404027	      1.000000   -343.558866    197.122596    254.836361    294.823688   -373.863180      0.000000     89.913094   -127.458922    321.707332   -132.862320    347.982419      0.000000      0.000000      0.000000   -167.764223    284.140645   -243.408157		379
W= 89.75154, xmin= -0.00140, parasitic=0.7459, |e|=0.136364	      1.000000    405.114751   -101.432700    -48.810720     25.785609   -323.281810      0.000000     87.347889   -172.863988   -434.094152    204.444010   -356.610576      0.000000      0.000000      0.000000    -22.277230    376.757226    140.428931		380
W= 89.77550, xmin= -0.00126, parasitic=0.7387, |e|=0.136364	      1.000000   -190.759650   -149.044329    -46.240338    409.561861    410.519679      0.000000    305.759604   -420.236684     89.966261   -152.118003     20.436866      0.000000      0.000000      0.000000     83.518813   -301.510291     21.232912		381
W= 89.75469, xmin= -0.00138, parasitic=0.7329, |e|=0.136364	      1.000000    -16.203489     54.117349   -382.905469   -270.869125    163.398632      0.000000    113.442084   -298.291265   -163.283227    359.561668    436.862745      0.000000      0.000000      0.000000    161.755315   -320.284918    115.200015		382
W= 89.76910, xmin= -0.00130, parasitic=0.7433, |e|=0.189280	      1.000000    309.026485   -363.659273   -376.501664   -408.649453    265.581942      0.000000     40.798969    -94.116185    425.300117   -150.143917    358.415977      0.000000      0.000000      0.000000   -125.633079    298.828528   -313.113588		383
W= 89.78737, xmin= -0.00120, parasitic=0.7476, |e|=0.136364	      1.000000    370.631325    265.132139    264.400655    -31.796187    199.310885      0.000000   -380.103942    441.894119     63.320645    184.448249   -240.535290      0.000000      0.000000      0.000000     58.969380   -278.639113     86.976519		384
W= 89.75247, xmin= -0.00139, parasitic=0.7347, |e|=0.414965	      1.000000    269.197534   -315.313336   -176.998325   -345.920407     47.538859      0.000000    -56.973382    148.933330    218.912950   -139.830508   -254.143124      0.000000      0.000000      0.000000    190.128464   -414.085053    256.653477		385
W= 89.75833, xmin= -0.00126, parasitic=0.7417, |e|=0.136364	      1.000000    291.392506   -359.598075   -180.807655    -48.434701   -272.512766      0.000000    111.843408   -211.126007    -24.085423   -443.892894   -391.093324      0.000000      0.000000      0.000000    -27.474739    249.108641     21.763565		386
W= 89.76217, xmin= -0.00134, parasitic=0.7391, |e|=0.136364	      1.000000    113.987541    427.187551   -182.478568    155.377357   -118.639782      0.000000   -286.376231    346.850479     27.001186   -284.303264     47.829442      0.000000      0.000000      0.000000    -56.731964    183.499661    -51.520830		387
W= 89.77007, xmin= -0.00125, parasitic=0.7428, |e|=0.179764	      1.000000   -314.885849    143.675700    -80.125786    192.231519   -130.270410      0.000000    -18.037671    200.070553   -123.268367     -5.805250    163.442704      0.000000      0.000000      0.000000    -82.466574    310.937587   -250.516860		388
W= 89.77573, xmin= -0.00126, parasitic=0.7411, |e|=0.210055	      1.000000    391.065517     64.430688     19.075279    153.284002    376.121315      0.000000    -51.224262   -170.250370    412.074640   -219.425014   -229.442245      0.000000      0.000000      0.000000     17.036806   -193.847964     -7.322285		389
W= 89.76082, xmin= -0.00135, parasitic=0.7447, |e|=0.136364	      1.000000     64.422539     54.774691   -311.618192     61.442552   -308.234779      0.000000   -125.807635    273.979778   -108.763136    -26.274724   -352.968709      0.000000      0.000000      0.000000    -92.783878    286.716059    -92.478803		390
W= 89.75741, xmin= -0.00137, parasitic=0.7463, |e|=0.193556	      1.000000     56.672848     -5.127936    270.513001    280.967951    361.887597      0.000000    134.249847   -240.465980    219.604195   -428.917815    416.037579      0.000000      0.000000      0.000000    -41.708490     31.640526   -225.597971		391
W= 89.75074, xmin= -0.00140, parasitic=0.7265, |e|=0.136364	      1.000000    161.079636     96.537129   -432.802438    271.976520    224.038052      0.000000     41.241911   -260.578573    207.447898    178.367816   -413.392604      0.000000      0.000000      0.000000    -84.001104    123.355103     31.879306		392
W= 89.76380, xmin= -0.00133, parasitic=0.7432, |e|=0.136364	      1.000000    359.806791    395.538957   -340.968153    311.869347    117.741724      0.000000   -343.385637    336.325184    432.569046      6.549739    185.733786      0.000000      0.000000      0.000000    125.548865   -437.282001    140.924215		393
W= 89.75249, xmin= -0.00133, parasitic=0.7381, |e|=0.287487	      1.000000   -419.469004   -351.015396    -16.958481   -295.949590    273.999193      0.000000    124.261285    210.504411    423.192913     69.506015    246.081958      0.000000      0.000000      0.000000     19.891727   -312.402830     31.117411		394
W= 89.75427, xmin= -0.00138, parasitic=0.7269, |e|=0.136364	      1.000000   -319.095980   -271.183595    -38.129144    310.951806      2.696038      0.000000      2.887591    338.395870   -312.878569   -101.863315   -388.971773      0.000000      0.000000      0.000000    172.174337   -423.209287    326.454557		395
W= 89.77928, xmin= -0.00121, parasitic=0.7477, |e|=0.265997	      1.000000    448.684762    195.628092    431.009096    298.375113   -125.579784      0.000000   -108.332944   -151.994338   -217.553093   -304.919347    -56.931016      0.000000      0.000000      0.000000     82.236054   -245.397384    157.483565		396
W= 89.78827, xmin= -0.00119, parasitic=0.7481, |e|=0.136364	      1.000000    192.798242   -102.000397    299.691064   -314.837360    179.647020      0.000000    124.131767   -259.850576    255.011902    264.978139      3.756232      0.000000      0.000000      0.000000     -0.781645   -202.901942    -76.144610		397
W= 89.77077, xmin= -0.00129, parasitic=0.7436, |e|=0.145992	      1.000000    396.509646    265.366663    262.907289   -284.914767   -109.914958      0.000000    -16.436371   -438.773691    431.004830   -132.180586    123.519878      0.000000      0.000000      0.000000     63.391170   -286.017577     23.555021		398
W= 89.77756, xmin= -0.00125, parasitic=0.7452, |e|=0.286686	      1.000000   -211.897149    445.668545     -2.091476   -368.410102   -319.778584      0.000000      0.405604   -152.191858   -203.241869    361.753515   -111.137581      0.000000      0.000000      0.000000    -86.156836    256.828248    -14.355239		399
W= 89.78990, xmin= -0.00118, parasitic=0.7481, |e|=0.136364	      1.000000   -157.651312    -58.184260    337.244502   -342.781294    246.403983      0.000000    253.631057   -400.687949    412.672812    243.575418    272.597520      0.000000      0.000000      0.000000     24.594039   -320.663193   -154.852739		400
W= 89.75178, xmin= -0.00139, parasitic=0.7332, |e|=0.138666	      1.000000   -188.471310     29.571693   -144.250342    -51.989386    -63.684875      0.000000    -28.855432    196.678810   -267.202593    375.726771    320.673349      0.000000      0.000000      0.000000    -54.210010    166.319227    -93.578921		401
W= 89.78153, xmin= -0.00123, parasitic=0.7436, |e|=0.136364	      1.000000    404.475200   -419.050310     65.570357   -243.878693   -291.888071      0.000000    171.603052   -284.899257    135.979349    285.265517   -146.427921      0.000000      0.000000      0.000000     82.177364   -403.146828    182.377039		402
W= 89.78253, xmin= -0.00122, parasitic=0.7480, |e|=0.136364	      1.000000    203.053699    308.709246   -259.835829    422.982109    -70.567978      0.000000   -326.248049    445.016788    235.463683   -353.448435   -249.113598      0.000000      0.000000      0.000000    100.290068   -328.474421    273.812987		403
W= 89.78374, xmin= -0.00121, parasitic=0.7451, |e|=0.136364	      1.000000    121.258356   -410.022697    233.553207    260.829553     16.316624      0.000000    147.606777    -30.214494     75.737487    407.688604    125.518654      0.000000      0.000000      0.000000     60.778283   -434.346978      0.110580		404
W= 89.76973, xmin= -0.00130, parasitic=0.7397, |e|=0.394711	      1.000000   -312.311567    268.965822   -162.588504    -79.691995    222.149093      0.000000     68.059233   -110.519187    432.325871    -54.116727    144.120733      0.000000      0.000000      0.000000     82.432899   -387.942803    174.371140		405
W= 89.75008, xmin= -0.00140, parasitic=0.7245, |e|=0.297592	      1.000000    226.754069    370.156383   -357.485074   -253.272536    -19.953550      0.000000    -85.270766   -193.937782    384.896257   -209.522148    200.536841      0.000000      0.000000      0.000000    104.634790   -351.286294     78.200606		406
W= 89.76288, xmin= -0.00134, parasitic=0.7339, |e|=0.136364	      1.000000     79.028815    258.968653   -320.484925    431.689461    345.087834      0.000000     46.383097   -327.553668   -168.745193   -320.511004     19.759380      0.000000      0.000000      0.000000    174.664650   -406.658435    293.155915		407
W= 89.75427, xmin= -0.00138, parasitic=0.7324, |e|=0.136364	      1.000000    -12.061203   -120.067071   -409.552180   -178.747216   -161.013912      0.000000   -244.472848    403.808795   -295.141545    413.420833   -303.350514      0.000000      0.000000      0.000000    -45.170584    388.370580    277.844831		408
W= 89.77589, xmin= -0.00126, parasitic=0.7487, |e|=0.164403	      1.000000    161.305445    361.326817   -229.739399    190.681571    159.109244      0.000000   -102.492681   -102.509886    310.692959   -116.540536   -168.277337      0.000000      0.000000      0.000000     89.648504   -317.527346    221.284514		409
W= 89.77373, xmin= -0.00127, parasitic=0.7394, |e|=0.155698	      1.000000   -302.542250    418.493646    387.032252    340.266359    203.156790      0.000000    -80.223186     79.311061     36.335135     48.127264    381.400215      0.000000      0.000000      0.000000     55.255830   -298.311271    -49.725669		410
W= 89.77369, xmin= -0.00127, parasitic=0.7450, |e|=0.136364	      1.000000   -222.319164   -292.495326    294.332578   -371.405463   -429.993218      0.000000    -68.105584    438.796830    188.828942    227.687975     98.492689      0.000000      0.000000      0.000000   -124.327012    287.678974   -193.770210		411
W= 89.77770, xmin= -0.00125, parasitic=0.7401, |e|=0.136364	      1.000000    165.725136   -422.849010     31.238352   -135.456881    310.968828      0.000000    214.148075   -199.715629    417.167543    221.544690    281.388982      0.000000      0.000000      0.000000   -163.697413    304.539500   -284.956391		412
W= 89.78327, xmin= -0.00122, parasitic=0.7454, |e|=0.136364	      1.000000    -50.511191    -84.877554   -417.735522   -111.467512   -176.570889      0.000000   -117.985931    358.076220    321.079428   -403.987575    180.021491      0.000000      0.000000      0.000000   -119.587190    376.390463   -192.735466		413
W= 89.75123, xmin= -0.00140, parasitic=0.7321, |e|=0.136364	      1.000000   -197.770892   -133.016973    114.047938   -232.247751    336.749224      0.000000    -66.806727    283.278306    197.701067    432.175796    -85.224936      0.000000      0.000000      0.000000   -161.868239    432.909893   -218.810964		414
W= 89.78206, xmin= -0.00122, parasitic=0.7447, |e|=0.136364	      1.000000    303.820796    399.131640   -292.913211    -64.493823    116.956583      0.000000      2.111359   -393.444705   -250.337899    443.368990    431.648548      0.000000      0.000000      0.000000    -86.356440    430.256238   -112.564442		415
W= 89.76461, xmin= -0.00132, parasitic=0.7333, |e|=0.136364	      1.000000    139.291905   -149.164006   -130.910098   -410.016647    -85.910006      0.000000     40.812498    -57.424457   -150.376860   -333.746333    244.286546      0.000000      0.000000      0.000000    168.062658   -305.680753    127.597369		416
W= 89.76450, xmin= -0.00132, parasitic=0.7376, |e|=0.136364	      1.000000   -166.736119    416.837645   -205.538637    310.965310    422.729717      0.000000   -317.637008    276.595952    359.991679   -346.177656   -356.051606      0.000000      0.000000      0.000000    -95.871876    234.073740    -43.308071		417
W= 89.75716, xmin= -0.00136, parasitic=0.7415, |e|=1.302788	      1.000000    444.075071    360.914308   -429.166447    398.339833   -382.639910      0.000000   -200.325268    -75.247038   -411.137807    218.262230    239.114361      0.000000      0.000000      0.000000     18.075516     -7.201420    192.795181		418
W= 89.75010, xmin= -0.00141, parasitic=0.7336, |e|=0.140596	      1.000000   -224.408179   -124.024377    -23.605810    369.456001   -186.487334      0.000000    227.017735   -335.265545    -96.618981   -289.747143    -10.902253      0.000000      0.000000      0.000000    -69.200092    225.116987   -100.469878		419
W= 89.75443, xmin= -0.00225, parasitic=0.7434, |e|=0.136364	      1.000000     23.627304     60.299957    408.839584    332.896439    314.406429      0.000000   -160.523053    362.868954   -257.494401    -98.833730     62.509085      0.000000      0.000000      0.000000     62.038697    -76.543960    -49.469231		420
W= 89.78612, xmin= -0.00120, parasitic=0.7470, |e|=0.217068	      1.000000      7.255066   -383.237533    262.833010   -105.286243   -396.448500      0.000000    -55.783502    382.787651    403.311924   -138.430521   -370.010267      0.000000      0.000000      0.000000     16.571229   -268.792510    189.231645		421
W= 89.75963, xmin= -0.00135, parasitic=0.7355, |e|=0.136364	      1.000000    -17.287046    205.170242    -68.064019    238.384897   -208.889740      0.000000    141.552460   -368.958941   -272.314139    289.191247    419.738383      0.000000      0.000000      0.000000    -71.781666    365.439981    -67.319499		422
W= 89.75865, xmin= -0.00136, parasitic=0.7452, |e|=0.217207	      1.000000    343.086316   -445.633301   -446.936920    215.836407    388.265543      0.000000    161.570225     23.567101    267.470709   -351.932660   -298.522664      0.000000      0.000000      0.000000     23.555169   -126.901756     23.758130		423
W= 89.75210, xmin= -0.00139, parasitic=0.7401, |e|=0.215254	      1.000000    -99.432667    355.608939    -31.260814   -165.259186    292.224718      0.000000    -41.726555    -31.071413     12.800365   -173.347763    165.594045      0.000000      0.000000      0.000000   -116.861327    349.627615   -343.456028		424
W= 89.77433, xmin= -0.00127, parasitic=0.7495, |e|=0.136364	      1.000000    312.821101   -149.976585   -130.928315    -16.180328   -132.670310      0.000000    271.053454   -380.852899   -392.683118    275.294098    354.635881      0.000000      0.000000      0.000000     17.114338    175.877863     26.354715		425
W= 89.75297, xmin= -0.00139, parasitic=0.7342, |e|=0.136364	      1.000000   -330.825144    429.862379   -391.786160    385.471809     80.094312      0.000000   -362.741081    239.991533    -81.636393    -38.277467   -284.206404      0.000000      0.000000      0.000000    -39.303069    258.508628    171.733908		426
W= 89.76472, xmin= -0.00133, parasitic=0.7432, |e|=0.136364	      1.000000    326.333681   -304.000653    194.979380    260.650076   -267.496504      0.000000    107.706197   -119.129282    183.186412   -337.172228    109.488520      0.000000      0.000000      0.000000     66.107326   -422.398008    102.571790		427
W= 89.76811, xmin= -0.00130, parasitic=0.7371, |e|=0.136364	      1.000000    375.032024   -423.445352    105.615740    198.760521    197.251214      0.000000    134.671177   -167.688739     67.779261   -393.362004   -384.515640      0.000000      0.000000      0.000000     81.560965   -287.247236    154.670767		428
W= 89.75086, xmin= -0.00140, parasitic=0.7473, |e|=0.315971	      1.000000    313.133093   -403.240573    340.770898    370.457280   -306.686032      0.000000    -23.739672     26.710526    409.525228   -267.385297   -256.909646      0.000000      0.000000      0.000000     96.308875   -367.551493    318.769092		429
W= 89.75059, xmin= -0.00140, parasitic=0.7219, |e|=0.136364	      1.000000    -92.611310   -193.010958    245.624527    435.574180    -48.790018      0.000000    297.066765   -396.597655    369.295906    120.203661   -107.648120      0.000000      0.000000      0.000000   -213.250784    354.114724   -161.767203		430
W= 89.78220, xmin= -0.00122, parasitic=0.7460, |e|=0.136364	      1.000000    234.349719   -275.991642   -353.225307   -185.804307   -439.879926      0.000000    198.635270   -423.190426   -396.192388    343.934173   -338.921684      0.000000      0.000000      0.000000    -76.336784    338.169065    145.313666		431
W= 89.75841, xmin= -0.00136, parasitic=0.7381, |e|=0.136364	      1.000000     -5.487630   -267.988601    158.862854   -117.037775      1.141855      0.000000    152.502648   -237.126108    416.201779     65.068036    166.120068      0.000000      0.000000      0.000000     42.908762   -303.944527    108.481110		432
W= 89.76968, xmin= -0.00130, parasitic=0.7425, |e|=0.136364	      1.000000    -39.398825   -307.654381    -33.227441     16.979756   -348.193341      0.000000    140.287893   -128.767825    164.505193    240.717991   -273.604608      0.000000      0.000000      0.000000    103.454596   -420.740260    372.688407		433
W= 89.77450, xmin= -0.00127, parasitic=0.7420, |e|=0.136364	      1.000000    -24.079029    336.036784   -322.704353    325.571655    -10.126926      0.000000   -244.283778    372.218915   -145.909657    419.749429     70.521776      0.000000      0.000000      0.000000   -108.714846    264.796611    -90.201088		434
W= 89.75880, xmin= -0.00135, parasitic=0.7401, |e|=0.136364	      1.000000    439.306744   -140.805288    147.270432   -423.704250    178.220755      0.000000    187.983110   -230.408100    263.538877   -138.704073   -417.032810      0.000000      0.000000      0.000000     51.188271   -343.861296    -43.908364		435
W= 89.75731, xmin= -0.00136, parasitic=0.7476, |e|=0.379594	      1.000000    214.435177   -438.502139     44.126482   -433.605026    378.858166      0.000000    -23.060189    173.225493   -146.754108    153.470809   -426.678129      0.000000      0.000000      0.000000    252.379548   -391.705322    240.686572		436
W= 89.76900, xmin= -0.00130, parasitic=0.7446, |e|=0.136364	      1.000000    186.073860   -115.579332    246.998452    143.792715    244.547232      0.000000    299.059160   -434.748122    109.649696    -82.033755    315.163916      0.000000      0.000000      0.000000     72.925287   -419.839265   -113.589454		437
W= 89.76239, xmin= -0.00131, parasitic=0.7479, |e|=0.136364	      1.000000    200.508310    198.699646   -347.108295     80.778635   -389.844851      0.000000     20.134978   -257.026171    433.621272    -91.628005   -427.733686      0.000000      0.000000      0.000000   -155.502823    432.812720    -75.691798		438
W= 89.76011, xmin= -0.00135, parasitic=0.7465, |e|=0.267997	      1.000000    199.923863    244.062678    299.314035   -410.899461   -213.249334      0.000000   -412.735066    445.774948   -187.450929   -264.954804    -95.517860      0.000000      0.000000      0.000000    -17.952220    253.140946    -26.478834		439
W= 89.78072, xmin= -0.00123, parasitic=0.7480, |e|=0.136364	      1.000000   -423.007388   -166.449881    -40.784618    252.569496    166.155063      0.000000    -96.236334    392.363616    230.891131    395.884890     12.950760      0.000000      0.000000      0.000000     46.416906   -448.608990      8.933502		440
W= 89.75690, xmin= -0.00137, parasitic=0.7468, |e|=0.136364	      1.000000    225.224863     88.107598    415.569205    -94.132004     45.012610      0.000000    238.599636   -419.962575   -212.131359    -86.847558     29.544769      0.000000      0.000000      0.000000     92.759749   -335.633787    -27.019645		441
W= 89.75383, xmin= -0.00138, parasitic=0.7306, |e|=0.136364	      1.000000   -157.432122     91.774705   -317.877670    372.171058   -379.907037      0.000000    -49.535002    168.182126    173.243517   -315.075041   -200.737831      0.000000      0.000000      0.000000    -80.813918    183.261360     33.751224		442
W= 89.76719, xmin= -0.00131, parasitic=0.7417, |e|=0.136364	      1.000000   -186.393627    449.237260    103.730874   -132.098624    280.518962      0.000000   -145.891851    194.812565    138.811867   -210.437913    210.869716      0.000000      0.000000      0.000000   -129.529958    333.010356   -300.240310		443
W= 89.76700, xmin= -0.00131, parasitic=0.7474, |e|=0.136364	      1.000000    -18.637835    -77.083355   -306.000627     73.617023     20.659120      0.000000   -123.075116    410.938469    313.623177    171.748483   -221.026503      0.000000      0.000000      0.000000   -193.088198    323.433417   -251.189838		444
W= 89.75468, xmin= -0.00133, parasitic=0.7348, |e|=0.229593	      1.000000    150.829057   -437.884948    251.955377     14.201389     27.379693      0.000000     37.835268     69.931753    167.716068    -18.289573    220.916641      0.000000      0.000000      0.000000   -135.730888    317.900086   -417.000215		445
W= 89.77371, xmin= -0.00128, parasitic=0.7440, |e|=0.211770	      1.000000    233.064882     15.797801    179.628045    301.584633   -320.729092      0.000000   -200.662670    269.241447    -82.314045     12.518971   -352.908245      0.000000      0.000000      0.000000   -116.773725    403.346605    -62.247631		446
W= 89.75244, xmin= -0.00139, parasitic=0.7386, |e|=0.222257	      1.000000    223.877126     57.608029    448.340649    419.979028   -304.582489      0.000000   -192.573938    285.049553   -142.285010   -173.606067    322.590726      0.000000      0.000000      0.000000    194.664033   -428.599935    160.605678		447
W= 89.75499, xmin= -0.00138, parasitic=0.7266, |e|=0.145018	      1.000000   -444.654303    269.555675   -217.266672   -224.459481    165.048075      0.000000    -68.100355    175.303451   -419.550239   -352.358602   -104.590830      0.000000      0.000000      0.000000    246.796670   -425.073566    266.768660		448
W= 89.78316, xmin= -0.00122, parasitic=0.7473, |e|=0.136364	      1.000000   -247.560497   -280.387059    326.390312    127.523625    -90.147803      0.000000    232.115448   -115.052773   -280.937839   -286.959726   -344.567599      0.000000      0.000000      0.000000     85.844303   -183.364001    119.508605		449
W= 89.76008, xmin= -0.00135, parasitic=0.7402, |e|=0.136364	      1.000000    149.823357     98.709850   -395.062751    -87.546266    139.618860      0.000000   -169.202628    253.390270    -55.765291    -80.708114    189.104979      0.000000      0.000000      0.000000   -124.932896    388.366266   -207.757703		450
W= 89.75450, xmin= -0.00133, parasitic=0.7468, |e|=0.136364	      1.000000    -84.457123   -176.974058    117.733641    -17.122882    258.557067      0.000000    138.009146   -105.603539   -262.954279    132.884237    279.079845      0.000000      0.000000      0.000000    -34.639666    308.002877   -220.326282		451
W= 89.76551, xmin= -0.00132, parasitic=0.7412, |e|=0.136364	      1.000000    -62.032446    -87.036516   -118.765633   -241.820323     88.880768      0.000000     74.672922    -87.449751   -128.007823    201.374572    439.405900      0.000000      0.000000      0.000000    111.122693   -225.079700     86.732199		452
W= 89.75468, xmin= -0.00138, parasitic=0.7370, |e|=0.327506	      1.000000   -436.256819    313.487111    118.668376    100.063089   -324.676732      0.000000     75.164799    -61.316910   -144.288814   -360.237324    313.535943      0.000000      0.000000      0.000000    217.825739   -394.130836    219.178463		453
W= 89.75917, xmin= -0.00136, parasitic=0.7489, |e|=0.136364	      1.000000     72.000863    -23.815152    354.387267   -141.487723     84.273626      0.000000    107.300839   -377.422865     32.262066    -83.526778      9.228847      0.000000      0.000000      0.000000    195.970960   -443.084657    371.940151		454
W= 89.76310, xmin= -0.00134, parasitic=0.7399, |e|=0.177214	      1.000000   -185.895775     80.193269   -442.077598   -199.983921   -375.315144      0.000000    -88.472132    193.810799   -102.342727    430.100169     53.442358      0.000000      0.000000      0.000000    115.273731   -379.591654    263.868523		455
W= 89.78399, xmin= -0.00121, parasitic=0.7489, |e|=0.136364	      1.000000    252.670095    350.699244   -396.058600    -46.365658    389.656033      0.000000   -266.691764    227.333612     82.308538   -262.675289      8.325537      0.000000      0.000000      0.000000    -63.146496    258.607804   -117.269655		456
W= 89.77256, xmin= -0.00128, parasitic=0.7387, |e|=0.136364	      1.000000   -240.093798    -75.235287   -285.887141     19.687547     25.055777      0.000000    -95.659160    332.705251      6.241654   -431.475405   -161.585607      0.000000      0.000000      0.000000    148.282134   -377.274053    185.222608		457
W= 89.75349, xmin= -0.00138, parasitic=0.7298, |e|=0.136364	      1.000000    368.760050   -158.019991    316.098507    -75.210473    -16.393149      0.000000    160.793149   -221.124340   -113.772043    152.647221   -152.812103      0.000000      0.000000      0.000000     88.720013   -369.757662     21.259629		458
W= 89.75439, xmin= -0.00139, parasitic=0.7412, |e|=0.345218	      1.000000   -433.907143    368.825084    269.606461   -345.093726    423.836785      0.000000    -14.833467    -70.640583     18.764251    136.376148    277.918618      0.000000      0.000000      0.000000    -58.924920    219.465755   -234.002976		459
W= 89.77865, xmin= -0.00124, parasitic=0.7475, |e|=0.136364	      1.000000    353.121429   -276.642553   -390.466056    -26.061260   -378.123249      0.000000    136.719402   -409.572820   -100.975318   -138.168126   -254.565077      0.000000      0.000000      0.000000    -95.794464    334.055001     45.691493		460
W= 89.76412, xmin= -0.00133, parasitic=0.7371, |e|=0.136364	      1.000000    368.556566   -158.080494   -224.387340    -68.587288    258.347004      0.000000     96.991064   -278.768735    376.645475   -375.384479    242.199838      0.000000      0.000000      0.000000     85.406262   -394.942690     72.040298		461
W= 89.77574, xmin= -0.00126, parasitic=0.7387, |e|=0.143726	      1.000000    428.123176    -54.971038    328.816841   -199.119821   -259.197275      0.000000     30.729203   -236.096183   -254.062329   -297.465478     30.452599      0.000000      0.000000      0.000000    194.442568   -441.433146    141.941350		462
W= 89.75443, xmin= -0.00138, parasitic=0.7311, |e|=0.136364	      1.000000     90.676960    424.224680    173.080214   -129.171753   -215.083210      0.000000   -256.103098    279.406008   -336.138663   -212.254901   -344.282816      0.000000      0.000000      0.000000    128.073388   -188.469703    299.030554		463
W= 89.77367, xmin= -0.00126, parasitic=0.7428, |e|=0.136364	      1.000000    351.262487    432.988117    -35.516461    -81.277794    271.484182      0.000000   -361.512526    373.400575   -354.578151   -312.656434   -321.230525      0.000000      0.000000      0.000000    -53.764404    429.339889   -202.028414		464
W= 89.76209, xmin= -0.00134, parasitic=0.7496, |e|=0.194866	      1.000000    -64.291190    259.285889    249.442595     34.868678    326.264503      0.000000    104.234872   -419.019388    379.625541   -373.697935    423.845602      0.000000      0.000000      0.000000    121.241879   -327.695228     86.974032		465
W= 89.78731, xmin= -0.00120, parasitic=0.7484, |e|=0.361376	      1.000000   -240.745694     -0.902991   -281.230784   -283.567158    423.320114      0.000000    171.878861   -216.308193    265.793444   -283.776968   -373.331345      0.000000      0.000000      0.000000    -94.104102    359.329339    -91.299841		466
W= 89.77325, xmin= -0.00127, parasitic=0.7395, |e|=0.222309	      1.000000    131.392240   -375.900536     98.956588    318.705496    186.832012      0.000000     24.705917    140.277417    -49.399216    -80.957222    396.619810      0.000000      0.000000      0.000000    114.911454   -405.515869     20.243172		467
W= 89.77085, xmin= -0.00129, parasitic=0.7417, |e|=0.136364	      1.000000    338.967255     91.045376    182.655442   -225.781713   -149.745487      0.000000     48.952242   -410.096750     46.883627   -276.954185    343.392975      0.000000      0.000000      0.000000    164.144708   -340.535721     40.366330		468
W= 89.76748, xmin= -0.00131, parasitic=0.7436, |e|=0.136364	      1.000000     35.606912   -310.283627    357.738023   -351.434460   -301.261951      0.000000    169.118243   -293.918992   -116.234476    363.934676     16.230317      0.000000      0.000000      0.000000    151.466294   -439.331882    361.052953		469
W= 89.77478, xmin= -0.00126, parasitic=0.7448, |e|=0.136364	      1.000000   -297.045941   -435.793816    325.192974     59.144668   -446.029872      0.000000    390.473034   -441.297625    197.262463   -254.832710    231.280886      0.000000      0.000000      0.000000    115.417007   -350.088724     66.314946		470
W= 89.76467, xmin= -0.00132, parasitic=0.7393, |e|=0.136364	      1.000000    417.206903    -13.580428   -255.265351    286.267293    255.494736      0.000000     60.973385   -441.837178   -308.880932   -137.754432   -222.688309      0.000000      0.000000      0.000000     30.762755     56.489396    121.109988		471
W= 89.78701, xmin= -0.00120, parasitic=0.7486, |e|=0.136364	      1.000000   -342.664759    253.684961   -116.462262     93.301490    334.251791      0.000000   -109.041901    300.169548    -83.692158   -243.956612    109.781562      0.000000      0.000000      0.000000    143.599990   -292.762769    108.258336		472
W= 89.75894, xmin= -0.00135, parasitic=0.7395, |e|=0.136364	      1.000000   -162.229810   -291.356652   -219.985095    141.617544   -289.218948      0.000000    -37.501670    416.613829    245.626778   -296.142885   -376.060898      0.000000      0.000000      0.000000   -129.220351    258.724161    -10.377721		473
W= 89.75172, xmin= -0.00140, parasitic=0.7272, |e|=0.316741	      1.000000    425.099602    101.152060    -55.625475    -13.998044     37.254391      0.000000   -112.968136    -66.904285    260.987521   -162.973884   -286.305352      0.000000      0.000000      0.000000     58.389936   -291.313914    164.260008		474
W= 89.76937, xmin= -0.00130, parasitic=0.7375, |e|=0.136364	      1.000000    -88.803832    337.994693    -35.959558   -120.040231    274.859901      0.000000   -164.144487    203.519704    136.949036    186.793974    -16.981793      0.000000      0.000000      0.000000   -123.324042    335.154502   -273.790642		475
W= 89.78089, xmin= -0.00123, parasitic=0.7487, |e|=0.136364	      1.000000    271.188652   -338.162976    296.135453   -423.219323    310.823755      0.000000    410.951658   -434.526944   -327.803618   -403.913466    128.949015      0.000000      0.000000      0.000000    192.618783   -447.060280    -87.316880		476
W= 89.76807, xmin= -0.00130, parasitic=0.7421, |e|=0.136364	      1.000000     -6.655739    187.029708   -379.139666    250.028732    251.381508      0.000000   -209.112072    391.536567   -326.215402    424.813791    -23.685716      0.000000      0.000000      0.000000    -17.429054     60.196911     90.633866		477
W= 89.75126, xmin= -0.00140, parasitic=0.7244, |e|=0.136364	      1.000000    -39.087767   -302.002888    433.961244    336.032133    -76.602739      0.000000    263.220205   -286.423456     54.868935    329.459415   -320.398126      0.000000      0.000000      0.000000   -141.504595    231.605054    -61.446426		478
W= 89.76741, xmin= -0.00131, parasitic=0.7344, |e|=0.136364	      1.000000   -327.947148    -76.251602     41.771782    179.416601    129.666250      0.000000    -48.826810    280.787672   -164.288258    -19.668266   -129.411445      0.000000      0.000000      0.000000    134.956159   -397.256500    138.316008		479
W= 89.77752, xmin= -0.00125, parasitic=0.7399, |e|=0.136364	      1.000000    347.758771   -361.180757    424.130341    188.894494   -307.470297      0.000000    208.565749   -327.549298    409.855688   -254.088487    130.664074      0.000000      0.000000      0.000000     17.917573   -311.651292    -74.415747		480
W= 89.75358, xmin= -0.00138, parasitic=0.7262, |e|=0.136364	      1.000000    216.141198    414.225247    389.243752   -140.727844     21.227958      0.000000   -253.756292    140.593775    408.872810   -269.131015   -173.068947      0.000000      0.000000      0.000000      8.906005   -191.220915    -50.967133		481
W= 89.76783, xmin= -0.00130, parasitic=0.7371, |e|=0.136364	      1.000000    401.283342    -38.162293    291.854337   -428.454761    163.518608      0.000000    176.661874   -375.637291    314.423906   -151.156086    286.776213      0.000000      0.000000      0.000000     78.939815   -431.023689   -194.623079		482
W= 89.75021, xmin= -0.00140, parasitic=0.7350, |e|=0.801108	      1.000000   -435.289999    255.385560    219.087714    -95.251881    146.013128      0.000000    160.276109   -234.639829    156.978223   -336.683195     45.590286      0.000000      0.000000      0.000000   -146.516489    379.458002   -359.589488		483
W= 89.76092, xmin= -0.00134, parasitic=0.7369, |e|=0.136364	      1.000000   -188.239073   -407.583148     98.394400     88.598527   -237.293913      0.000000    358.209208   -225.110884     49.900944   -142.769260     10.686762      0.000000      0.000000      0.000000     29.733484   -164.909153     14.836457		484
W= 89.75275, xmin= -0.00140, parasitic=0.7290, |e|=0.164301	      1.000000   -284.074618    314.746540   -256.137471   -179.099432    151.091163      0.000000    -61.325908    159.054965    -47.804948   -251.451237    -37.546523      0.000000      0.000000      0.000000    173.270127   -417.973797    420.180198		485
W= 89.75309, xmin= -0.00132, parasitic=0.7368, |e|=0.136364	      1.000000     92.811885    -82.897794   -311.922831   -425.627493    146.998417      0.000000     79.749280   -190.117758   -441.976925    131.023575      7.816603      0.000000      0.000000      0.000000    192.102821   -340.811689    364.264490		486
W= 89.76242, xmin= -0.00134, parasitic=0.7347, |e|=1.111732	      1.000000    294.877992    269.987421    363.401014    154.081253   -221.082393      0.000000   -131.592671    -72.459812   -148.117498     12.017475    399.881045      0.000000      0.000000      0.000000    107.844657   -347.753758    173.407501		487
W= 89.77351, xmin= -0.00127, parasitic=0.7375, |e|=0.162502	      1.000000    305.381492   -418.910211   -136.475711   -379.843584    428.668250      0.000000     64.739575    -10.686312    312.875379    402.182690    310.034313      0.000000      0.000000      0.000000     91.691403   -419.483034    -67.575929		488
W= 89.75844, xmin= -0.00136, parasitic=0.7462, |e|=0.136364	      1.000000   -348.477727     78.491370   -349.216255   -206.281001     48.297761      0.000000   -248.140998    325.018939   -314.322358     41.432998   -309.130596      0.000000      0.000000      0.000000    -15.619037    418.091535    178.148022		489
W= 89.77390, xmin= -0.00127, parasitic=0.7422, |e|=0.171881	      1.000000    357.028328    -19.060175   -302.608632    153.960286    253.223412      0.000000    -20.838667    -65.668431     30.156679    -14.816101    375.477404      0.000000      0.000000      0.000000    -66.887665    301.252999   -113.859146		490
W= 89.76153, xmin= -0.00128, parasitic=0.7391, |e|=0.220400	      1.000000    237.869945    426.625321   -126.705842   -372.668594    202.128550      0.000000    -82.166843   -254.864844    301.684652    206.874364    180.517869      0.000000      0.000000      0.000000     83.691719   -424.855088    211.344823		491
W= 89.76631, xmin= -0.00130, parasitic=0.7371, |e|=0.136364	      1.000000    168.381102     14.002102   -137.731793    271.090616   -179.515932      0.000000    127.826516   -426.603005      5.537829   -341.967113    128.416393      0.000000      0.000000      0.000000   -112.400014    446.575704   -280.541680		492
W= 89.76482, xmin= -0.00132, parasitic=0.7361, |e|=0.136364	      1.000000    249.403451   -305.170194   -418.789073   -255.383764    158.190631      0.000000    135.471816   -275.063802   -214.884955   -135.135168    -85.306927      0.000000      0.000000      0.000000    -62.148643    365.790784    -28.217221		493
W= 89.75229, xmin= -0.00140, parasitic=0.7290, |e|=0.150278	      1.000000    219.186083    355.837434    375.305620    194.877814    304.183645      0.000000    -54.313075   -253.672916     40.237936    174.764589   -343.878529      0.000000      0.000000      0.000000     80.936138   -443.597777    245.523321		494
W= 89.76432, xmin= -0.00132, parasitic=0.7449, |e|=0.371212	      1.000000    393.060359   -105.140703    274.669880    281.116214    198.547601      0.000000    -95.816660      3.979136    -26.074543   -114.636054   -132.743427      0.000000      0.000000      0.000000    178.891847   -413.141215    190.409267		495
W= 89.75349, xmin= -0.00138, parasitic=0.7479, |e|=0.136364	      1.000000    279.431719    110.326190   -302.913108    236.409683   -434.354243      0.000000     40.245559   -443.887259    166.041129    324.203256   -225.965068      0.000000      0.000000      0.000000   -200.910388    231.925700    -47.098300		496
W= 89.76861, xmin= -0.00130, parasitic=0.7391, |e|=0.177260	      1.000000   -413.787338    148.636425   -226.513603   -181.307069    111.927500      0.000000     -1.744695    125.735956    408.756176    324.572404    -56.592300      0.000000      0.000000      0.000000   -174.601867    405.002693   -273.620334		497
W= 89.76084, xmin= -0.00135, parasitic=0.7470, |e|=0.234930	      1.000000    443.935196     93.579158   -128.598102    -16.252486     49.324218      0.000000    -61.214849   -301.587222    275.584114   -262.646735     62.664488      0.000000      0.000000      0.000000    147.550098   -356.755852    282.020116		498
W= 89.76208, xmin= -0.00134, parasitic=0.7348, |e|=0.157227	      1.000000    317.780082    349.479758    259.017018    -88.353924     46.482401      0.000000   -265.845798    177.087457    159.066606    -71.567506   -177.165610      0.000000      0.000000      0.000000    135.687185   -427.636641    159.095500		499
W= 89.76922, xmin= -0.00130, parasitic=0.7357, |e|=0.136364	      1.000000   -257.441020    146.662368    398.726284   -357.270906    195.448507      0.000000   -157.988956    352.886093    204.163579   -357.652846   -295.514133      0.000000      0.000000      0.000000     63.895445   -234.716375      4.902632		500
W= 89.77945, xmin= -0.00124, parasitic=0.7442, |e|=0.136364	      1.000000     18.103995   -418.241661    124.278920     17.154725    316.673158      0.000000    192.885169   -170.072955    281.222740   -300.041085    157.054503      0.000000      0.000000      0.000000    138.630218   -417.192854     -3.149170		501
W= 89.75752, xmin= -0.00121, parasitic=0.7460, |e|=0.136364	      1.000000   -145.690160    -26.707505     17.237984    333.547578    392.932933      0.000000   -141.296579    443.151494    -99.494160   -204.070015    -53.173503      0.000000      0.000000      0.000000    -86.519510    409.224907   -321.525345		502
W= 89.75708, xmin= -0.00137, parasitic=0.7437, |e|=0.175513	      1.000000    317.803968   -412.235775   -232.062596    147.178001    110.690806      0.000000     83.433664   -288.923331    192.857377     19.897304    317.428011      0.000000      0.000000      0.000000   -145.354037    294.165530   -410.256958		503
W= 89.75948, xmin= -0.00135, parasitic=0.7471, |e|=0.136364	      1.000000    403.735885    215.501382    382.370954     93.911853   -395.002657      0.000000     -7.593944   -160.376084    396.661429     75.451062    442.287021      0.000000      0.000000      0.000000    -19.121052   -360.088703   -234.862744		504
W= 89.75236, xmin= -0.00139, parasitic=0.7383, |e|=0.136364	      1.000000    -40.791015    199.541908     61.021866    169.623710    313.741132      0.000000    144.645424   -296.081036   -203.528170    162.315936    137.930703      0.000000      0.000000      0.000000     15.252939     20.648479    -14.822919		505
W= 89.75024, xmin= -0.00140, parasitic=0.7281, |e|=0.136364	      1.000000   -177.256414    311.198768    150.548202    101.522401    262.315772      0.000000   -182.773731    346.046058    424.836501   -435.898668     66.805196      0.000000      0.000000      0.000000    119.097400   -394.323607     27.079631		506
W= 89.75226, xmin= -0.00140, parasitic=0.7423, |e|=0.288878	      1.000000   -287.253002    233.168162    388.223660   -400.923722    254.127516      0.000000   -299.478266    410.715975    340.979508    418.281491    155.513495      0.000000      0.000000      0.000000    -67.889808    -77.066326   -179.009669		507
W= 89.75462, xmin= -0.00138, parasitic=0.7333, |e|=0.136364	      1.000000    -84.244374     50.770727    -12.487682    158.178586    -45.747061      0.000000   -243.973391    325.288394   -224.970603    -39.187779   -424.621251      0.000000      0.000000      0.000000    -58.965774    365.679164    165.956689		508
W= 89.75083, xmin= -0.00141, parasitic=0.7365, |e|=0.136364	      1.000000   -393.691767    296.052113    208.747344   -144.384618   -112.773450      0.000000   -268.726280    439.840753     80.950797    415.642072    134.431466      0.000000      0.000000      0.000000   -139.438668    399.078538   -217.805509		509
W= 89.76253, xmin= -0.00133, parasitic=0.7491, |e|=0.320219	      1.000000   -244.804826    139.711449   -129.105183    266.142187    258.570627      0.000000    203.569007   -436.969127    159.538355    289.398383   -276.276572      0.000000      0.000000      0.000000   -244.636535    357.600967   -220.931388		510
W= 89.77171, xmin= -0.00128, parasitic=0.7439, |e|=0.136364	      1.000000    145.324856     30.293548     -7.596853     94.830419   -353.022324      0.000000   -278.987533    334.389259    434.286326    236.496517    340.226993      0.000000      0.000000      0.000000   -188.253484    403.457405    -81.700322		511
W= 89.75118, xmin= -0.00140, parasitic=0.7225, |e|=0.136364	      1.000000    109.386738    372.510698    -15.499875    280.635978    285.931000      0.000000     31.641421   -360.723892    322.517976    328.998218   -346.135956      0.000000      0.000000      0.000000   -204.982535    368.975007   -105.884353		512
W= 89.76428, xmin= -0.00132, parasitic=0.7363, |e|=0.136364	      1.000000    153.397850     -7.888406    135.329453    265.067947   -164.590369      0.000000    108.121752   -351.068948   -104.486951   -381.247289   -364.238691      0.000000      0.000000      0.000000   -119.922589    372.285138    -43.635425		513
W= 89.75194, xmin= -0.00139, parasitic=0.7460, |e|=0.136364	      1.000000    120.147637   -178.700984    138.444088    406.239819    396.287221      0.000000    320.774245   -149.515277    209.702747    292.793620    -34.267845      0.000000      0.000000      0.000000   -156.024917    435.328944    114.228406		514
W= 89.76468, xmin= -0.00132, parasitic=0.7488, |e|=0.136364	      1.000000   -311.494897    426.718969     11.503355    160.435490    315.892576      0.000000   -354.662650    197.743771    119.346661   -359.944375     98.448606      0.000000      0.000000      0.000000     81.167394   -380.533775   -132.274414		515
W= 89.76138, xmin= -0.00134, parasitic=0.7463, |e|=0.136364	      1.000000    190.689401    189.271472    -19.015043     -5.927707   -353.846709      0.000000   -198.801458    130.035944    -87.686501   -244.451851   -270.597062      0.000000      0.000000      0.000000    124.845127   -446.842090    212.038989		516
W= 89.76023, xmin= -0.00135, parasitic=0.7305, |e|=0.145151	      1.000000    273.017458    408.911161    185.808694    411.723303    -46.642742      0.000000    -60.188080   -301.169485   -374.078473   -160.081546    -53.422967      0.000000      0.000000      0.000000   -104.316817    414.421406    -74.174250		517
W= 89.78979, xmin= -0.00118, parasitic=0.7483, |e|=0.136364	      1.000000   -356.140848    234.182983   -394.035785    241.770321   -328.117268      0.000000   -100.087628    254.614610      4.013041   -250.275406    425.506839      0.000000      0.000000      0.000000   -104.027921    391.132281   -120.285562		518
W= 89.79131, xmin= -0.00117, parasitic=0.7498, |e|=0.136364	      1.000000   -386.235400    250.803013    185.014733   -445.893546   -103.892117      0.000000   -240.300501    440.200518    265.212600    194.559643   -284.604745      0.000000      0.000000      0.000000     62.820390   -394.876214     78.337123		519
W= 89.76564, xmin= -0.00132, parasitic=0.7322, |e|=0.136364	      1.000000   -274.300044    262.714765   -356.562056   -296.158039   -409.248646      0.000000   -195.312737    303.114515     25.025685   -374.822570     70.743415      0.000000      0.000000      0.000000    -63.393285    369.153925      9.835834		520
W= 89.76775, xmin= -0.00130, parasitic=0.7419, |e|=0.136364	      1.000000    -40.271432   -203.053388      8.051801    227.629061    113.618741      0.000000    108.277739   -100.204472   -228.695376   -168.349538    106.857882      0.000000      0.000000      0.000000    -17.368185    131.494459    -39.260413		521
W= 89.76510, xmin= -0.00132, parasitic=0.7442, |e|=0.136364	      1.000000   -399.654193    -81.697516    407.590967    112.408215    434.636857      0.000000   -126.153901    259.510525    231.153638   -305.121569    -45.015953      0.000000      0.000000      0.000000    -12.929991   -132.829105   -192.085594		522
W= 89.76729, xmin= -0.00131, parasitic=0.7395, |e|=0.136364	      1.000000    321.004362    -80.723821    435.266946    362.543926    433.226768      0.000000    214.328496   -294.162540    425.407489     -7.342723   -416.895331      0.000000      0.000000      0.000000    -50.599739   -214.071776   -122.102096		523
W= 89.77235, xmin= -0.00128, parasitic=0.7391, |e|=0.424215	      1.000000   -176.830301    295.781363    128.652291   -146.611870    245.812616      0.000000    141.835177   -406.141762    284.734732    204.602948   -397.131964      0.000000      0.000000      0.000000     94.881864   -448.046236    174.773249		524
W= 89.75076, xmin= -0.00140, parasitic=0.7397, |e|=0.136364	      1.000000   -377.015619    -73.962214   -330.647094   -104.781460    -71.531337      0.000000    -79.429768    242.095193   -356.477015   -354.649891   -325.659832      0.000000      0.000000      0.000000     23.280250    332.692787    164.887996		525
W= 89.77578, xmin= -0.00126, parasitic=0.7411, |e|=0.136364	      1.000000    107.469966   -387.538040     37.408497    -73.801859    129.880695      0.000000    284.735889   -434.091034   -298.461893    -64.126917   -118.798820      0.000000      0.000000      0.000000    -54.180394    379.234980   -145.192345		526
W= 89.76267, xmin= -0.00124, parasitic=0.7421, |e|=0.146892	      1.000000   -152.769256     -6.149963    377.304409    193.050768    393.625608      0.000000    -13.042777    159.917886    132.956832    118.002370    211.458854      0.000000      0.000000      0.000000     73.465121   -418.939981    155.985304		527
W= 89.76824, xmin= -0.00130, parasitic=0.7423, |e|=0.138334	      1.000000   -317.260282     91.690610   -274.168082     56.876462   -391.292122      0.000000    -57.539865    324.469102   -348.086428   -375.873711   -208.772258      0.000000      0.000000      0.000000    -82.157407    422.675481     14.068934		528
W= 89.75361, xmin= -0.00138, parasitic=0.7424, |e|=0.136364	      1.000000    396.148262    220.751027    278.455101    314.531222    170.962126      0.000000    303.851004   -436.227511    394.634068   -171.978886    127.788836      0.000000      0.000000      0.000000    -10.571176   -325.719509   -268.719120		529
W= 89.76227, xmin= -0.00132, parasitic=0.7362, |e|=0.136364	      1.000000    415.561051    389.899906   -252.828353   -302.189680   -251.646774      0.000000   -417.214447    437.122888     45.862699   -292.024255    363.237734      0.000000      0.000000      0.000000    -63.409438    358.733573   -241.376987		530
W= 89.77400, xmin= -0.00127, parasitic=0.7473, |e|=0.161103	      1.000000    307.291420   -406.865887   -242.052540     -4.278910   -147.253568      0.000000     57.682530     38.452115   -409.522719     99.999111    435.445252      0.000000      0.000000      0.000000    -19.312638    403.185182   -119.134414		531
W= 89.78349, xmin= -0.00122, parasitic=0.7488, |e|=0.144247	      1.000000    339.644823    -76.879047   -227.368958     44.430166    251.387450      0.000000     44.314246   -297.262568   -443.239258   -422.614118   -307.472140      0.000000      0.000000      0.000000    262.281880   -396.073818    418.735103		532
W= 89.75142, xmin= -0.00131, parasitic=0.7370, |e|=0.136364	      1.000000     95.429396     66.974378    139.231238    260.189009    305.593314      0.000000   -140.283936    222.979155    449.794660    185.002579    301.263717      0.000000      0.000000      0.000000     -9.385498   -336.647195     10.281183		533
W= 89.77761, xmin= -0.00125, parasitic=0.7450, |e|=0.136364	      1.000000    -81.372608   -350.925581    318.513134   -406.945324    402.412111      0.000000    300.864560   -326.627913   -421.258859    202.632408    285.372137      0.000000      0.000000      0.000000    -36.019518    377.692586   -269.902275		534
W= 89.76425, xmin= -0.00132, parasitic=0.7395, |e|=0.353961	      1.000000   -267.021498   -289.275136    316.578829    385.263399   -132.532161      0.000000     92.458520    160.459398   -156.420689   -166.635848      1.611095      0.000000      0.000000      0.000000   -159.712954    393.275468   -198.411581		535
W= 89.75142, xmin= -0.00140, parasitic=0.7369, |e|=0.136364	      1.000000    285.203468   -326.045116    113.147850   -210.157358    302.607907      0.000000    300.769214   -151.737324   -227.925641   -250.101865   -412.354375      0.000000      0.000000      0.000000    147.171410   -414.972871    -20.333771		536
W= 89.75705, xmin= -0.00136, parasitic=0.7364, |e|=0.136364	      1.000000   -341.715280     20.745397   -267.155835   -137.753041   -354.150584      0.000000    -53.029385    373.977608    149.585863    183.094601    -21.746849      0.000000      0.000000      0.000000   -212.669148    432.092580   -156.042985		537
W= 89.76094, xmin= -0.00135, parasitic=0.7355, |e|=0.141937	      1.000000   -395.928837   -434.569384    361.650132    283.093418   -186.999406      0.000000    349.364964   -285.473650    385.223312    350.119804   -278.247453      0.000000      0.000000      0.000000    -55.805001   -193.938165     39.543406		538
W= 89.75270, xmin= -0.00134, parasitic=0.7334, |e|=0.136364	      1.000000      7.791942    407.438526   -432.451488    340.561318   -213.888565      0.000000   -155.290636    125.439551   -215.194402   -273.162124   -283.686134      0.000000      0.000000      0.000000      8.450797    166.357127     79.160235		539
W= 89.76531, xmin= -0.00132, parasitic=0.7397, |e|=0.136364	      1.000000    179.891294    147.243102     90.589956   -386.532307    -22.901533      0.000000   -271.179423    351.574137    373.870377   -289.506617   -370.590858      0.000000      0.000000      0.000000     12.900292   -201.535467    113.761473		540
W= 89.75985, xmin= -0.00135, parasitic=0.7328, |e|=0.136364	      1.000000    148.932235    248.693809    333.895927    215.205989    146.430311      0.000000   -275.752733    327.708493   -232.328900    231.162056    222.233706      0.000000      0.000000      0.000000     93.040748   -334.121374     73.489378		541
W= 89.75285, xmin= -0.00139, parasitic=0.7485, |e|=0.136364	      1.000000     72.870090    328.000041    184.988729     -0.446773     20.747981      0.000000   -254.651187    424.538566   -319.168423    394.013987     64.166444      0.000000      0.000000      0.000000   -162.572079    272.134456   -142.325792		542
W= 89.75383, xmin= -0.00123, parasitic=0.7458, |e|=0.136364	      1.000000    223.089153   -432.953152   -367.894970   -378.743446   -124.158278      0.000000    144.728218   -176.536305     25.613056   -191.755822   -312.644436      0.000000      0.000000      0.000000    111.519395   -288.187183    373.610734		543
W= 89.77890, xmin= -0.00124, parasitic=0.7483, |e|=0.136364	      1.000000    -90.161253     48.472121    314.369909    -50.227392    -93.954176      0.000000   -150.626830    411.633733   -313.029669     22.518211    397.297001      0.000000      0.000000      0.000000    119.148293   -205.453776     47.000016		544
W= 89.77415, xmin= -0.00127, parasitic=0.7405, |e|=0.136364	      1.000000     11.432499    347.455702   -320.821988   -206.732695   -340.554918      0.000000   -206.244322    108.036383    -13.794458     78.178388    -42.084160      0.000000      0.000000      0.000000    -95.161917    418.970429     55.716209		545
W= 89.77915, xmin= -0.00124, parasitic=0.7464, |e|=0.253755	      1.000000    354.636204    324.156389     49.385005   -431.645382   -286.065495      0.000000    -93.568164   -250.831282    293.295235   -313.953087   -388.229975      0.000000      0.000000      0.000000    153.338379   -441.756421    394.780411		546
W= 89.75051, xmin= -0.00141, parasitic=0.7453, |e|=0.136364	      1.000000   -427.188870    -37.404808    427.866993   -128.039328   -150.008959      0.000000   -112.962170    274.561471   -437.771902   -395.943491     64.562994      0.000000      0.000000      0.000000    -24.478566    442.105159    -33.600041		547
W= 89.76472, xmin= -0.00132, parasitic=0.7315, |e|=0.136364	      1.000000     51.623695   -385.180234   -395.634350    -61.125858    313.760390      0.000000    286.596220   -283.500766   -153.495791    239.124117    -75.145041      0.000000      0.000000      0.000000    -90.162753    412.994999      9.032304		548
W= 89.77287, xmin= -0.00128, parasitic=0.7486, |e|=0.136364	      1.000000     19.679845    393.189681   -101.812131    262.781766     77.506220      0.000000   -110.060624     15.628064    117.950300   -154.117377    128.323444      0.000000      0.000000      0.000000    -93.158722    194.131166   -179.295282		549
W= 89.76007, xmin= -0.00135, parasitic=0.7328, |e|=0.313395	      1.000000    274.352820    169.479529   -337.277991    365.593165     29.011039      0.000000    -79.276365   -110.729931   -333.355255   -324.523763   -149.683045      0.000000      0.000000      0.000000    -24.821660    356.789283    -71.950836		550
W= 89.78545, xmin= -0.00121, parasitic=0.7482, |e|=0.136364	      1.000000    -41.952385    190.207908    -46.008575    323.152383    -14.741683      0.000000   -194.237881    216.245998    128.053574    385.145005    226.753025      0.000000      0.000000      0.000000   -146.551393    346.607489   -109.171959		551
W= 89.75593, xmin= -0.00137, parasitic=0.7488, |e|=0.136364	      1.000000   -331.263747    -10.212464    144.379121   -395.514817    275.439336      0.000000    -49.636522     90.148893    207.715120    409.093282     34.383518      0.000000      0.000000      0.000000     32.168991   -376.152035   -139.440760		552
W= 89.78898, xmin= -0.00119, parasitic=0.7483, |e|=0.401834	      1.000000   -424.241786    -87.355142   -285.039797    324.990135    388.752179      0.000000    134.228976      3.565068   -445.217469   -435.658593    352.580644      0.000000      0.000000      0.000000    207.201977   -337.830364    153.187109		553
W= 89.79106, xmin= -0.00118, parasitic=0.7491, |e|=0.151212	      1.000000    367.143414   -263.842892   -275.607125    275.287569   -100.678488      0.000000     63.906510   -198.041545     76.180183    -81.031013    -14.016608      0.000000      0.000000      0.000000   -114.967910    359.830889   -154.252368		554
W= 89.75721, xmin= -0.00136, parasitic=0.7393, |e|=0.342850	      1.000000    357.246284   -420.852830    320.505459   -218.436449    152.231621      0.000000    -52.846126    136.629908    389.104845    357.508955     49.025291      0.000000      0.000000      0.000000     48.591676   -297.328005    -58.603495		555
W= 89.75968, xmin= -0.00135, parasitic=0.7338, |e|=0.136364	      1.000000    251.555870    173.266292    203.595766    356.810910   -155.854614      0.000000     -5.290513   -276.677402   -402.821799    358.271205    376.282324      0.000000      0.000000      0.000000    160.569573   -423.212035    195.219703		556
W= 89.76365, xmin= -0.00129, parasitic=0.7383, |e|=0.136364	      1.000000   -264.264382     43.044117    394.397092   -150.836212    -97.581685      0.000000    -84.383058    394.691635    322.973495   -322.903146    441.928107      0.000000      0.000000      0.000000    -41.447348     -2.589792   -176.131603		557
W= 89.76185, xmin= -0.00113, parasitic=0.7495, |e|=0.615753	      1.000000   -366.304317    287.589837    379.235702   -139.708903   -170.422364      0.000000    117.208028   -200.630609   -399.959479     73.298731     33.065202      0.000000      0.000000      0.000000    -83.046484    438.425586   -378.027236		558
W= 89.76338, xmin= -0.00133, parasitic=0.7421, |e|=0.136364	      1.000000      1.546352    403.665493    -79.457835    -87.656820   -339.991786      0.000000   -209.935645    275.336244    445.934340    320.530466   -225.355619      0.000000      0.000000      0.000000   -234.293043    327.078904   -214.271948		559
W= 89.77195, xmin= -0.00128, parasitic=0.7443, |e|=0.136364	      1.000000    167.481048    225.931706    233.212638    -30.884519   -417.291116      0.000000    123.026616   -400.418171   -183.988486    279.067489   -283.632209      0.000000      0.000000      0.000000    104.648292   -439.989899    199.473007		560
W= 89.75551, xmin= -0.00137, parasitic=0.7333, |e|=0.136364	      1.000000   -317.156976   -210.076251   -310.186580     74.241612    306.540303      0.000000    327.883450   -427.041065    170.301103   -334.747156   -262.947967      0.000000      0.000000      0.000000    149.306143   -315.067146    190.071562		561
W= 89.75427, xmin= -0.00138, parasitic=0.7250, |e|=0.136364	      1.000000     76.387991   -171.150314    -31.142209    127.274550   -103.991631      0.000000   -208.193191    449.464940   -260.345061    421.207048    398.613279      0.000000      0.000000      0.000000    -69.246749    269.153953    -38.851647		562
W= 89.77346, xmin= -0.00127, parasitic=0.7385, |e|=0.136364	      1.000000   -276.836644    210.572239   -332.878909   -182.262874    403.281206      0.000000   -201.944581    291.693721    164.780292   -307.372455   -320.755599      0.000000      0.000000      0.000000    105.387817   -300.667457     57.441741		563
W= 89.78803, xmin= -0.00119, parasitic=0.7497, |e|=0.136364	      1.000000    183.763353    -88.112227   -305.799442    306.049027    379.904921      0.000000    190.025592   -364.121818   -247.974448    393.238662   -254.004466      0.000000      0.000000      0.000000    -24.614602    177.662138     65.563353		564
W= 89.75645, xmin= -0.00137, parasitic=0.7287, |e|=0.136364	      1.000000    -20.426851    336.487390    240.366931   -209.338177    209.320596      0.000000   -235.668631    303.637471    292.621627   -422.175267   -157.238187      0.000000      0.000000      0.000000     95.077326   -307.822879     34.499198		565
W= 89.75647, xmin= -0.00137, parasitic=0.7442, |e|=0.136364	      1.000000    -24.513355    392.029551   -236.669963   -239.016809    -35.212536      0.000000   -166.952738    -32.694536   -225.028497   -229.326827    255.319993      0.000000      0.000000      0.000000    -11.580002    378.434934     -0.811947		566
W= 89.75972, xmin= -0.00135, parasitic=0.7374, |e|=0.536655	      1.000000    248.979184    210.751344    330.166163      0.595391    320.234901      0.000000    -96.031508    -86.640895    343.358135     95.792320   -156.055188      0.000000      0.000000      0.000000    109.833221   -424.791444     56.156432		567
W= 89.76596, xmin= -0.00429, parasitic=0.7446, |e|=0.213831	      1.000000   -314.533118   -163.421549    199.488294    -60.436899    129.339482      0.000000     52.574459    216.020959    -37.511481    280.873832     50.312471      0.000000      0.000000      0.000000    183.468363   -442.040004    120.488780		568
W= 89.76187, xmin= -0.00134, parasitic=0.7322, |e|=0.176273	      1.000000    445.721728   -390.354099   -416.594849   -321.778012   -330.780250      0.000000     36.343181    -43.559122   -152.150657    259.414776     27.415826      0.000000      0.000000      0.000000     19.852051     59.276122    112.340491		569
W= 89.75881, xmin= -0.00135, parasitic=0.7374, |e|=0.281795	      1.000000    388.096485    161.036652    -63.199824    349.418605    -39.070691      0.000000    -93.045391   -161.628684   -391.839002     89.396073    -81.945949      0.000000      0.000000      0.000000    -99.534606    277.899831     24.897147		570
W= 89.75456, xmin= -0.00138, parasitic=0.7433, |e|=0.172395	      1.000000    428.861151   -102.576610   -432.833449   -183.963671    262.529623      0.000000    -27.923258     71.586326     16.514674    376.092503   -298.180811      0.000000      0.000000      0.000000    -58.900272    316.681015    167.844530		571
W= 89.76186, xmin= -0.00134, parasitic=0.7434, |e|=0.136364	      1.000000    202.177363    338.504894    442.208533    200.130616    341.465259      0.000000     23.132328   -324.101934   -120.044311    290.199400   -440.519301      0.000000      0.000000      0.000000   -124.230558    412.529389    -63.941152		572
W= 89.76686, xmin= -0.00131, parasitic=0.7392, |e|=0.137759	      1.000000    -95.826985    190.545728     59.983869   -339.791249    291.680917      0.000000    145.439719   -409.326306   -331.727559   -374.997944    -58.144825      0.000000      0.000000      0.000000    -62.776956    429.095921   -160.905308		573
W= 89.77762, xmin= -0.00125, parasitic=0.7446, |e|=0.136364	      1.000000    139.383887    110.422326   -409.208465    186.762038     27.792715      0.000000    120.897624   -286.875894   -285.405967   -347.475730    397.916111      0.000000      0.000000      0.000000     33.417402    200.850510     21.543864		574
W= 89.76372, xmin= -0.00120, parasitic=0.7497, |e|=0.136364	      1.000000    163.599159   -362.945701    277.715977   -339.703611   -129.587513      0.000000    164.839909   -210.080978   -170.970102    221.902995   -273.257738      0.000000      0.000000      0.000000   -100.677072    442.126280   -219.777776		575
W= 89.76425, xmin= -0.00132, parasitic=0.7338, |e|=0.136364	      1.000000    -81.646227    115.613293    204.280406    -92.130056   -393.121680      0.000000   -106.512374    206.594332   -382.447903    216.851970    -14.152067      0.000000      0.000000      0.000000   -112.411288    437.060690    -98.772056		576
W= 89.75001, xmin= -0.00141, parasitic=0.7401, |e|=0.344798	      1.000000   -119.299329    433.608375    236.009313    103.403527    -39.148874      0.000000    -13.941449   -118.057010   -217.208658   -208.604944    137.837800      0.000000      0.000000      0.000000    -56.059273    237.579177   -276.913023		577
W= 89.77188, xmin= -0.00128, parasitic=0.7491, |e|=0.136364	      1.000000   -138.448405   -184.070312   -316.032148    -48.907492   -295.974576      0.000000    248.954898   -422.024030     99.269056    -22.004144     17.212972      0.000000      0.000000      0.000000   -179.401324    404.237243   -177.063026		578
W= 89.77162, xmin= -0.00129, parasitic=0.7469, |e|=0.136364	      1.000000    159.654241   -332.867985    431.325736    227.333114   -323.638351      0.000000    253.286045   -251.988549    186.823550    382.232142    139.103091      0.000000      0.000000      0.000000   -140.510727    216.694738   -138.053299		579
W= 89.78201, xmin= -0.00122, parasitic=0.7461, |e|=0.355347	      1.000000   -396.076403    -53.666875     78.068149    329.356146    280.660465      0.000000    286.532626   -367.575829   -166.435730   -126.793548    -83.411124      0.000000      0.000000      0.000000    168.351574   -413.457146    208.090907		580
W= 89.75104, xmin= -0.00140, parasitic=0.7382, |e|=0.136364	      1.000000     27.307469   -185.349535    439.411196    412.251146    425.730894      0.000000   -219.947224    396.725795    339.659194    432.243238   -419.250164      0.000000      0.000000      0.000000   -190.975982    328.290781    -21.898550		581
W= 89.75616, xmin= -0.00137, parasitic=0.7267, |e|=0.136364	      1.000000   -268.733066   -365.941015   -276.508008   -220.615259   -420.100008      0.000000    348.950415   -278.675580    426.180436   -336.098377    412.316708      0.000000      0.000000      0.000000   -112.295297    298.853904   -154.556713		582
W= 89.77395, xmin= -0.00127, parasitic=0.7393, |e|=0.180403	      1.000000   -421.729713   -162.640505      2.092880   -266.718362   -323.639289      0.000000    373.648104   -440.368295    277.205523    137.844592    441.048244      0.000000      0.000000      0.000000   -132.224329    295.218623   -249.597466		583
W= 89.76483, xmin= -0.00132, parasitic=0.7336, |e|=0.136364	      1.000000    291.790567   -441.131353   -120.064226    -38.142371      3.897124      0.000000    189.272460   -274.755475    380.225890   -355.724510     59.017015      0.000000      0.000000      0.000000     35.064424   -189.761782     11.804662		584
W= 89.79004, xmin= -0.00118, parasitic=0.7482, |e|=0.141548	      1.000000   -375.274193    233.507165   -342.505964     85.189474    410.796089      0.000000    -67.803291    184.809568   -282.213479   -104.230241    331.343922      0.000000      0.000000      0.000000    200.818657   -401.857411    131.033685		585
W= 89.77433, xmin= -0.00127, parasitic=0.7418, |e|=0.136364	      1.000000    321.545448   -382.892822    140.631692    265.862184    382.817811      0.000000    185.586884   -418.865753    125.386456    -62.948166   -366.127383      0.000000      0.000000      0.000000   -155.481154    357.591917   -237.895416		586
W= 89.75180, xmin= -0.00140, parasitic=0.7285, |e|=0.314664	      1.000000   -181.960661    442.866829    -28.366636     21.027211   -177.240668      0.000000      2.710539   -174.349405    172.643733   -198.838390   -320.883993      0.000000      0.000000      0.000000     96.441636   -380.691995    362.114202		587
W= 89.75922, xmin= -0.00136, parasitic=0.7411, |e|=0.175158	      1.000000    340.796598    181.637596    119.752183   -119.272477    429.044755      0.000000   -292.641685    268.008762     30.267043    434.154523   -146.507230      0.000000      0.000000      0.000000    -74.816160    197.090858   -127.902902		588
W= 89.76308, xmin= -0.00133, parasitic=0.7420, |e|=0.179878	      1.000000   -217.380790    270.530552   -343.713667    318.329614   -393.949931      0.000000   -106.720052    263.606511   -337.124152     89.900068   -274.104793      0.000000      0.000000      0.000000    147.794312   -288.318132    435.784049		589
W= 89.78046, xmin= -0.00123, parasitic=0.7484, |e|=0.177238	      1.000000    257.984795     63.572535   -130.344492   -274.560602   -271.338113      0.000000    -15.386414   -192.095303     89.516424    447.552372    371.762452      0.000000      0.000000      0.000000   -137.926937    260.989257   -203.903390		590
W= 89.75593, xmin= -0.00133, parasitic=0.7372, |e|=0.136364	      1.000000      4.656574    100.381657     61.294512   -307.707687   -376.863738      0.000000   -198.883164    367.820956    385.925782    -66.387657    224.335309      0.000000      0.000000      0.000000   -170.324086    447.057571   -367.956757		591
W= 89.77524, xmin= -0.00127, parasitic=0.7482, |e|=0.315982	      1.000000   -233.950500    275.093578    -36.767660    -58.658774    223.294450      0.000000    194.330699   -429.703451    232.188871    418.486046   -114.144833      0.000000      0.000000      0.000000   -118.332752    258.089484   -105.560522		592
W= 89.76517, xmin= -0.00132, parasitic=0.7381, |e|=0.136364	      1.000000   -206.492990   -140.314595    -61.655691    158.739394    116.809266      0.000000    -71.666668    265.282634    194.948245    275.685087    317.818180      0.000000      0.000000      0.000000   -143.631464    375.577486   -145.409589		593
W= 89.76248, xmin= -0.00133, parasitic=0.7402, |e|=0.136364	      1.000000   -197.517686    210.819585    195.505180    -84.174721   -141.245422      0.000000   -146.470039    379.552000   -385.098780   -133.763387    200.426367      0.000000      0.000000      0.000000    209.736791   -335.372662    215.891457		594
W= 89.75028, xmin= -0.01239, parasitic=0.7491, |e|=0.136364	      1.000000     12.407466    307.479655   -271.511301   -155.984988    339.410198      0.000000   -352.446488    282.533864   -333.376488   -204.685331    142.457739      0.000000      0.000000      0.000000     26.748291    264.103519     29.167612		595
W= 89.77365, xmin= -0.00127, parasitic=0.7396, |e|=0.136364	      1.000000   -172.898782    192.782158    272.175543    108.588114   -393.577784      0.000000   -141.063066    293.854624    245.413226    285.913925    363.317427      0.000000      0.000000      0.000000     29.349117   -355.650299     43.999759		596
W= 89.75333, xmin= -0.00139, parasitic=0.7301, |e|=0.712429	      1.000000   -167.463621    289.186958   -228.926299    307.641499   -177.090240      0.000000    114.923643   -351.272183   -154.637741     32.920796    418.916911      0.000000      0.000000      0.000000   -120.004228    374.203761   -215.004087		597
W= 89.78903, xmin= -0.00119, parasitic=0.7491, |e|=0.136364	      1.000000     94.870730   -202.698952    -91.187574    201.407927   -334.729573      0.000000   -171.371265    400.805928   -266.302093    334.156247   -130.267570      0.000000      0.000000      0.000000   -106.134269    431.262898     79.335101		598
W= 89.76360, xmin= -0.00133, parasitic=0.7307, |e|=0.136364	      1.000000   -384.850270   -412.797548    425.919203    415.737899     70.583791      0.000000     41.902091    357.392959     -7.714748     93.674824   -131.967348      0.000000      0.000000      0.000000     67.594948   -373.142273     29.580955		599
W= 89.77494, xmin= -0.00126, parasitic=0.7408, |e|=0.196869	      1.000000   -361.331724   -287.010202    377.024806     99.614297    438.367662      0.000000     70.006225    258.120028   -182.477380    442.228791     62.710309      0.000000      0.000000      0.000000   -151.604856    351.375811   -252.914465		600
W= 89.76679, xmin= -0.00131, parasitic=0.7345, |e|=0.136364	      1.000000   -231.779246   -394.427438    420.499908     81.525757   -115.714407      0.000000    415.302572   -373.284697     23.670924    162.084378     60.087842      0.000000      0.000000      0.000000     85.609093   -447.491290      2.368871		601
W= 89.75280, xmin= -0.00139, parasitic=0.7303, |e|=0.152949	      1.000000    342.682321    -66.702423      6.834681    177.977060    267.398866      0.000000     30.172480   -270.536819   -334.640908    274.292160   -168.291116      0.000000      0.000000      0.000000   -130.146888    402.934786   -163.824896		602
W= 89.75878, xmin= -0.00136, parasitic=0.7442, |e|=0.136364	      1.000000    310.125920   -430.967118    341.058522    250.635136     76.275658      0.000000    386.135099   -245.145550   -267.034506     37.876896      0.402046      0.000000      0.000000      0.000000    -24.898799    177.108023     16.312064		603
W= 89.78417, xmin= -0.00121, parasitic=0.7499, |e|=0.136364	      1.000000    136.948651   -103.423833    405.139395    -88.078664    -81.169859      0.000000    242.655939   -323.372926    360.948754   -438.163970     38.060393      0.000000      0.000000      0.000000     24.744409   -306.694880   -161.985490		604
W= 89.75208, xmin= -0.00139, parasitic=0.7325, |e|=0.136364	      1.000000   -122.109033    372.673699   -151.745044    445.214000   -326.725725      0.000000    -95.555840     74.344532   -427.676379    355.225032   -113.640216      0.000000      0.000000      0.000000   -115.622283    254.383174     98.100516		605
W= 89.77211, xmin= -0.00128, parasitic=0.7437, |e|=0.136364	      1.000000    169.482127    287.157094    441.954043    449.085513     45.768406      0.000000   -243.429376    322.602613   -131.894963    157.170504    -71.802825      0.000000      0.000000      0.000000     87.132745   -341.606485    220.497407		606
W= 89.75465, xmin= -0.00138, parasitic=0.7287, |e|=0.136364	      1.000000   -319.849859    323.655991    141.168260    176.180113   -246.436095      0.000000   -100.066051     72.883289    168.258770    229.194196    175.497722      0.000000      0.000000      0.000000   -166.971489    396.015618   -132.302630		607
W= 89.75170, xmin= -0.00139, parasitic=0.7229, |e|=0.136364	      1.000000     14.399152    -43.964635    249.726634   -309.480199   -310.254797      0.000000   -141.936137    269.260899    179.172722    -79.160895    338.140888      0.000000      0.000000      0.000000    -18.246818    -17.060068   -133.781399		608
W= 89.76284, xmin= -0.00133, parasitic=0.7495, |e|=0.136364	      1.000000     -1.247004      2.618149    134.377924   -248.282418    -46.916455      0.000000     92.227257   -266.537708    272.608280     97.327977    -53.964631      0.000000      0.000000      0.000000    117.334233   -352.694404    232.635241		609
W= 89.75385, xmin= -0.00138, parasitic=0.7265, |e|=0.136364	      1.000000   -119.242093    431.748310   -436.319754    390.082042     -1.757453      0.000000   -198.480117    162.284043    202.591173   -110.309551   -424.093951      0.000000      0.000000      0.000000   -150.488469    419.056511      2.206657		610
W= 89.76017, xmin= -0.00135, parasitic=0.7464, |e|=0.136364	      1.000000    370.796580    360.858555     10.406118    337.405013     97.314732      0.000000    -32.155914   -237.394566    -50.883732    383.287344   -433.014238      0.000000      0.000000      0.000000    -61.353768    164.270387    162.254886		611
W= 89.76973, xmin= -0.00129, parasitic=0.7383, |e|=0.136364	      1.000000   -182.801992   -385.630008    -84.276887     99.594868   -333.070228      0.000000    321.613429   -362.718282    281.456719   -403.777627   -432.450261      0.000000      0.000000      0.000000    111.914097   -369.783040    293.146939		612
W= 89.75496, xmin= -0.00119, parasitic=0.7496, |e|=0.136364	      1.000000     60.205609   -107.348312    379.349365    323.393219    -83.678133      0.000000     92.789035   -173.794020    155.610773      7.434186    -17.470683      0.000000      0.000000      0.000000   -161.779242    406.159420   -371.879560		613
W= 89.75885, xmin= -0.00135, parasitic=0.7298, |e|=0.647910	      1.000000   -421.414523   -392.932111     83.623410    405.667719   -312.656882      0.000000    177.343559    105.144453   -241.005494   -313.634170   -202.983269      0.000000      0.000000      0.000000    -89.507102    445.112953     98.941399		614
W= 89.76513, xmin= -0.00132, parasitic=0.7330, |e|=0.136364	      1.000000   -162.280263    205.839392   -315.433678     41.936465    218.501214      0.000000   -191.346038    251.346932   -443.485038    115.481870    -19.393556      0.000000      0.000000      0.000000    -47.258010    449.690265     66.906728		615
W= 89.75310, xmin= -0.00139, parasitic=0.7337, |e|=0.145943	      1.000000   -317.111353    246.170660   -139.602972   -157.302945    339.398476      0.000000    -77.724456    278.787257   -365.854667    161.654743    442.264940      0.000000      0.000000      0.000000    -26.274691    228.622780   -198.378767		616
W= 89.78732, xmin= -0.00120, parasitic=0.7473, |e|=0.136364	      1.000000     72.856680    274.755039     73.044308    426.168872   -131.455162      0.000000    -70.741434    -66.411114    269.829682     60.493872    415.594609      0.000000      0.000000      0.000000     57.450725   -406.478664     91.242314		617
W= 89.75745, xmin= -0.00137, parasitic=0.7314, |e|=0.136364	      1.000000    314.835891   -258.234974    196.624302    169.354746    271.469147      0.000000    112.964907   -251.659976   -382.954055    197.241715   -431.380095      0.000000      0.000000      0.000000     -9.628907    146.627560     21.666502		618
W= 89.76197, xmin= -0.00128, parasitic=0.7398, |e|=0.136364	      1.000000    406.875003   -120.342796   -138.251860   -428.363354    180.342181      0.000000     71.390072   -346.600938    -64.384554    436.059032   -120.227099      0.000000      0.000000      0.000000    -89.992513    369.606116   -247.441369		619
W= 89.76265, xmin= -0.00133, parasitic=0.7393, |e|=0.136364	      1.000000    -76.977874   -162.868969   -145.102308     34.706802    206.673592      0.000000    -75.167907    357.750263    364.257499   -279.596734    384.149386      0.000000      0.000000      0.000000    100.277411   -299.151648     20.472601		620
W= 89.76168, xmin= -0.00129, parasitic=0.7409, |e|=0.292185	      1.000000    281.386819   -155.909556    293.679943    186.382670    345.209087      0.000000   -233.679216    449.060031     88.077484   -141.219499   -390.893930      0.000000      0.000000      0.000000     31.677717   -232.786433    140.313409		621
W= 89.76643, xmin= -0.00131, parasitic=0.7378, |e|=0.247962	      1.000000   -376.993615    324.694964   -220.676608   -294.031529   -271.999098      0.000000     40.481860   -149.929577   -333.654824     -8.506687    -52.542138      0.000000      0.000000      0.000000     45.406597    112.625967    125.082699		622
W= 89.76041, xmin= -0.00131, parasitic=0.7467, |e|=0.285432	      1.000000    367.479075   -406.046333    280.515183   -385.281059   -397.647638      0.000000    -16.152041    -61.305511    375.761123   -227.015623    398.380647      0.000000      0.000000      0.000000     26.718551   -157.987731     82.926902		623
W= 89.76246, xmin= -0.00133, parasitic=0.7393, |e|=0.278188	      1.000000   -287.097504    341.605141     -5.101938    -47.586135   -256.364097      0.000000     20.013758    -62.502581    244.033440    167.140322    301.128261      0.000000      0.000000      0.000000    134.867321   -449.410110    144.100763		624
W= 89.75079, xmin= -0.00140, parasitic=0.7240, |e|=0.136364	      1.000000    -56.019871   -221.365391   -407.427659   -354.487463   -381.736844      0.000000    -13.570021    189.264596    307.882720    358.159523   -318.604706      0.000000      0.000000      0.000000   -101.972036    204.814761    106.349377		625
W= 89.75205, xmin= -0.00142, parasitic=0.7491, |e|=0.210550	      1.000000    379.508143     37.141555     10.948034    257.800091   -204.100726      0.000000    -32.996935   -269.484549   -121.042255    169.502756    179.965300      0.000000      0.000000      0.000000   -210.364389    302.213283   -124.955538		626
W= 89.75011, xmin= -0.00141, parasitic=0.7428, |e|=0.198871	      1.000000    254.842922    199.013041   -266.311224    178.686744   -272.272967      0.000000    -40.331191   -257.067973   -367.211892   -207.952451   -254.088440      0.000000      0.000000      0.000000   -118.803714    411.857143   -107.165280		627
W= 89.77532, xmin= -0.00127, parasitic=0.7447, |e|=0.136364	      1.000000    371.364033   -430.921460    408.779159     77.240623    436.575998      0.000000    261.709282   -371.967190    -65.158239    215.133571   -447.492471      0.000000      0.000000      0.000000     71.462319   -381.374397    137.478276		628
W= 89.77155, xmin= -0.00128, parasitic=0.7430, |e|=0.802657	      1.000000   -427.447436   -193.936364   -423.709294   -308.558391   -332.182200      0.000000    252.225256   -179.278320   -420.194453     53.251525   -178.532817      0.000000      0.000000      0.000000     63.352834     59.428827    237.218493		629
W= 89.75533, xmin= -0.00137, parasitic=0.7299, |e|=0.136364	      1.000000   -394.546255     11.635419   -332.238895   -189.214782   -398.739093      0.000000   -103.544903    228.691681     37.265471    148.881938    -28.415037      0.000000      0.000000      0.000000   -108.852561    442.669177    119.074824		630
W= 89.76982, xmin= -0.00130, parasitic=0.7457, |e|=0.243143	      1.000000   -176.159342     37.552521    431.955722    320.798413    215.837599      0.000000     18.071579     82.290149   -241.022430    -56.876199    230.049994      0.000000      0.000000      0.000000    180.296550   -440.944235    279.103253		631
W= 89.75299, xmin= -0.00139, parasitic=0.7466, |e|=0.169841	      1.000000   -333.817836    202.039876    420.723802      6.965972   -229.154383      0.000000   -126.845296    148.785761   -241.297332    205.936962   -206.812374      0.000000      0.000000      0.000000     44.450219   -200.623603    108.268000		632
W= 89.76206, xmin= -0.00134, parasitic=0.7466, |e|=0.136364	      1.000000    -94.458781   -329.282089   -404.194965   -112.729041    146.472473      0.000000    216.448669   -291.355935   -426.794726   -137.325956    -96.476700      0.000000      0.000000      0.000000    -23.721980    270.491848      7.855003		633
W= 89.76663, xmin= -0.00131, parasitic=0.7438, |e|=0.261602	      1.000000   -284.321923    381.701317    -19.672773    374.352804    -69.083473      0.000000      4.599477    -36.890439    -50.739769    142.774433    334.108667      0.000000      0.000000      0.000000   -205.385164    435.560882   -357.581915		634
W= 89.75289, xmin= -0.00139, parasitic=0.7262, |e|=0.212258	      1.000000   -427.944189    392.808247    175.585338   -160.675399   -160.991115      0.000000      1.105589    -18.468465   -149.896520    405.362123    428.794963      0.000000      0.000000      0.000000   -149.378792    427.026128   -263.836030		635
W= 89.76609, xmin= -0.00131, parasitic=0.7333, |e|=0.136364	      1.000000    192.465134    312.646680    210.859251    -41.269986    422.667332      0.000000   -350.511244    358.487155    296.467661    231.236345   -350.117121      0.000000      0.000000      0.000000     57.139173   -425.057844     17.174545		636
W= 89.78545, xmin= -0.00120, parasitic=0.7466, |e|=0.136364	      1.000000    172.415542    446.353660   -153.468215    324.003492    400.488220      0.000000   -343.182905    354.407915    277.847981    218.190232    289.763967      0.000000      0.000000      0.000000     57.259330   -342.085459    -29.311972		637
W= 89.76127, xmin= -0.00134, parasitic=0.7314, |e|=0.136364	      1.000000   -189.172624   -302.981073   -134.241882   -342.186598    -70.573538      0.000000    -26.406643    296.532728    160.111936    237.101832    -41.758242      0.000000      0.000000      0.000000   -105.459021    312.686606     -8.866065		638
W= 89.76579, xmin= -0.00132, parasitic=0.7497, |e|=0.220030	      1.000000   -295.389868     65.040017    432.679717   -204.448819     69.585404      0.000000     19.235587    158.923282   -132.716425   -155.001253     45.153578      0.000000      0.000000      0.000000    198.875823   -339.624977    153.374349		639
W= 89.75562, xmin= -0.00137, parasitic=0.7483, |e|=0.159213	      1.000000    445.667050   -425.620042   -278.580966   -247.375698    -65.005175      0.000000    112.735260   -444.681707    344.723381    295.862669    354.801288      0.000000      0.000000      0.000000   -173.690115    237.667537   -296.353157		640
W= 89.75964, xmin= -0.00133, parasitic=0.7351, |e|=0.136364	      1.000000    183.160092    245.580302   -160.097746     95.837041     93.684244      0.000000   -195.379988    171.434433   -158.054610    230.296742    -73.147286      0.000000      0.000000      0.000000   -103.360723    430.506497   -274.612025		641
W= 89.76404, xmin= -0.00133, parasitic=0.7345, |e|=0.143614	      1.000000   -239.873648     38.278768   -290.875579    270.345208    -22.261335      0.000000    -25.417509    186.271195     52.129267    229.859729   -121.614317      0.000000      0.000000      0.000000   -113.264534    274.189982    -97.269060		642
W= 89.75764, xmin= -0.00136, parasitic=0.7484, |e|=0.136364	      1.000000    -29.426450   -246.831559   -394.844405     73.859489    444.767862      0.000000    124.994642   -160.313319     -2.506460    369.053486   -238.038739      0.000000      0.000000      0.000000    -90.466197    124.056972    -44.386510		643
W= 89.76169, xmin= -0.00127, parasitic=0.7409, |e|=0.137590	      1.000000    166.257511   -128.647293   -205.037536   -155.207406    125.948519      0.000000     42.920665   -121.507017   -368.818792     64.385914    -63.625596      0.000000      0.000000      0.000000     11.530391    240.379874    -68.165475		644
W= 89.75895, xmin= -0.00135, parasitic=0.7313, |e|=0.136364	      1.000000    -93.527581   -267.944103     76.218077    204.768753    -20.996349      0.000000   -149.358720    429.812624    126.402339   -191.469946    138.538266      0.000000      0.000000      0.000000     38.946003   -224.931620    -64.563517		645
W= 89.77343, xmin= -0.00127, parasitic=0.7426, |e|=0.136364	      1.000000    218.941853    402.773089   -280.000361   -247.070140    -96.870533      0.000000   -196.457521     48.132737    101.650033   -175.171974    322.675066      0.000000      0.000000      0.000000     70.113875   -114.203068     28.495309		646
W= 89.78991, xmin= -0.00118, parasitic=0.7491, |e|=0.136364	      1.000000   -395.438772    -73.526213    193.505266    414.339155    139.064568      0.000000    -37.964340    368.288918   -286.908652    273.403315     55.833457      0.000000      0.000000      0.000000   -141.342185    398.673339   -161.704170		647
W= 89.76314, xmin= -0.00119, parasitic=0.7470, |e|=0.166983	      1.000000   -153.946273    273.526281    -97.057953   -415.988782   -113.834778      0.000000    -55.033240    106.758301     -8.705575     62.247801    411.882603      0.000000      0.000000      0.000000    163.791799   -446.441866    396.735172		648
W= 89.78398, xmin= -0.00122, parasitic=0.7463, |e|=0.623821	      1.000000   -339.392546   -352.670644    424.710021   -162.285567    366.396750      0.000000    141.690531    120.994842     59.290684   -425.030603    102.528718      0.000000      0.000000      0.000000    124.039848   -421.547479     20.331138		649
W= 89.76808, xmin= -0.00131, parasitic=0.7400, |e|=0.136364	      1.000000    226.342891    231.861585     41.710886    443.879486      4.653549      0.000000   -279.675438    302.020801     97.562797   -188.519352    376.307705      0.000000      0.000000      0.000000   -121.990440    387.616023   -315.996507		650
W= 89.75454, xmin= -0.00138, parasitic=0.7448, |e|=0.260985	      1.000000    202.466238   -131.536756    -18.657305     60.074839   -191.712419      0.000000    -17.317510    -38.484148    -73.557083    246.949094    -99.384100      0.000000      0.000000      0.000000   -170.682731    278.687789    -91.066312		651
W= 89.76332, xmin= -0.00133, parasitic=0.7346, |e|=0.159422	      1.000000    347.348051   -411.376080    -86.179119    -10.203355   -201.280893      0.000000     82.897595   -170.702930   -181.144731    360.750492   -284.134853      0.000000      0.000000      0.000000    -62.697244    214.327415    -35.297805		652
W= 89.75173, xmin= -0.00139, parasitic=0.7297, |e|=0.136364	      1.000000     70.660467     67.049621    170.279808   -118.579935    252.300522      0.000000     50.354423   -215.979328   -335.870279     53.893408   -171.065724      0.000000      0.000000      0.000000    -70.216276    316.929739   -128.527939		653
W= 89.77238, xmin= -0.00128, parasitic=0.7419, |e|=0.136364	      1.000000    -86.713729   -163.444520    348.208296    -46.372834   -337.400667      0.000000    215.103709   -359.985565   -391.144902   -304.263249     41.777417      0.000000      0.000000      0.000000     -9.214768    216.577760    -54.754739		654
W= 89.76290, xmin= -0.00133, parasitic=0.7326, |e|=0.136364	      1.000000    187.247929    363.650995     61.388806   -439.958528   -224.831886      0.000000   -365.112784    280.016207    449.859324   -350.956388   -108.594167      0.000000      0.000000      0.000000     12.202320   -187.625363    -76.555130		655
W= 89.77952, xmin= -0.00124, parasitic=0.7495, |e|=0.157452	      1.000000    269.526176   -371.726834    -11.984543    124.614129    303.689800      0.000000     86.977725   -215.881510    -52.153989   -334.910459   -234.927910      0.000000      0.000000      0.000000    177.397313   -378.748694    364.247133		656
W= 89.75823, xmin= -0.00136, parasitic=0.7344, |e|=1.055616	      1.000000    389.254957    -96.534735   -366.893480    184.222009   -101.366335      0.000000   -160.764138    176.404294    -28.835945   -325.867392   -389.611707      0.000000      0.000000      0.000000    199.447113   -430.387664    439.055091		657
W= 89.76341, xmin= -0.00133, parasitic=0.7381, |e|=0.883720	      1.000000    420.194166   -386.465510   -103.315767    426.483521   -258.777315      0.000000   -156.384475    330.763319    -64.175928    300.819115    -48.617244      0.000000      0.000000      0.000000   -138.015144    273.874369   -145.203910		658
W= 89.77365, xmin= -0.00118, parasitic=0.7477, |e|=0.144297	      1.000000   -327.415988   -266.667225    416.944479   -417.805861   -417.651878      0.000000     25.802576    336.767120   -135.614712   -205.441929    225.063146      0.000000      0.000000      0.000000    118.278583   -331.054847    230.649838		659
W= 89.76181, xmin= -0.00134, parasitic=0.7372, |e|=0.136364	      1.000000   -361.517345    423.911558   -415.195180    449.173345   -439.219547      0.000000   -318.120016    187.321018    215.389376   -104.897646    257.109752      0.000000      0.000000      0.000000   -113.311069    353.396789     76.860966		660
W= 89.76311, xmin= -0.00133, parasitic=0.7345, |e|=0.136364	      1.000000   -447.315810     34.409155    273.114335   -128.801591    -17.855743      0.000000   -192.616311    359.205556   -388.582350    296.788190    143.856424      0.000000      0.000000      0.000000    -41.579240    301.751644     22.705304		661
W= 89.75780, xmin= -0.00136, parasitic=0.7338, |e|=0.136364	      1.000000    380.078162   -351.441817    344.509293    -67.532926    331.857690      0.000000    126.307804   -332.402422    205.404241    -47.346431      1.838930      0.000000      0.000000      0.000000     51.153309   -197.849326    -77.735162		662
W= 89.76817, xmin= -0.00130, parasitic=0.7398, |e|=0.224561	      1.000000    443.656814    257.681769   -342.708286    282.163297    449.678407      0.000000    -85.776662   -287.140171     -3.101913    -20.565923   -435.881855      0.000000      0.000000      0.000000    161.473799   -429.160648    375.852961		663
W= 89.77720, xmin= -0.00125, parasitic=0.7412, |e|=0.203532	      1.000000    375.378090    138.820662    233.639127    133.623292   -127.420874      0.000000   -318.643191    377.941537    117.389631    288.452710   -192.676344      0.000000      0.000000      0.000000   -168.820555    345.249974   -171.179459		664
W= 89.75963, xmin= -0.00135, parasitic=0.7414, |e|=0.136364	      1.000000     -7.795391    378.275793   -141.631681    303.383332   -252.405942      0.000000   -152.726995    151.842782   -380.672945   -305.375714   -272.345766      0.000000      0.000000      0.000000    -62.639550    286.619177     74.674765		665
W= 89.76945, xmin= -0.00129, parasitic=0.7499, |e|=0.136364	      1.000000    447.890368   -312.729237    328.620996     18.696363    410.960454      0.000000     90.881147   -127.340184   -313.801236    424.627091    163.499305      0.000000      0.000000      0.000000    -38.180220    232.092777   -176.660159		666
W= 89.75613, xmin= -0.00137, parasitic=0.7484, |e|=0.136364	      1.000000   -223.328242    -70.458976   -392.046771    334.693210   -281.329151      0.000000    -41.998770    355.648520     41.417222   -140.500619    -39.542470      0.000000      0.000000      0.000000   -113.169868    182.191954     48.043322		667
W= 89.77453, xmin= -0.00123, parasitic=0.7495, |e|=0.183529	      1.000000     40.007316   -361.038244    384.925849    142.313143     17.889196      0.000000    173.905138   -291.738662    116.628710    431.646696    362.077664      0.000000      0.000000      0.000000    -32.426978   -123.357767   -126.782667		668
W= 89.77572, xmin= -0.00126, parasitic=0.7475, |e|=0.136364	      1.000000      9.396537    370.959766    227.848272   -118.524517   -397.860857      0.000000   -183.905482    232.987360      0.314176    341.286695   -400.282769      0.000000      0.000000      0.000000   -183.772193    366.359362   -195.309564		669
W= 89.77071, xmin= -0.00129, parasitic=0.7383, |e|=0.210357	      1.000000    327.246940    331.790841    239.857709   -373.898059   -277.534864      0.000000    -77.451684   -260.710887    256.452741     -5.928524     -4.388309      0.000000      0.000000      0.000000   -148.110794    350.173092   -278.038685		670
W= 89.77081, xmin= -0.00129, parasitic=0.7450, |e|=0.136364	      1.000000    180.380529    296.428171    189.240009    127.881699   -369.532851      0.000000   -368.282908    339.722312    159.010293   -321.877345   -102.253720      0.000000      0.000000      0.000000     70.191102   -404.338998     79.683670		671
W= 89.78538, xmin= -0.00121, parasitic=0.7488, |e|=0.136364	      1.000000   -292.519071    145.636467   -335.099056    185.709267    -17.120166      0.000000   -157.242682    245.575063    398.697089   -206.197937   -352.239893      0.000000      0.000000      0.000000   -158.772112    439.089965     10.683126		672
W= 89.75298, xmin= -0.00139, parasitic=0.7301, |e|=0.136364	      1.000000     78.790860    326.395950     98.524231   -313.419640   -276.105701      0.000000   -205.770802    218.441465   -299.426792    110.578577   -404.363696      0.000000      0.000000      0.000000   -101.408209    374.414837     -9.236796		673
W= 89.75076, xmin= -0.00140, parasitic=0.7463, |e|=0.686709	      1.000000   -302.880525    365.799489    448.487041    414.833218    -99.884489      0.000000     95.879412   -241.610632    422.789625    350.774279    -91.713615      0.000000      0.000000      0.000000     96.113394   -437.776147     52.621893		674
W= 89.75120, xmin= -0.00140, parasitic=0.7251, |e|=0.136364	      1.000000    407.141000   -286.360947   -191.297000    252.580628    -13.005171      0.000000    175.276035   -414.334716   -104.093036    250.478273   -316.185765      0.000000      0.000000      0.000000    123.087842   -400.111177    293.973883		675
W= 89.77766, xmin= -0.00125, parasitic=0.7448, |e|=0.223065	      1.000000   -309.303865    353.647759    224.083174    154.128177   -398.081832      0.000000     -7.580973      3.986282     92.050881   -425.301588   -149.398662      0.000000      0.000000      0.000000    102.648581   -290.967566    223.174741		676
W= 89.76993, xmin= -0.00129, parasitic=0.7368, |e|=0.136364	      1.000000   -422.504395    395.710836    -78.076030    -91.081760    418.066601      0.000000   -247.975057    329.253925    438.299904   -272.649694    366.829267      0.000000      0.000000      0.000000     61.510969   -350.836303   -173.002360		677
W= 89.78573, xmin= -0.00120, parasitic=0.7471, |e|=0.298723	      1.000000    410.444077   -351.481429    -98.574911   -372.020635   -359.476296      0.000000    -59.945397    112.003582    322.337174    190.704908    154.293157      0.000000      0.000000      0.000000   -189.941392    417.327943   -240.876065		678
W= 89.77192, xmin= -0.00128, parasitic=0.7477, |e|=0.950598	      1.000000    401.260921   -380.180191    433.305059   -433.503217     96.403887      0.000000   -151.589278    323.120869    331.632649    331.597251    302.178421      0.000000      0.000000      0.000000    -38.239791    -72.672288   -215.940623		679
W= 89.75431, xmin= -0.00137, parasitic=0.7333, |e|=0.136364	      1.000000     94.980743    271.986332     46.065381    132.339279   -431.321217      0.000000     44.007283   -386.433900    413.246080   -320.108912   -196.253872      0.000000      0.000000      0.000000   -200.316736    430.791419   -371.245634		680
W= 89.75764, xmin= -0.00136, parasitic=0.7324, |e|=0.244133	      1.000000   -286.103064    -11.607982   -278.467945   -274.310078    230.287446      0.000000     45.979864     95.584602   -356.303655    -95.217095   -358.583869      0.000000      0.000000      0.000000    221.274475   -358.971384    387.873237		681
W= 89.76675, xmin= -0.00131, parasitic=0.7367, |e|=0.244550	      1.000000   -344.734328    342.194764   -448.716008    434.241873    200.002787      0.000000   -115.079885    255.026919   -135.994230   -394.944952    443.550799      0.000000      0.000000      0.000000     40.585901     38.661050    -13.405428		682
W= 89.77445, xmin= -0.00127, parasitic=0.7470, |e|=0.136364	      1.000000    129.741428   -277.658512    221.442537    402.805620    227.306000      0.000000     94.030929   -143.294156   -223.647925    355.484505    246.142484      0.000000      0.000000      0.000000   -179.396212    348.159550   -252.180607		683
W= 89.76763, xmin= -0.00130, parasitic=0.7359, |e|=0.136364	      1.000000    341.015542   -364.165872    121.965839    288.367763    113.150549      0.000000    321.823302   -427.169389   -340.394378     65.945399     50.709418      0.000000      0.000000      0.000000     -7.455901    150.906691     12.723612		684
W= 89.75102, xmin= -0.00140, parasitic=0.7486, |e|=0.136364	      1.000000     73.026999    133.196485   -261.985409   -319.571932     22.071841      0.000000    294.529533   -399.086025      8.257081    -39.672221   -432.866154      0.000000      0.000000      0.000000    -60.627912    412.631693    188.776247		685
W= 89.76528, xmin= -0.00132, parasitic=0.7489, |e|=0.198057	      1.000000    316.207731   -442.742240    441.119244   -311.091940    421.158132      0.000000    320.138717    -91.095444     81.873766   -241.327315      8.607279      0.000000      0.000000      0.000000      0.864669    -51.937042   -190.335415		686
W= 89.75855, xmin= -0.00136, parasitic=0.7343, |e|=0.416675	      1.000000    104.927363   -364.942705    192.407378    202.480903    447.277344      0.000000     -6.134243    181.564318    346.521469    334.989484    214.618750      0.000000      0.000000      0.000000     21.517359   -310.760502    -61.039891		687
W= 89.76029, xmin= -0.00135, parasitic=0.7333, |e|=0.153851	      1.000000   -376.076875   -272.835981    137.795558   -119.678901   -449.572798      0.000000     49.808212    219.124753   -421.955490     39.354215     39.573348      0.000000      0.000000      0.000000    -25.535779    318.002383     76.344291		688
W= 89.76277, xmin= -0.00133, parasitic=0.7487, |e|=0.136364	      1.000000    160.475710   -279.435101    365.566531    173.348769   -104.330134      0.000000    198.687583     -4.800615   -354.488985     99.325818    224.603511      0.000000      0.000000      0.000000     87.535035   -284.086162    -82.778242		689
W= 89.77064, xmin= -0.00129, parasitic=0.7395, |e|=0.136364	      1.000000   -129.049302    240.921326   -190.716501    412.745041    235.280913      0.000000   -156.052513    309.259761     17.871562    177.911598   -351.910332      0.000000      0.000000      0.000000     85.994021   -335.212619    277.035061		690
W= 89.75628, xmin= -0.00137, parasitic=0.7288, |e|=0.148252	      1.000000    287.622206    295.987109    -27.008538   -332.983824   -268.541264      0.000000    -41.351200   -270.053204    173.483281    200.578193   -409.055391      0.000000      0.000000      0.000000   -104.047292    231.113428     -6.602276		691
W= 89.77024, xmin= -0.00129, parasitic=0.7412, |e|=0.136364	      1.000000    -54.844620    362.349991   -363.915752   -371.849331   -264.408296      0.000000   -244.378758    384.720759    409.960801   -179.074884   -264.397279      0.000000      0.000000      0.000000    151.463338   -431.997455    297.444864		692
W= 89.76701, xmin= -0.00131, parasitic=0.7480, |e|=0.136364	      1.000000   -256.711857    -97.937873   -186.490014    276.572314   -172.886715      0.000000    311.607107   -347.864897    -70.178136     -3.044939   -314.230056      0.000000      0.000000      0.000000    -57.533870    292.426375     92.279827		693
W= 89.75211, xmin= -0.00139, parasitic=0.7312, |e|=0.136364	      1.000000    202.212474   -424.074629    393.027872    391.479975   -418.703489      0.000000    167.703658    -37.059325    367.876001    -27.694598    257.107661      0.000000      0.000000      0.000000    -33.605941   -258.562827   -102.015303		694
W= 89.75164, xmin= -0.00137, parasitic=0.7350, |e|=0.196876	      1.000000   -195.409419    373.254293     91.270457   -219.624318   -421.716340      0.000000    -50.680140     77.743222   -251.412468   -316.871091   -394.082847      0.000000      0.000000      0.000000    -19.390408    242.882411     -3.276070		695
W= 89.76937, xmin= -0.00130, parasitic=0.7400, |e|=0.136364	      1.000000     96.423625   -410.355443    176.057127    -29.779841   -220.640010      0.000000    198.537966   -316.839254    412.727348      7.758455   -234.513008      0.000000      0.000000      0.000000     37.912191   -338.299341    233.507043		696
W= 89.76332, xmin= -0.00133, parasitic=0.7429, |e|=0.136364	      1.000000   -373.550704     -7.758518   -108.295875    341.425313     30.942897      0.000000    -89.070720    243.900120    324.668947    294.566404    217.045508      0.000000      0.000000      0.000000   -147.611017    306.834572   -130.763961		697
W= 89.75113, xmin= -0.00140, parasitic=0.7431, |e|=0.142071	      1.000000   -438.938087    165.825730    294.372090   -289.076956   -263.725258      0.000000    -17.536452    -94.291796    -40.091183     -6.257777   -142.604130      0.000000      0.000000      0.000000    -85.362853    383.933908    111.995474		698
W= 89.75763, xmin= -0.00136, parasitic=0.7299, |e|=0.136364	      1.000000    -75.050127   -258.291702    161.979666   -336.024409   -254.365452      0.000000    154.833016   -126.733557    427.073882    362.262597    239.173463      0.000000      0.000000      0.000000     26.908362   -321.073604    -27.948854		699
W= 89.76064, xmin= -0.00135, parasitic=0.7312, |e|=0.163446	      1.000000   -410.343984   -132.268631   -362.404314   -236.257265    124.642829      0.000000     28.672473    233.420338   -289.728074   -407.844445     36.283501      0.000000      0.000000      0.000000     -8.098038    382.116830    -31.167763		700
W= 89.75795, xmin= -0.00137, parasitic=0.7478, |e|=0.651902	      1.000000    217.949828    120.200771     54.881538   -133.535397   -134.431747      0.000000    -82.893922    -52.066762    286.959054   -332.945949    226.346878      0.000000      0.000000      0.000000     43.926931   -119.061248     91.644770		701
W= 89.77814, xmin= -0.00119, parasitic=0.7475, |e|=0.199054	      1.000000    423.634139    288.768681   -236.496183    419.485449   -129.078024      0.000000    -72.397746   -320.187437    409.864047     82.043767   -228.992453      0.000000      0.000000      0.000000   -199.747968    396.182403   -290.009517		702
W= 89.75952, xmin= -0.00135, parasitic=0.7321, |e|=0.136364	      1.000000   -264.760539    -20.394829    173.033443   -416.912455    212.207040      0.000000   -110.181053    440.639190    383.487819    336.485003   -321.807455      0.000000      0.000000      0.000000     28.830055   -302.948088     78.579751		703
W= 89.75791, xmin= -0.00136, parasitic=0.7467, |e|=0.136364	      1.000000    248.784220   -411.548948     -8.502816   -270.252074   -161.305571      0.000000    382.355230   -256.027093     64.224587      6.307740    201.471133      0.000000      0.000000      0.000000    -90.730376    405.351813    -40.936732		704
W= 89.76014, xmin= -0.00135, parasitic=0.7334, |e|=0.136364	      1.000000    287.892481   -444.694017     60.577023   -208.540969    -84.413254      0.000000    151.505379   -257.564142    267.977653   -325.706077    180.722845      0.000000      0.000000      0.000000    145.092680   -429.090180    153.483680		705
W= 89.75038, xmin= -0.00140, parasitic=0.7240, |e|=0.163022	      1.000000   -184.215603   -193.255938   -184.530025   -373.945705    156.426765      0.000000    148.842159    -68.630704    370.815041    328.524521    436.882596      0.000000      0.000000      0.000000     37.802093   -302.413860   -107.067191		706
W= 89.77926, xmin= -0.00124, parasitic=0.7436, |e|=0.136364	      1.000000    288.482055    194.750599   -150.149565    208.316810     61.584624      0.000000     15.620203   -344.252310    390.547213    -78.303960    370.312684      0.000000      0.000000      0.000000     40.868234   -259.423689    -55.133045		707
W= 89.75917, xmin= -0.00136, parasitic=0.7391, |e|=0.136364	      1.000000     24.160045   -427.256528     59.531070    309.067941     54.013391      0.000000    111.749855    -59.633328    301.126314   -207.790000    310.691567      0.000000      0.000000      0.000000    113.057100   -432.131238    295.201896		708
W= 89.75070, xmin= -0.00124, parasitic=0.7412, |e|=0.136364	      1.000000   -169.799505    174.631805   -230.205879     67.544698   -261.264431      0.000000    -84.970827    266.084122    -94.370674    239.221545    100.043159      0.000000      0.000000      0.000000   -110.216136    386.743356   -366.313575		709
W= 89.77581, xmin= -0.00126, parasitic=0.7411, |e|=0.136364	      1.000000    -54.608339     81.843867    -40.106716   -369.063390   -293.269978      0.000000   -168.026913    309.759751   -255.323356   -257.288848   -377.312343      0.000000      0.000000      0.000000    131.399211   -214.641656    280.246015		710
W= 89.75779, xmin= -0.00136, parasitic=0.7427, |e|=0.136364	      1.000000   -145.662163    244.832533    350.230680    204.077583   -175.696707      0.000000   -110.002604    263.444197   -135.953021   -155.056471   -308.246485      0.000000      0.000000      0.000000   -103.960082    248.685531   -110.003297		711
W= 89.78063, xmin= -0.00123, parasitic=0.7433, |e|=0.136364	      1.000000   -193.683556   -351.346150    445.960286   -175.044954    286.239599      0.000000    199.114791    -84.514456    229.803022    -52.818562    177.056371      0.000000      0.000000      0.000000     37.783338   -212.583342   -147.057095		712
W= 89.75574, xmin= -0.00137, parasitic=0.7330, |e|=0.491041	      1.000000    435.595183   -194.046800     90.352178   -311.186135   -152.537528      0.000000   -131.518174    137.571445    316.027017    119.346336   -434.261394      0.000000      0.000000      0.000000    119.391845   -427.963126    250.010478		713
W= 89.75199, xmin= -0.00139, parasitic=0.7342, |e|=0.136364	      1.000000     15.524436     92.239240    369.652538   -438.216718    148.282157      0.000000    -61.634377     81.793951    342.033154     58.440728   -375.043817      0.000000      0.000000      0.000000     91.405027   -300.535880     55.604749		714
W= 89.76172, xmin= -0.00134, parasitic=0.7459, |e|=0.165225	      1.000000   -406.682838    252.902169    -89.350028   -231.188830   -188.325068      0.000000    -67.949581    403.011784   -262.903929   -224.714555    320.670737      0.000000      0.000000      0.000000    -42.039921    285.642190   -190.927636		715
W= 89.76090, xmin= -0.00134, parasitic=0.7309, |e|=0.307586	      1.000000     81.069927   -243.732727   -216.214864    -23.031145    -46.047495      0.000000      0.880275    121.747922     83.982494    349.606314   -379.227677      0.000000      0.000000      0.000000   -150.545480    405.353813    -19.217653		716
W= 89.75208, xmin= -0.00139, parasitic=0.7476, |e|=0.136364	      1.000000    307.136509   -168.527676   -409.505544   -118.425004    398.603401      0.000000    245.698312   -182.760416   -290.021654   -338.066933   -171.903241      0.000000      0.000000      0.000000     27.632730    330.510755    115.526078		717
W= 89.78229, xmin= -0.00122, parasitic=0.7445, |e|=0.136364	      1.000000    262.864369   -182.558590   -188.618209    -76.937129   -144.317310      0.000000     92.866499   -199.486635    222.007067   -400.891470     84.742667      0.000000      0.000000      0.000000     85.922178   -286.663696    106.030948		718
W= 89.76166, xmin= -0.00134, parasitic=0.7456, |e|=0.136364	      1.000000   -441.893426   -334.922516   -198.277584   -411.192247    -12.620095      0.000000   -119.764536    340.254999   -170.646721   -145.948818   -295.808042      0.000000      0.000000      0.000000      7.087482    240.831982    161.761343		719
W= 89.77272, xmin= -0.00128, parasitic=0.7452, |e|=0.136364	      1.000000    294.964645    -52.749883    208.860268    334.426460      9.476475      0.000000    134.443486   -319.049221   -339.277436      3.447672    -79.740836      0.000000      0.000000      0.000000    136.669714   -427.096248    192.276208		720
W= 89.76359, xmin= -0.00133, parasitic=0.7315, |e|=0.136364	      1.000000   -292.873659   -429.076524    -37.350383    435.586330    -16.711864      0.000000    293.347727   -114.657734   -292.207393    293.640447      4.863721      0.000000      0.000000      0.000000   -107.208538    406.517010     39.468795		721
W= 89.75789, xmin= -0.00136, parasitic=0.7402, |e|=0.300534	      1.000000   -219.941498    329.282362    253.838798    214.199317    -53.398708      0.000000     12.089380    -62.341278    430.840161   -371.232594     20.141115      0.000000      0.000000      0.000000    -64.886839     25.936977   -131.731940		722
W= 89.75913, xmin= -0.00135, parasitic=0.7468, |e|=0.136364	      1.000000   -105.030999    -81.653045   -368.960630   -127.983411    145.531019      0.000000    198.792497   -409.439476    201.927853   -280.890195   -284.485989      0.000000      0.000000      0.000000    176.574792   -340.544271    365.672288		723
W= 89.76064, xmin= -0.00134, parasitic=0.7402, |e|=0.136364	      1.000000    377.972694    297.774587   -270.313773   -224.846683     81.250741      0.000000     88.576298   -380.194291   -393.610084   -221.406743   -147.701853      0.000000      0.000000      0.000000      7.740964    394.897146    140.734257		724
W= 89.76339, xmin= -0.00133, parasitic=0.7331, |e|=0.136364	      1.000000   -202.898434    262.019843    -84.463924   -182.314916    -45.198044      0.000000   -161.013106    299.810787    -64.045324    116.157766   -443.989636      0.000000      0.000000      0.000000    -72.765536    248.210406     26.939400		725
W= 89.76535, xmin= -0.00132, parasitic=0.7375, |e|=0.136364	      1.000000   -124.381865    -24.396905   -245.122903   -413.598698    259.262928      0.000000   -150.527605    258.816012    418.363403   -435.677062   -379.653377      0.000000      0.000000      0.000000     41.282079   -210.525741    -44.641224		726
W= 89.75805, xmin= -0.00136, parasitic=0.7309, |e|=0.136364	      1.000000   -250.248765   -125.468434   -179.497061    -93.118178    116.452410      0.000000    275.237556   -381.525142   -189.019262   -271.887895   -147.443915      0.000000      0.000000      0.000000    165.348559   -261.705737    204.899425		727
W= 89.75503, xmin= -0.00138, parasitic=0.7331, |e|=0.136364	      1.000000    -18.552285   -371.633257    -49.350721   -321.344906     80.417745      0.000000    194.419503   -226.725781   -184.146419    211.469678   -176.157557      0.000000      0.000000      0.000000   -110.970190    379.368411   -181.399745		728
W= 89.76197, xmin= -0.00134, parasitic=0.7359, |e|=0.136364	      1.000000    -74.043210    357.035668   -287.813409   -423.636769    214.209240      0.000000   -146.345281    160.110246   -328.715332   -312.730673   -428.549806      0.000000      0.000000      0.000000    293.041908   -445.424088    410.056575		729
W= 89.78339, xmin= -0.00122, parasitic=0.7475, |e|=0.388565	      1.000000   -419.400417    165.014638    139.788280   -116.480867   -128.501110      0.000000    108.240093    -84.667282   -128.571388    207.496607    350.339429      0.000000      0.000000      0.000000    161.639471   -421.623857    113.803153		730
W= 89.75083, xmin= -0.00140, parasitic=0.7410, |e|=0.136364	      1.000000   -107.022674    228.039818     23.363241   -216.661036     74.738288      0.000000    -97.109802    237.738815   -269.015399    306.918863   -229.955555      0.000000      0.000000      0.000000   -119.208159    342.282523   -272.349749		731
W= 89.75776, xmin= -0.00136, parasitic=0.7338, |e|=0.235627	      1.000000   -295.703272   -101.884623    391.224386    309.129764    266.377615      0.000000    -36.478643    369.129480    272.021818    401.502962   -367.789263      0.000000      0.000000      0.000000    -69.698609   -103.153147    -52.721154		732
W= 89.77296, xmin= -0.00128, parasitic=0.7438, |e|=0.136364	      1.000000      4.403067    338.390679    -92.045263    379.828638   -393.117279      0.000000   -280.507735    264.111869    388.174059   -419.618938    405.050681      0.000000      0.000000      0.000000     16.272981   -264.076406    -29.399954		733
W= 89.75064, xmin= -0.00140, parasitic=0.7386, |e|=0.136364	      1.000000    316.198987   -357.624935   -165.302862   -121.948725   -364.680975      0.000000    197.663438   -131.051538   -361.202561    238.138952     74.581443      0.000000      0.000000      0.000000    -37.050055    411.200758     82.193328		734
W= 89.78072, xmin= -0.00123, parasitic=0.7433, |e|=1.083868	      1.000000    260.404816     91.074309   -275.287007    211.477253   -282.713606      0.000000   -112.953802     31.870824     68.871740   -174.073359   -340.917592      0.000000      0.000000      0.000000    123.120411   -377.205210    324.532313		735
W= 89.77541, xmin= -0.00126, parasitic=0.7451, |e|=0.136364	      1.000000   -134.399176   -338.669271    197.554981   -102.420615   -414.858425      0.000000    260.160043   -303.671747     77.897109   -158.068400    268.822232      0.000000      0.000000      0.000000    134.175596   -332.545480     83.434115		736
W= 89.76872, xmin= -0.00130, parasitic=0.7403, |e|=0.136364	      1.000000   -225.538508    -20.349024   -284.901401    383.000400     71.459584      0.000000    -65.129838    374.837828    163.721778    152.979059    -97.490128      0.000000      0.000000      0.000000    -72.155649     83.904577    -77.520355		737
W= 89.78641, xmin= -0.00120, parasitic=0.7456, |e|=0.136364	      1.000000    309.305767   -349.849496    263.894986    267.326416   -374.420306      0.000000    179.151613   -281.004289   -196.105870    260.467966   -244.562841      0.000000      0.000000      0.000000     94.461708   -363.117175    219.774309		738
W= 89.78872, xmin= -0.00713, parasitic=0.7491, |e|=0.136364	      1.000000    262.879560   -444.930444    -22.030741   -297.850561    385.916389      0.000000    344.680432   -354.149372    102.627350   -384.261326   -211.105152      0.000000      0.000000      0.000000     60.434187   -131.093867    -34.977461		739
W= 89.76060, xmin= -0.00134, parasitic=0.7325, |e|=0.162835	      1.000000    -23.184337    373.567543    449.153656    379.843307   -364.104163      0.000000    -63.279566    -90.253972    272.372687    398.359379   -317.076365      0.000000      0.000000      0.000000   -271.121329    410.785296   -215.360438		740
W= 89.76181, xmin= -0.00124, parasitic=0.7432, |e|=0.136364	      1.000000     76.447316    270.802797    439.396471    130.633675   -243.449281      0.000000   -285.660252    437.001878   -138.636296     34.282402    -85.424772      0.000000      0.000000      0.000000    -62.896709    186.181358   -131.619229		741
W= 89.75797, xmin= -0.00136, parasitic=0.7379, |e|=0.148052	      1.000000   -261.308224    -74.451273   -338.351870    178.774811    322.781608      0.000000     -8.433355    279.365370   -437.734614    225.746285    -86.104411      0.000000      0.000000      0.000000    -96.361119    367.236233   -120.484103		742
W= 89.77554, xmin= -0.00126, parasitic=0.7478, |e|=0.136364	      1.000000   -140.524826   -249.050687    -53.880412     -6.177174    236.115443      0.000000    150.590520   -124.344422   -335.055100    319.051213   -273.112581      0.000000      0.000000      0.000000   -103.553536    346.136938   -212.847179		743
W= 89.77726, xmin= -0.00294, parasitic=0.7410, |e|=0.136364	      1.000000    -81.498716    -29.662463   -321.743169     -2.151788     21.326606      0.000000    -65.676818    208.248910   -258.887774    288.841161   -199.545372      0.000000      0.000000      0.000000      1.988597     77.773929    137.601598		744
W= 89.76187, xmin= -0.00134, parasitic=0.7348, |e|=0.136364	      1.000000   -164.057135   -339.732013     48.532961    391.151285   -261.508120      0.000000    343.366058   -362.951410    333.971790    -97.254154    -45.719448      0.000000      0.000000      0.000000      9.457418   -295.032568     88.475483		745
W= 89.75634, xmin= -0.00137, parasitic=0.7291, |e|=0.136364	      1.000000    211.999686     -0.135061     57.899352   -389.889558   -314.355697      0.000000    157.366929   -327.187072    389.108968   -225.397163    284.341686      0.000000      0.000000      0.000000   -151.202561    418.812464   -187.416731		746
W= 89.75144, xmin= -0.00139, parasitic=0.7337, |e|=0.136364	      1.000000    422.693323   -220.379625   -176.434478   -338.548749    117.154196      0.000000    112.018218    -49.901381     69.248014    226.142535   -425.343578      0.000000      0.000000      0.000000     88.558242   -388.782057     54.050930		747
W= 89.75374, xmin= -0.00138, parasitic=0.7435, |e|=0.136364	      1.000000   -241.974139   -438.532310   -315.066758   -254.183149   -154.938681      0.000000    341.312053   -412.513487     76.014540   -352.386904    195.603241      0.000000      0.000000      0.000000    -88.971134    273.621685    -89.536982		748
W= 89.77673, xmin= -0.00125, parasitic=0.7456, |e|=0.136364	      1.000000    287.902783   -220.602082   -211.422440    323.656555    139.916386      0.000000    273.505472   -350.841595   -227.244963    375.784322    154.747200      0.000000      0.000000      0.000000    -48.620532    258.911968     34.356095		749
W= 89.78533, xmin= -0.00121, parasitic=0.7464, |e|=0.136364	      1.000000    183.444819    172.514256    346.133421    132.368879     55.016972      0.000000     49.933403   -268.953397    239.749381    297.134603    -21.642987      0.000000      0.000000      0.000000     38.710858   -429.833604    -35.858832		750
W= 89.78517, xmin= -0.00121, parasitic=0.7456, |e|=0.136364	      1.000000   -256.411143    389.331895     42.264582   -398.219893    360.082044      0.000000   -228.027064    370.581762    436.338464   -410.632437   -124.748685      0.000000      0.000000      0.000000     33.928819   -158.763166    -58.599004		751
W= 89.76768, xmin= -0.00130, parasitic=0.7393, |e|=0.136364	      1.000000     17.355021     91.951803   -247.395072    167.368793    129.739225      0.000000   -126.386842    227.628539      5.391999    362.207379   -365.875819      0.000000      0.000000      0.000000    124.626664   -406.153993    297.251875		752
W= 89.76044, xmin= -0.00135, parasitic=0.7408, |e|=0.136364	      1.000000    -92.605729    243.466748    132.378135   -396.067535   -269.049843      0.000000   -138.557346     74.413064    -49.383324     51.563649    212.478051      0.000000      0.000000      0.000000     47.795007   -157.142241    -14.535724		753
W= 89.75945, xmin= -0.00135, parasitic=0.7324, |e|=0.332829	      1.000000   -344.946671     55.548226     12.364997   -133.258907    -44.980551      0.000000     85.897273    -34.058444   -246.951652      3.461500    -92.132698      0.000000      0.000000      0.000000    -65.957842    388.676231    -91.145792		754
W= 89.77558, xmin= -0.00607, parasitic=0.7403, |e|=0.136364	      1.000000   -294.177684    197.620152   -314.927058     23.012805    376.466134      0.000000   -289.097653    435.947321   -397.983655    342.894347   -221.318676      0.000000      0.000000      0.000000    -42.662885    376.080277    123.067771		755
W= 89.79095, xmin= -0.00118, parasitic=0.7491, |e|=0.136364	      1.000000   -146.841052   -325.686986   -356.203622    426.921467   -213.895552      0.000000    131.988454     18.681239    250.170797    429.562434   -381.273197      0.000000      0.000000      0.000000   -178.988896    343.256573    -49.703397		756
W= 89.77411, xmin= -0.00127, parasitic=0.7404, |e|=0.252057	      1.000000   -444.097251    278.884554   -288.675967    -76.552846   -168.267831      0.000000     48.330172    -25.668842    324.993504    160.627050    119.840234      0.000000      0.000000      0.000000    -67.579317     76.886062    -81.414440		757
W= 89.76626, xmin= -0.00131, parasitic=0.7450, |e|=0.136364	      1.000000   -224.265733   -350.510916    212.655188    255.252797     58.060588      0.000000    262.212964    -94.206819     11.045825     95.949358   -359.736224      0.000000      0.000000      0.000000   -130.706117    430.430544     31.991550		758
W= 89.76943, xmin= -0.00130, parasitic=0.7453, |e|=0.136364	      1.000000    182.848488     41.386996    334.230796    213.625548   -193.377527      0.000000   -262.048084    362.661095   -148.039948     55.037294    -50.334056      0.000000      0.000000      0.000000     57.308138   -272.099564    103.490579		759
W= 89.75500, xmin= -0.00138, parasitic=0.7458, |e|=0.136364	      1.000000     58.297092    444.835996    367.309840    378.186224   -418.245777      0.000000   -243.550317    -17.267267   -148.776660     37.651276    191.593856      0.000000      0.000000      0.000000     45.484706   -280.686990    -24.319918		760
W= 89.76138, xmin= -0.00134, parasitic=0.7481, |e|=0.228468	      1.000000    285.497710   -283.818858   -328.655580   -288.739139    356.046260      0.000000      7.573915    -88.876021    260.628328    -26.478246   -341.371945      0.000000      0.000000      0.000000   -131.520852    280.349021   -170.466516		761
W= 89.75614, xmin= -0.00137, parasitic=0.7273, |e|=0.205322	      1.000000   -439.727513   -149.610536     67.169633   -283.630777    396.090485      0.000000    373.184936   -448.421535   -197.927866   -318.313716   -252.676731      0.000000      0.000000      0.000000    225.963655   -423.386869    169.394210		762
W= 89.77826, xmin= -0.00122, parasitic=0.7472, |e|=0.209674	      1.000000     43.458708   -387.813564    292.875600   -280.238746    172.953621      0.000000     50.677891     88.779432    -11.729383   -351.280801    442.255893      0.000000      0.000000      0.000000    134.376960   -301.823111    132.451472		763
W= 89.75694, xmin= -0.00137, parasitic=0.7485, |e|=0.148969	      1.000000    383.605861   -277.583029    399.459687    -61.813416    -76.947948      0.000000     91.632496   -387.009071    170.622234   -403.042550    218.460721      0.000000      0.000000      0.000000    264.283389   -413.613173     -2.141385		764
W= 89.76508, xmin= -0.00132, parasitic=0.7372, |e|=0.190757	      1.000000   -258.281669     33.473531    197.550393    446.240951   -355.214627      0.000000      8.467066    147.922026   -393.272931   -211.492719    202.771785      0.000000      0.000000      0.000000     20.599456     65.597086     18.292715		765
W= 89.76783, xmin= -0.00130, parasitic=0.7388, |e|=0.136364	      1.000000   -248.133010    317.493378    238.702848    276.405699    -65.112228      0.000000    -87.093669      5.264791    188.914359   -244.335718   -132.749758      0.000000      0.000000      0.000000   -135.226846    361.978746    -81.764968		766
W= 89.78811, xmin= -0.00119, parasitic=0.7492, |e|=0.136364	      1.000000    236.288449    443.715491    -70.813390   -382.646706   -167.234934      0.000000   -441.770522    441.156364   -181.952311   -250.001157    174.177936      0.000000      0.000000      0.000000    154.822182   -334.174225    148.114503		767
W= 89.77594, xmin= -0.00126, parasitic=0.7431, |e|=0.157497	      1.000000   -290.381011   -134.426916   -269.646305    266.823723   -117.497505      0.000000    276.429128   -369.618177     65.982568   -399.800563    393.070944      0.000000      0.000000      0.000000    107.044812   -238.493517    114.253527		768
W= 89.76768, xmin= -0.00130, parasitic=0.7365, |e|=0.136364	      1.000000    296.325414    239.823122    193.512459    231.374730   -272.598446      0.000000   -285.733928    299.556682   -185.018972     17.334224   -445.937927      0.000000      0.000000      0.000000    112.561145   -321.370801    299.479451		769
W= 89.76340, xmin= -0.00133, parasitic=0.7365, |e|=0.514930	      1.000000    406.742171   -298.297527    308.325966    231.294966    409.186977      0.000000   -120.223889    200.841204    -78.332963   -244.757406     89.059604      0.000000      0.000000      0.000000     81.040665   -183.341230      0.387363		770
W= 89.75156, xmin= -0.00140, parasitic=0.7357, |e|=0.689123	      1.000000   -311.329440    313.141613    385.900666    -27.331318    449.512436      0.000000    109.399440   -280.504057   -428.826271   -157.946948    274.659767      0.000000      0.000000      0.000000    162.050313   -399.161773     55.561693		771
W= 89.77674, xmin= -0.00125, parasitic=0.7491, |e|=0.136364	      1.000000   -330.131116    263.584309     19.736767     21.951823   -186.188501      0.000000   -298.813243    251.811408   -155.402070     -1.439201     52.966519      0.000000      0.000000      0.000000    -32.741326    231.362690     68.672508		772
W= 89.75649, xmin= -0.00137, parasitic=0.7486, |e|=0.585896	      1.000000   -295.678761    113.138743     98.082600   -379.146839    -89.817087      0.000000    106.146111   -160.335658    349.949819    445.953514   -299.917154      0.000000      0.000000      0.000000     -0.217678   -357.068888     64.123177		773
W= 89.78910, xmin= -0.00119, parasitic=0.7481, |e|=0.136364	      1.000000   -193.237807   -427.415805    186.963834    -58.081942    341.379183      0.000000     -8.212768    416.540388    -85.431571    -11.318645   -242.199303      0.000000      0.000000      0.000000   -119.438024    429.025213   -216.581805		774
W= 89.75390, xmin= -0.00138, parasitic=0.7305, |e|=0.316256	      1.000000    -37.301194    282.795915   -252.418980    304.480492    411.099824      0.000000    -16.359672   -123.435132   -273.595536    -29.082206     29.290195      0.000000      0.000000      0.000000    209.655130   -447.544924    293.856583		775
W= 89.75747, xmin= -0.00136, parasitic=0.7380, |e|=0.238615	      1.000000   -287.580061    -87.751151   -446.730045    136.286854   -137.109082      0.000000    312.166042   -303.165529    305.448055   -383.681423    188.941637      0.000000      0.000000      0.000000    -55.324158    195.192236    -21.359857		776
W= 89.75337, xmin= -0.00138, parasitic=0.7257, |e|=0.136364	      1.000000    171.328351    368.594836   -266.008988    104.839832    -44.613387      0.000000   -298.784755    213.373771    345.083135    323.684524    -36.947555      0.000000      0.000000      0.000000   -134.043540    227.392386    -43.373040		777
W= 89.75913, xmin= -0.00135, parasitic=0.7344, |e|=0.202321	      1.000000   -249.043764     49.050895     42.785568   -356.636929     55.764513      0.000000    234.667621   -419.230361    444.920099     88.259160     43.648240      0.000000      0.000000      0.000000     68.974137   -299.770207    -12.424571		778
W= 89.77303, xmin= -0.00128, parasitic=0.7474, |e|=0.796886	      1.000000   -244.517345    416.042172    -32.380687   -280.454562   -125.604399      0.000000     80.415900   -291.364893   -170.811054    -29.484296     63.218969      0.000000      0.000000      0.000000    -28.634377    177.089105    -56.069835		779
W= 89.77320, xmin= -0.00128, parasitic=0.7480, |e|=0.136364	      1.000000   -258.737405   -259.912509    353.899078   -264.541155    -11.806221      0.000000    291.756590   -404.411222    175.722783    -93.344643    -66.425474      0.000000      0.000000      0.000000    120.279560   -355.166889    231.681436		780
W= 89.77702, xmin= -0.00125, parasitic=0.7416, |e|=0.136364	      1.000000    325.564968   -276.104645    377.921059    381.539092    101.353610      0.000000    168.168109   -293.131762   -446.069616   -416.273886   -314.465928      0.000000      0.000000      0.000000    191.310467   -449.918545    251.663913		781
W= 89.75143, xmin= -0.00139, parasitic=0.7254, |e|=0.136364	      1.000000    -35.055826     39.580668    262.130576    346.075515    167.216379      0.000000    174.586778   -389.459070    314.252506     73.869635   -346.690787      0.000000      0.000000      0.000000     44.805859   -352.741705     70.350763		782
W= 89.77239, xmin= -0.00128, parasitic=0.7437, |e|=0.262684	      1.000000    -93.924244    264.582336   -280.365078   -374.859092   -342.088399      0.000000    -12.727640    -72.584133    115.428587    436.549114    176.457499      0.000000      0.000000      0.000000    -94.883785    177.993941   -108.188922		783
W= 89.75262, xmin= -0.00139, parasitic=0.7290, |e|=0.136364	      1.000000    418.519469     73.213411    128.461541    189.160164    275.627244      0.000000    122.928001   -441.233969     -0.392914   -360.802006   -273.337618      0.000000      0.000000      0.000000     84.087341   -273.750877     85.630547		784
W= 89.76404, xmin= -0.00133, parasitic=0.7455, |e|=0.136364	      1.000000    172.490309   -201.607982   -237.190485    281.115823    266.760313      0.000000    157.711408   -191.745003    218.319190   -123.915163   -269.996469      0.000000      0.000000      0.000000     57.932180   -354.539474    126.374407		785
W= 89.75184, xmin= -0.00139, parasitic=0.7284, |e|=0.154354	      1.000000   -175.568598    124.121470     23.271263   -379.906417     51.992899      0.000000    -29.445634    103.639173   -322.039535   -340.291935   -363.157853      0.000000      0.000000      0.000000    191.391560   -249.991801    279.928983		786
W= 89.76371, xmin= -0.00133, parasitic=0.7422, |e|=0.145185	      1.000000    140.144710    -27.876125   -316.134270   -139.699515     66.254727      0.000000   -160.277048    325.720263    308.764701    208.918865    -95.119653      0.000000      0.000000      0.000000   -202.754829    383.543623   -274.400390		787
W= 89.75325, xmin= -0.00138, parasitic=0.7246, |e|=0.136364	      1.000000    122.530921   -139.505682    258.057262    240.736671     72.855261      0.000000     77.476362    -99.194011   -424.350241   -136.319036    428.250505      0.000000      0.000000      0.000000    -14.928437    242.072594   -106.683727		788
W= 89.76823, xmin= -0.00131, parasitic=0.7377, |e|=0.136364	      1.000000     98.509771    176.682542   -274.033475   -193.959436     19.599611      0.000000     53.057238   -292.043366    -84.871635    -94.071083     23.712742      0.000000      0.000000      0.000000     81.338855   -136.770806    142.016384		789
W= 89.78236, xmin= -0.00122, parasitic=0.7434, |e|=0.136364	      1.000000     41.937837    406.090292    307.651766    411.148206    273.550944      0.000000   -295.655234    288.802940      1.239738    126.263182   -377.607730      0.000000      0.000000      0.000000     53.219570   -313.045824     95.824696		790
W= 89.77353, xmin= -0.00127, parasitic=0.7377, |e|=0.136364	      1.000000    -90.294576    116.695245   -411.145390   -298.410986    -54.206991      0.000000    131.142415   -291.509584      6.976346     47.914727     10.940155      0.000000      0.000000      0.000000    -87.568982    373.894630    -33.179315		791
W= 89.75592, xmin= -0.00137, parasitic=0.7283, |e|=0.621705	      1.000000    383.869780    -74.842999    397.258501    336.338755   -364.479046      0.000000   -138.295557    123.623199   -413.448730   -243.433835   -263.659410      0.000000      0.000000      0.000000    179.888302   -382.045932    291.557236		792
W= 89.76530, xmin= -0.00132, parasitic=0.7452, |e|=0.282703	      1.000000    203.505172   -356.122728    359.438306    303.568933    356.945661      0.000000      3.828350     29.205742     21.845372    139.725538     37.749311      0.000000      0.000000      0.000000     88.467064   -338.103014    182.264910		793
W= 89.76154, xmin= -0.00134, parasitic=0.7490, |e|=1.090698	      1.000000   -201.864444    279.982024   -296.645802    148.437602   -161.962659      0.000000    124.824675   -351.368210   -192.649441     78.570871    250.683259      0.000000      0.000000      0.000000   -185.032592    367.043035    -86.018351		794
W= 89.75364, xmin= -0.00139, parasitic=0.7337, |e|=0.136364	      1.000000   -205.006965   -431.818599    370.656448    317.552135    180.846414      0.000000    289.331022   -160.906958    -72.473682   -296.508417    116.320750      0.000000      0.000000      0.000000     68.521391   -273.869311     15.855889		795
W= 89.76412, xmin= -0.00133, parasitic=0.7342, |e|=0.136364	      1.000000     -6.337569     53.111586    284.313668    283.019688    193.933366      0.000000    160.235551   -349.506991    418.774093   -435.728738   -312.460509      0.000000      0.000000      0.000000    -55.661393    -32.628808    -66.609963		796
W= 89.76737, xmin= -0.00131, parasitic=0.7421, |e|=0.174464	      1.000000    -16.621553    390.464557    349.759234    303.160264   -261.878855      0.000000     79.896733   -444.521339    438.348964    320.914184    -75.664607      0.000000      0.000000      0.000000   -157.715005     59.209210   -157.019972		797
W= 89.77078, xmin= -0.00129, parasitic=0.7449, |e|=0.240904	      1.000000    438.607847    -24.086094   -284.905793   -236.665294    388.021455      0.000000    -58.086174   -181.117026     66.563146    110.808464    212.539006      0.000000      0.000000      0.000000   -123.783189    341.541444   -296.947806		798
W= 89.75948, xmin= -0.00135, parasitic=0.7366, |e|=0.136364	      1.000000     83.835564    189.859323     -1.099862    278.055741   -347.930736      0.000000     88.985567   -417.347578    380.164221    285.319655    118.213352      0.000000      0.000000      0.000000   -227.837454    326.620596   -307.597122		799
W= 89.77605, xmin= -0.00126, parasitic=0.7394, |e|=0.183238	      1.000000    234.696650   -121.485638   -321.735778   -149.738950    -34.603640      0.000000   -235.898203    435.342312   -228.813807    197.259406    358.033865      0.000000      0.000000      0.000000    -33.327388    253.572395    -51.181353		800
W= 89.76339, xmin= -0.00133, parasitic=0.7382, |e|=0.136364	      1.000000    257.282889     11.001071   -220.628192    419.419168   -272.413724      0.000000     78.873281   -409.079014     26.052026   -358.557134    149.248307      0.000000      0.000000      0.000000    -98.855841    298.217564   -151.211554		801
W= 89.77172, xmin= -0.00126, parasitic=0.7435, |e|=0.136364	      1.000000     75.592068    320.484138   -395.941432   -380.995001    239.123932      0.000000   -285.754416    349.705368    248.463748    420.054638   -400.314015      0.000000      0.000000      0.000000     45.331405   -283.067492    211.583595		802
W= 89.78097, xmin= -0.00123, parasitic=0.7449, |e|=0.206917	      1.000000     64.693446   -269.513434     15.647324    275.694968   -330.437411      0.000000    -94.247830    354.451765    100.868385    225.239878   -420.192223      0.000000      0.000000      0.000000     87.157097   -411.288791    314.703322		803
W= 89.75984, xmin= -0.00135, parasitic=0.7497, |e|=0.136364	      1.000000   -107.473393    123.589846   -116.725214    125.574486    -55.275300      0.000000   -106.468557    340.393477     41.921439    442.821438     67.259222      0.000000      0.000000      0.000000   -126.022822    156.367327   -210.472915		804
W= 89.75436, xmin= -0.00126, parasitic=0.7413, |e|=0.136364	      1.000000     -3.667279   -426.186755    -63.672968     95.856509    -92.508369      0.000000    289.556087   -397.414019    291.977260   -329.272314   -437.188756      0.000000      0.000000      0.000000     52.221358   -319.105865    342.618932		805
W= 89.75959, xmin= -0.00135, parasitic=0.7368, |e|=0.136364	      1.000000     28.184344   -246.776540   -105.564047   -106.376340   -332.878214      0.000000    110.277531   -124.951028   -306.068511    101.359433    388.235152      0.000000      0.000000      0.000000    161.549993   -277.147891    173.874364		806
W= 89.75515, xmin= -0.00137, parasitic=0.7494, |e|=0.136364	      1.000000    285.485283   -319.104550    293.436939   -171.807401   -369.521815      0.000000    146.420995   -439.513479   -302.705831    269.737580    386.308371      0.000000      0.000000      0.000000   -213.677254    391.839412   -225.040376		807
W= 89.75298, xmin= -0.00139, parasitic=0.7344, |e|=0.136364	      1.000000    223.364725    253.108627    -27.644801   -107.275617    -79.073090      0.000000    171.402472   -401.557918   -115.139274    324.066665    190.464959      0.000000      0.000000      0.000000    -97.848887    445.638210     79.455356		808
W= 89.76534, xmin= -0.00132, parasitic=0.7451, |e|=0.136364	      1.000000   -296.138278   -385.397069    -78.830344   -144.319418     17.950505      0.000000    329.665865   -380.589476    437.622020    -54.189904    -63.162323      0.000000      0.000000      0.000000    118.679671   -398.497805    221.892751		809
W= 89.76599, xmin= -0.00132, parasitic=0.7445, |e|=0.166255	      1.000000    397.618215   -119.217152    -86.141935   -184.323318    319.143194      0.000000     32.245207   -331.847581    169.582009   -305.677069   -388.712435      0.000000      0.000000      0.000000    154.127552   -316.895781    260.572989		810
W= 89.77864, xmin= -0.00124, parasitic=0.7424, |e|=0.407400	      1.000000    419.199372   -265.169798    -99.733195   -329.716418   -185.204626      0.000000   -107.794765    160.967572   -203.040561    269.230867   -108.547015      0.000000      0.000000      0.000000    -96.906475    370.783171    -57.618301		811
W= 89.75159, xmin= -0.00140, parasitic=0.7267, |e|=0.136364	      1.000000    290.754123   -268.030915    417.539949    -75.281865   -168.921915      0.000000    193.385931   -439.938020   -185.587380     53.237528    374.622058      0.000000      0.000000      0.000000    145.447865   -384.696426     75.754115		812
W= 89.76759, xmin= -0.00130, parasitic=0.7414, |e|=0.136364	      1.000000   -156.519609    228.771820   -246.578526   -204.233451     92.767612      0.000000    -99.298290    202.297956   -199.848913     67.530792   -373.908778      0.000000      0.000000      0.000000    -43.988965    206.802214     75.318391		813
W= 89.76149, xmin= -0.00134, parasitic=0.7434, |e|=0.261701	      1.000000    261.956695   -391.799949   -372.065390     50.806303   -167.618795      0.000000     -0.785940     57.251525    300.196099      9.245955     60.576697      0.000000      0.000000      0.000000   -242.687209    425.736288   -186.969020		814
W= 89.77905, xmin= -0.00124, parasitic=0.7427, |e|=0.136364	      1.000000   -228.325724   -249.878769    427.240606   -301.979868    433.098444      0.000000    301.284265   -359.093026     45.614790   -303.103850   -420.238912      0.000000      0.000000      0.000000     55.885549   -169.272077     72.853036		815
W= 89.77391, xmin= -0.00127, parasitic=0.7399, |e|=0.136364	      1.000000    -49.456031   -360.973193   -144.015128    227.525878   -220.405120      0.000000    266.277522   -331.827344    246.824230    420.975849   -131.197910      0.000000      0.000000      0.000000   -145.627148    215.111157   -111.421849		816
W= 89.76023, xmin= -0.00395, parasitic=0.7304, |e|=0.136364	      1.000000   -322.721817    445.550037    391.633995    118.565094    348.518991      0.000000   -163.486170    245.860232    371.784665   -111.580043    330.679380      0.000000      0.000000      0.000000     79.818193   -387.154286   -163.328940		817
W= 89.75696, xmin= -0.00137, parasitic=0.7449, |e|=0.136364	      1.000000    -48.878332    -18.384609     45.294040   -232.389727   -409.974876      0.000000    164.442449   -400.853324    -28.749032    330.171149    306.202761      0.000000      0.000000      0.000000   -153.178427    285.814302   -250.001715		818
W= 89.75294, xmin= -0.00139, parasitic=0.7267, |e|=0.136364	      1.000000    -27.404344    379.594498   -157.635501    377.611251    167.690564      0.000000   -297.026812    419.564886    210.633977    255.350770   -361.371984      0.000000      0.000000      0.000000   -186.712113    336.166980    -93.636008		819
W= 89.75836, xmin= -0.00136, parasitic=0.7438, |e|=0.136364	      1.000000   -236.154741    304.375579    -68.015443    138.812315    110.836907      0.000000   -138.513194    432.780527    323.549771      6.634596   -191.615555      0.000000      0.000000      0.000000   -157.446732    251.670135   -289.357076		820
W= 89.75066, xmin= -0.00140, parasitic=0.7370, |e|=0.366413	      1.000000   -437.359112     73.367562    437.398007   -283.668993    423.379892      0.000000    109.206961     14.497052   -363.838888   -259.230239    -97.311137      0.000000      0.000000      0.000000    168.274446   -148.238488     30.179466		821
W= 89.77248, xmin= -0.00128, parasitic=0.7491, |e|=0.136364	      1.000000    206.482845     -0.033721    -34.865483   -391.108350    -17.567455      0.000000     30.813590   -239.589134    143.503906   -352.950549   -391.527088      0.000000      0.000000      0.000000   -126.152008    361.043894    -99.929644		822
W= 89.76434, xmin= -0.00132, parasitic=0.7379, |e|=0.645493	      1.000000   -299.413858    327.320843   -276.227399    435.065830     47.238450      0.000000     95.961071   -236.479788   -380.928297    256.292660    280.584549      0.000000      0.000000      0.000000    -58.470658    221.703566    -73.937645		823
W= 89.78279, xmin= -0.00122, parasitic=0.7479, |e|=0.175265	      1.000000   -317.365258   -140.150810      4.199666    406.720207    394.203920      0.000000    288.578516   -375.600692     92.485567     37.840538   -241.130904      0.000000      0.000000      0.000000   -185.093814    398.321100   -225.805489		824
W= 89.75984, xmin= -0.00136, parasitic=0.7326, |e|=0.717228	      1.000000   -401.665806    143.334719    -79.369597   -290.232770    -29.673719      0.000000    254.233542   -428.074699   -301.870724   -110.481411   -185.688658      0.000000      0.000000      0.000000     -7.816072    265.543233    -61.801193		825
W= 89.77828, xmin= -0.00124, parasitic=0.7411, |e|=0.493324	      1.000000   -442.826932    -65.146964    108.759418    132.047977    227.724836      0.000000    156.167155    -61.072913    181.581799    -40.098559   -237.299167      0.000000      0.000000      0.000000     56.693180   -321.654455     27.111407		826
W= 89.75577, xmin= -0.00137, parasitic=0.7406, |e|=0.284537	      1.000000    443.269865    192.144046    -39.763139   -344.258687    382.401506      0.000000   -126.908906    -29.460816    254.183811   -380.141988   -100.289931      0.000000      0.000000      0.000000     37.492965   -178.296834   -120.736714		827
W= 89.76674, xmin= -0.00131, parasitic=0.7365, |e|=0.143763	      1.000000   -287.399530    439.540221    270.223725    415.076405     75.587116      0.000000   -106.386162    138.200227     82.987808    163.870955    140.871998      0.000000      0.000000      0.000000   -200.531007    402.904852   -315.074463		828
W= 89.75859, xmin= -0.00136, parasitic=0.7432, |e|=0.136364	      1.000000   -384.989668    414.869098    -28.295453   -265.107465   -148.319807      0.000000   -281.335806    295.128872   -428.798594    119.597492    -28.988406      0.000000      0.000000      0.000000    -12.798711    378.542945     24.553430		829
W= 89.77883, xmin= -0.00124, parasitic=0.7434, |e|=0.136364	      1.000000    324.732138     16.469402    -73.824030   -350.112028   -378.050665      0.000000    181.318028   -394.596460    -73.150510   -209.826133    341.768102      0.000000      0.000000      0.000000    139.906322   -372.161087      1.731285		830
W= 89.78195, xmin= -0.00123, parasitic=0.7440, |e|=0.136364	      1.000000    -49.560696   -128.557182   -245.717863   -163.328964    -60.085084      0.000000    199.478898   -315.230427     54.025184   -200.963216   -145.696781      0.000000      0.000000      0.000000    117.296824   -307.939138    227.740958		831
W= 89.76900, xmin= -0.00130, parasitic=0.7391, |e|=0.574343	      1.000000   -400.696753   -111.037552    320.681999    -70.957785   -195.000762      0.000000    254.104851   -257.685285   -392.501057    162.797903     40.220352      0.000000      0.000000      0.000000    189.403783   -445.509623    324.172402		832
W= 89.75071, xmin= -0.00140, parasitic=0.7418, |e|=0.136364	      1.000000   -128.657878    277.162024   -392.175252    397.304704   -272.628336      0.000000   -324.691057    203.657913   -104.915353   -336.016762    273.138445      0.000000      0.000000      0.000000    -53.572108    440.581625    104.917984		833
W= 89.77502, xmin= -0.00127, parasitic=0.7401, |e|=0.453999	      1.000000   -343.581276    308.963864   -328.803288   -206.729976    -42.000925      0.000000     92.036030   -204.962687    -39.399438    150.073688    -99.329533      0.000000      0.000000      0.000000    -82.483063    332.824231    -70.842156		834
W= 89.76605, xmin= -0.00122, parasitic=0.7438, |e|=0.433066	      1.000000   -384.951161    367.825335   -372.397758    -75.707503    147.070970      0.000000     90.455330   -173.530690    -14.962162    -75.433153     79.873322      0.000000      0.000000      0.000000    168.277365   -444.425281    423.888544		835
W= 89.76576, xmin= -0.00132, parasitic=0.7464, |e|=0.136364	      1.000000   -219.751876    273.664520    289.611298    -40.146721   -280.565645      0.000000   -244.687158    167.709927    439.166933   -218.557117    446.180027      0.000000      0.000000      0.000000      5.406027   -360.248966   -234.717659		836
W= 89.76349, xmin= -0.00133, parasitic=0.7403, |e|=0.136364	      1.000000   -362.029061    394.869189   -326.439613    340.141648    442.097332      0.000000   -300.884135    367.833240     30.899321    393.148383    -88.167519      0.000000      0.000000      0.000000     77.732495   -386.768732    104.627404		837
W= 89.77608, xmin= -0.00126, parasitic=0.7423, |e|=0.393270	      1.000000    238.527904   -379.177479   -157.317412   -316.016309     44.414065      0.000000    -40.175108    176.931966    242.694841   -446.624570   -405.684738      0.000000      0.000000      0.000000    144.427624   -388.890117    382.761595		838
W= 89.76337, xmin= -0.00133, parasitic=0.7379, |e|=0.136364	      1.000000    236.290544   -348.589717   -182.947681    376.996507   -239.341694      0.000000    204.460969    -95.050401   -267.847059    -94.700801   -275.878339      0.000000      0.000000      0.000000    -53.301321    379.553148    214.824805		839
W= 89.77633, xmin= -0.00126, parasitic=0.7430, |e|=0.136364	      1.000000     91.640898   -170.433195    117.412749   -179.328171    155.171517      0.000000    123.882202   -242.948956    -51.680622    232.021944   -146.333999      0.000000      0.000000      0.000000    116.477171   -343.268285    178.759475		840
W= 89.75840, xmin= -0.00136, parasitic=0.7375, |e|=0.136364	      1.000000   -250.278285    169.956263   -162.196152    235.768754   -198.021205      0.000000   -138.289387    429.165352    390.585258   -275.776681    247.512956      0.000000      0.000000      0.000000    132.320193   -421.535700    170.965243		841
W= 89.75304, xmin= -0.00139, parasitic=0.7308, |e|=0.136364	      1.000000    -90.707320    385.663080   -270.906627    279.645064    265.293447      0.000000   -236.539059    269.465911    142.601303   -435.290718    203.107536      0.000000      0.000000      0.000000    113.343520   -378.049107    129.425463		842
W= 89.78530, xmin= -0.00121, parasitic=0.7467, |e|=0.182973	      1.000000    384.215071     31.687593   -240.784991    -63.173341     17.058034      0.000000    -24.141744   -207.674191    209.023526   -129.881291   -106.312473      0.000000      0.000000      0.000000    -89.931298    240.870189    -90.959211		843
W= 89.75508, xmin= -0.00138, parasitic=0.7338, |e|=0.226784	      1.000000    328.984943   -389.856903    254.786616   -363.524161      3.825250      0.000000    183.706177   -235.526106   -443.927810    289.766340    224.739756      0.000000      0.000000      0.000000     92.468251   -138.447858     43.263378		844
W= 89.75507, xmin= -0.00138, parasitic=0.7317, |e|=0.136364	      1.000000    -85.654556   -442.630392   -126.436622    437.649660    160.246197      0.000000    182.714786   -122.110411   -413.301971    -40.324615    103.738426      0.000000      0.000000      0.000000    -48.665898    328.506996   -253.035245		845
W= 89.77363, xmin= -0.00128, parasitic=0.7397, |e|=0.136364	      1.000000   -371.821425    257.747621     82.766619    111.175067    432.183121      0.000000   -131.833715    348.602059    443.363545    220.043086    219.245071      0.000000      0.000000      0.000000   -192.447270    350.481513   -433.848658		846
W= 89.77423, xmin= -0.00127, parasitic=0.7409, |e|=0.136364	      1.000000    175.439005    278.021173   -231.297272     23.984453    283.093981      0.000000   -290.774485    362.932555   -262.941282   -438.654489    -19.283335      0.000000      0.000000      0.000000    255.676114   -449.354971    267.771548		847
W= 89.77295, xmin= -0.00548, parasitic=0.7403, |e|=0.145037	      1.000000    449.685679    447.598991   -260.812361    -97.389688     99.847634      0.000000   -395.633212    313.802330    179.843808   -349.867959    291.285136      0.000000      0.000000      0.000000    -97.060902    317.174411   -193.610157		848
W= 89.76360, xmin= -0.00133, parasitic=0.7389, |e|=0.136364	      1.000000   -449.631412     72.074069   -101.901764   -279.976529    302.002115      0.000000    -98.724315    326.295050    419.716252   -251.099161    -32.177212      0.000000      0.000000      0.000000     48.921048   -330.440302     20.871813		849
W= 89.77673, xmin= -0.00126, parasitic=0.7422, |e|=0.270855	      1.000000    324.428643     62.811829   -199.941674    171.908440    -93.133311      0.000000    -67.613868   -107.750639   -254.212827    176.137606   -365.329479      0.000000      0.000000      0.000000    -89.068953    352.017845    -61.016233		850
W= 89.75245, xmin= -0.00139, parasitic=0.7289, |e|=0.136364	      1.000000   -356.184108    358.968673   -338.461695     -5.432900    327.182654      0.000000   -149.157520    353.638732    161.494237   -236.676777    348.316637      0.000000      0.000000      0.000000    159.432346   -397.769575    125.250528		851
W= 89.77778, xmin= -0.00125, parasitic=0.7465, |e|=0.199008	      1.000000    448.846044    -89.402733   -410.802022    370.471482    362.515053      0.000000    -20.100072   -216.085076    155.006270    273.173658    197.286366      0.000000      0.000000      0.000000     65.522034   -284.517447     83.599234		852
W= 89.78717, xmin= -0.00120, parasitic=0.7492, |e|=0.140954	      1.000000    370.536308   -351.142790     52.431313    402.777371    440.482806      0.000000     85.300673   -105.788811   -119.759096     18.745954    276.202127      0.000000      0.000000      0.000000    -76.535215    310.874584   -227.613317		853
W= 89.77773, xmin= -0.00125, parasitic=0.7468, |e|=0.136364	      1.000000    180.651231    352.721494    393.097049     82.937500     -7.290543      0.000000   -315.303749    448.274186   -262.590332    128.223240    297.744665      0.000000      0.000000      0.000000    113.265406   -281.314656    121.917290		854
W= 89.75019, xmin= -0.00141, parasitic=0.7417, |e|=0.136364	      1.000000     71.198885   -316.960761   -121.422688   -165.642317     -9.614555      0.000000    162.850142    -55.098186    363.508012     44.435837    142.261526      0.000000      0.000000      0.000000     27.036709   -343.066199    -28.361750		855
W= 89.75873, xmin= -0.00132, parasitic=0.7483, |e|=0.136364	      1.000000    161.701438   -343.756764   -336.949343    -91.675844    129.887661      0.000000    203.544537   -214.350901   -408.184151     62.161599    298.741355      0.000000      0.000000      0.000000     30.033941    277.844574    -86.895457		856
W= 89.75199, xmin= -0.00139, parasitic=0.7466, |e|=0.167750	      1.000000    171.059736    130.719336   -109.675951   -254.696279   -130.401751      0.000000    -33.232926    -57.434878     56.994624   -165.466436    -74.459790      0.000000      0.000000      0.000000     93.044041   -386.609008    -61.194658		857
W= 89.75292, xmin= -0.00139, parasitic=0.7296, |e|=0.136364	      1.000000    225.438365   -170.290606   -253.345252    274.559250   -160.788576      0.000000     65.095442   -191.295147    132.204662    -64.056050   -103.891781      0.000000      0.000000      0.000000   -196.356353    435.038772   -118.851260		858
W= 89.75535, xmin= -0.00138, parasitic=0.7390, |e|=0.183299	      1.000000   -263.368850     -0.447842    397.539434   -437.090304   -422.461145      0.000000      2.307126    228.750825    -61.692965   -148.712134    287.200983      0.000000      0.000000      0.000000   -100.694334    322.431766   -314.262643		859
W= 89.77035, xmin= -0.00128, parasitic=0.7462, |e|=0.136364	      1.000000      2.633330   -155.515412    324.841080   -308.372512     78.480529      0.000000    129.871651   -148.888961    241.999836   -116.238282   -395.193371      0.000000      0.000000      0.000000    -11.448473   -130.533449     53.330247		860
W= 89.76003, xmin= -0.00135, parasitic=0.7496, |e|=0.242656	      1.000000    391.791539   -361.360804     83.662924    274.428618    122.685245      0.000000      6.733423   -196.278951    347.476943     70.317181    401.583743      0.000000      0.000000      0.000000     98.636374   -407.598838    232.579486		861
W= 89.78285, xmin= -0.00122, parasitic=0.7451, |e|=0.136364	      1.000000    383.372890    -57.534364   -366.461070    235.232174    111.459555      0.000000    108.253920   -431.891890    146.297058    445.772530   -311.723819      0.000000      0.000000      0.000000   -185.771270    369.958048    -56.736909		862
W= 89.76721, xmin= -0.00131, parasitic=0.7389, |e|=0.136364	      1.000000   -290.577197    210.896263    382.632371   -136.502812   -432.159744      0.000000   -122.342339    402.492408     35.104450   -439.115862     36.700224      0.000000      0.000000      0.000000     83.292835   -207.243245    185.456441		863
W= 89.78336, xmin= -0.00122, parasitic=0.7489, |e|=0.140482	      1.000000   -247.030309   -282.426456   -140.034382   -172.831428   -180.441799      0.000000    -90.000159    391.367084   -352.867650     63.843243    -87.641137      0.000000      0.000000      0.000000     67.489944     -8.313694    140.183147		864
W= 89.75308, xmin= -0.00139, parasitic=0.7238, |e|=0.136364	      1.000000    206.332543    -54.499389   -133.493155     -7.819373     52.337029      0.000000   -235.030542    383.569448     21.025142     56.001328   -115.285655      0.000000      0.000000      0.000000     93.848093   -308.288248    101.720875		865
W= 89.75779, xmin= -0.00136, parasitic=0.7454, |e|=0.144758	      1.000000    200.306607    255.590504    381.347723    141.413410   -304.720775      0.000000    -29.614554   -260.469303    251.801238    385.007402   -242.457290      0.000000      0.000000      0.000000     80.652433   -381.678931    160.673078		866
W= 89.76242, xmin= -0.00134, parasitic=0.7371, |e|=0.136364	      1.000000     77.722711    -86.971602    193.311825     74.706530    234.319617      0.000000    139.912103   -351.750781    372.731787    -19.339272    420.377912      0.000000      0.000000      0.000000     81.650052   -390.498080      5.668409		867
W= 89.76507, xmin= -0.00132, parasitic=0.7347, |e|=0.136364	      1.000000    189.576071    157.230012   -155.325038    344.448370    124.196619      0.000000   -361.278829    414.107221   -352.829893    284.543529    369.465417      0.000000      0.000000      0.000000    -20.790484    215.156854      8.632508		868
W= 89.76240, xmin= -0.00133, parasitic=0.7321, |e|=0.136364	      1.000000     89.676350    315.839326    355.012108    216.340528     33.327831      0.000000   -268.989728    322.409452     -7.192716   -419.758319    350.486459      0.000000      0.000000      0.000000     66.799182   -156.212655    -84.392037		869
W= 89.77238, xmin= -0.00128, parasitic=0.7390, |e|=0.136364	      1.000000    380.984166   -413.105168    338.139896    312.253035    344.507284      0.000000    216.156208   -447.911937   -159.984103   -340.167040      5.746014      0.000000      0.000000      0.000000    -74.874497    296.542624   -202.321353		870
W= 89.76201, xmin= -0.00134, parasitic=0.7341, |e|=0.136364	      1.000000   -294.766232     69.858495   -218.464765    402.192573   -264.953826      0.000000    -84.124925    338.158033    268.947302     83.683095     12.069716      0.000000      0.000000      0.000000     98.887551   -427.877585    192.986271		871
W= 89.75007, xmin= -0.00141, parasitic=0.7474, |e|=0.136364	      1.000000    103.773049   -331.072807    341.075531   -441.403545    317.594263      0.000000    169.270639   -376.025425    305.659000    398.892402   -356.443990      0.000000      0.000000      0.000000    101.274225   -336.429679    149.570248		872
W= 89.76394, xmin= -0.00132, parasitic=0.7374, |e|=0.136364	      1.000000    225.318346   -436.765438     49.019898    265.934791   -380.003422      0.000000    434.812981   -360.690896    435.519562    -19.125308    -76.589391      0.000000      0.000000      0.000000    -46.781517   -165.606394    -24.984901		873
W= 89.76656, xmin= -0.00131, parasitic=0.7434, |e|=0.141344	      1.000000    160.398453   -405.919586   -428.977782     98.062246   -318.922999      0.000000    103.330732   -132.560081    139.853406   -186.256079   -254.254544      0.000000      0.000000      0.000000    108.060942   -269.000817    359.340445		874
</code></pre>
<p>It seems there is wall at around 89.75°.
Searching with just a single set, here Base3, but cycle length 4, we can crack the wall at 89.8° easily.</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion3 -b Base3 -I4:-30:30:9009100 -W89.8 -E2
W= 89.86788, xmin= -0.00041, parasitic=0.7091, |e|=0.225159           1.000000    -21.550950     22.150443    -23.234922     27.109141     14.784590    -26.720576     25.644275     16.936565     -0.174068            1
W= 89.81867, xmin= -0.00025, parasitic=0.7160, |e|=0.300979           1.000000     -9.290347     15.266158     28.133391      3.132758    -28.169615    -29.262208     22.480675     29.274416     -0.468860            2
W= 89.82651, xmin= -0.00091, parasitic=0.6358, |e|=0.310630           1.000000    -16.680274     28.516994     17.517194      2.270809    -15.411877    -12.730612      9.872798     10.848545     -0.086465            3
W= 89.81599, xmin= -0.00044, parasitic=0.6265, |e|=0.295830           1.000000     10.955115    -17.603220    -27.258943      7.150417      5.663092    -14.730837      6.980663     24.991932     -0.271138            4
W= 89.85637, xmin= -0.00046, parasitic=0.6959, |e|=0.256590           1.000000    -26.482132      2.962826     24.030938     -2.445292    -26.511650      7.746223    -18.396153     -7.833505      0.085050            5
W= 89.80763, xmin= -0.00068, parasitic=0.6620, |e|=0.301646           1.000000     19.824763    -29.680256    -15.473830     23.823445     -2.306383    -26.688272      7.929274     29.098648     -0.283880            6
W= 89.80714, xmin= -0.00092, parasitic=0.6739, |e|=0.299392           1.000000    -12.331869     20.126704    -23.111860     11.302939     20.010315    -25.786546     17.178563     15.762367     -0.070204            7
W= 89.84960, xmin= -0.00063, parasitic=0.7461, |e|=0.268872           1.000000     -7.603626     10.679853    -29.301832     12.954437     20.152366    -23.915235     29.865162     11.602482     -0.001469            8
W= 89.84422, xmin= -0.00065, parasitic=0.7307, |e|=0.303937           1.000000    -13.885144     14.911464    -14.700504     22.743812     -2.363734     -8.051823      7.005574     10.530004     -0.027663            9
W= 89.82078, xmin= -0.00132, parasitic=0.5882, |e|=0.305680           1.000000     15.158868    -25.404061     28.971863     21.569701    -18.690964     18.349051    -22.030124    -26.690513      0.207021            10
W= 89.82334, xmin= -0.00049, parasitic=0.7184, |e|=0.427376           1.000000     -6.954953     16.433828     15.029121    -13.704276      6.515383    -26.274199     24.754386     12.097359     -0.173291            11
W= 89.88137, xmin= -0.00024, parasitic=0.7432, |e|=0.295437           1.000000      7.262741    -11.649749     22.341400    -14.928997     -9.574326     13.426792     -7.244463    -15.623951      0.120618            12
W= 89.86857, xmin= -0.00032, parasitic=0.7175, |e|=0.276197           1.000000    -13.620631     19.907782     26.923662    -20.557744     -3.543270     21.066008    -18.940960    -23.482241      0.200029            13
W= 89.80625, xmin= -0.00079, parasitic=0.6863, |e|=0.369989           1.000000    -20.947224     22.497142     11.759144     -8.378217     -6.313245     15.155436    -29.777962      4.734468      0.071660            14
</code></pre>
<p>Searching with two sets, Base3 and Bas4 with a cycle length of 4.</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1  1 1  1 1 1  1 1 1 1 : 0 1 1  1 1 1  1 1 1 1 | stabregion3 -l- -bBase3:Base4 -I4:-30:30:420900 -W89.7 -E2
W= 89.80806, xmin= -0.00030, parasitic=0.7245, |e|=0.242804           1.000000    -23.653150      4.087419     -2.624899      9.239985    -22.223554     22.035516     17.850371     -0.790646      0.853570      0.000000      0.928318     24.753337    -16.354284     25.818837      9.891058     22.367822    -11.503872    -10.902172    -11.759164               1
</code></pre>
<p>Also</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1  1 1  1 1 1  1 1 1 1 : 0 1 1  1 1 1  1 1 1 1 | stabregion3 -l- -bBase3:Base4 -I4:-30:30:420900 -W89.7 -E2
W= 89.75227, xmin= -0.00045, parasitic=0.6927, |e|=0.470887	      1.000000    -24.203684     -2.223885      4.450252     -8.735210     26.407632    -16.467015     11.523721     21.325258     -0.892416      0.000000      5.257301     21.505604     25.831487     -1.041146      2.642392    -18.692215     15.856381     25.846774     -8.535905		1
W= 89.71337, xmin= -0.00040, parasitic=0.6416, |e|=0.196966	      1.000000    -24.756296      6.673275    -19.010308      8.257182     19.495150     26.081215    -17.066142    -26.258851      2.549254      0.000000     -0.593324     22.777924     -7.901680     -2.005563      3.981381     29.795214    -18.536152    -13.411063    -17.416523		2
W= 89.70671, xmin= -0.00250, parasitic=0.4225, |e|=0.136364	      1.000000     -5.797825     -9.446068     18.981858    -26.157092    -19.257872    -13.368129     15.727922     10.140176     -1.491513      0.000000     18.601010    -24.158919     18.397668    -29.228242      5.283137    -23.811120     14.101358     11.379494     14.737032		3
</code></pre>
<h2>2. Order 4<a id=order4></a></h2>
<p>Again, we search with random numbers.
We hit the wall at around 88°</p>
<pre class="line-numbers" data-line=41><code class="language-bash">$ echo 1  1 1  1 1 1 : 0 1 1  1 1 1 : 0 0 0  1 1 1 | stabregion3 -l- -bBase4:Base5:Base6 -I3:-450:450:98290900 -W87 -E2
W= 87.02497, xmin= -0.03086, parasitic=0.5956, |e|=0.096000           1.000000   -114.590943   -404.577252     64.446221    432.796994     57.298391      0.000000     91.151311   -278.400452   -105.765726   -164.922269    232.357446      0.000000      0.000000      0.000000    128.709172   -102.964931    313.083632           1
W= 87.95308, xmin= -0.01636, parasitic=0.6153, |e|=0.243670           1.000000   -430.107706   -132.409325     37.962518    -20.297211     23.266032      0.000000     23.355583    336.661612    125.839022     28.249176     51.319785      0.000000      0.000000      0.000000    -78.834317   -171.318204    232.405028           2
W= 87.70257, xmin= -0.01896, parasitic=0.5607, |e|=0.326332           1.000000    310.143995     77.886355    312.540670    -75.018509   -145.879872      0.000000    -93.906028    228.343434     83.827317     58.500440    384.027834      0.000000      0.000000      0.000000    -42.515411   -348.361320    285.685820           3
W= 87.00292, xmin= -0.02878, parasitic=0.5257, |e|=0.096000           1.000000     87.740956   -319.231960   -208.480216     69.858811   -117.328398      0.000000     49.414046   -203.947947    427.953810   -399.753992    412.969963      0.000000      0.000000      0.000000   -238.365823   -184.778797    327.981547           4
W= 87.37720, xmin= -0.02087, parasitic=0.6011, |e|=0.096000           1.000000    -43.961199   -449.402795   -220.031253      9.509749   -211.738746      0.000000    -43.631705    415.911482   -344.421746    292.154537    100.844814      0.000000      0.000000      0.000000    269.532709    -49.043916   -197.173147           5
W= 87.85598, xmin= -0.01251, parasitic=0.6832, |e|=0.101562           1.000000     38.135065    203.927798   -357.980991    191.303382   -423.071089      0.000000    -21.718704     52.723947   -345.448541    213.001028   -219.788660      0.000000      0.000000      0.000000    285.528700    -47.813726    343.377014           6
W= 87.36880, xmin= -0.02678, parasitic=0.7163, |e|=0.202413           1.000000   -168.608297    178.031717   -394.844510    112.488236    252.997175      0.000000     -1.694270    115.526579   -265.842165    -85.436619   -129.736937      0.000000      0.000000      0.000000    208.578935    401.438515   -381.618837           7
W= 87.30025, xmin= -0.01820, parasitic=0.6588, |e|=0.211438           1.000000   -305.168482    -48.325254    257.192638    173.890032     34.090692      0.000000    147.036289   -399.105121   -291.345665   -215.759231   -441.799206      0.000000      0.000000      0.000000    193.455181    388.923690    278.435964           8
W= 87.23174, xmin= -0.01669, parasitic=0.6884, |e|=0.096000           1.000000    123.627673    296.033191   -318.812480    -95.711062     32.129532      0.000000   -102.771095    419.480581   -297.009436    413.277002   -352.446202      0.000000      0.000000      0.000000    243.264156   -145.727395    249.597598           9
W= 87.87304, xmin= -0.01604, parasitic=0.6344, |e|=0.096000           1.000000    -11.013322     31.185389   -336.294116   -310.798710    314.046656      0.000000    -55.563597    323.654788   -404.712997    -23.654273   -270.597575      0.000000      0.000000      0.000000    343.612914    397.624063    -61.451902           10
W= 87.53237, xmin= -0.01708, parasitic=0.6607, |e|=0.486064           1.000000   -362.996490     99.821165    167.274612    441.369297   -313.355799      0.000000     99.500323   -245.044654    348.986267   -143.366182    -50.459047      0.000000      0.000000      0.000000   -300.457715   -149.183124    193.491998           11
W= 87.04096, xmin= -0.01705, parasitic=0.7099, |e|=0.330738           1.000000   -360.222337   -404.389761   -362.051992    342.880140    -32.510596      0.000000     44.444163    187.461489   -385.698106    312.944436   -300.864895      0.000000      0.000000      0.000000    316.702836    -54.047596    153.661125           12
W= 87.01146, xmin= -0.02917, parasitic=0.5176, |e|=0.110568           1.000000   -217.036342    191.335541    -45.464371    242.873167    311.196330      0.000000    -41.199570    395.578602    208.745302     88.490299    437.215348      0.000000      0.000000      0.000000   -120.412958   -353.279456   -127.516959           13
W= 88.29304, xmin= -0.00985, parasitic=0.6908, |e|=0.206958           1.000000    353.669849     36.079797   -379.695870    395.713335   -307.398248      0.000000     30.645848   -439.060802   -350.837514    179.379452    164.867612      0.000000      0.000000      0.000000    330.508207    -32.186452      1.354752           14
W= 88.11264, xmin= -0.01484, parasitic=0.7296, |e|=0.186259           1.000000    304.338184   -278.933275    -49.451348    263.536612     -6.856192      0.000000   -123.177834    440.307300    -48.628642    112.335578    -33.598908      0.000000      0.000000      0.000000      2.811282     53.829433   -373.023752           15
W= 87.56666, xmin= -0.03925, parasitic=0.7279, |e|=1.224292           1.000000    219.569573     85.473978    -54.288654    159.228388   -310.294896      0.000000    -36.687660    -27.576232   -280.963738     18.919862   -223.192952      0.000000      0.000000      0.000000    178.330981    203.668635   -155.946166           16
W= 87.95462, xmin= -0.01741, parasitic=0.7284, |e|=0.096000           1.000000    -74.812870   -189.105171    -78.514263    306.795270    227.953784      0.000000    109.982597   -412.607919   -411.942930    269.403811   -262.203126      0.000000      0.000000      0.000000    335.719196   -119.784374    371.283272           17
W= 88.34664, xmin= -0.00959, parasitic=0.7236, |e|=0.168361           1.000000    343.926449    -26.242825    108.747566   -405.392335    237.502064      0.000000     -2.322370   -267.088211    388.958158   -191.911239    353.511959      0.000000      0.000000      0.000000   -285.004787   -124.113377    -54.519959           18
W= 87.54635, xmin= -0.01318, parasitic=0.7429, |e|=1.956541           1.000000    238.329503   -194.142708    358.948733   -304.639241    243.445271      0.000000    -54.406210    143.829735    364.619612    -34.809808    -72.599188      0.000000      0.000000      0.000000   -310.835552   -103.283768     49.501838           19
W= 87.01402, xmin= -0.03016, parasitic=0.5009, |e|=1.962797           1.000000    345.573078   -322.602419    254.476725   -371.532854   -237.534107      0.000000    -75.780780    182.440371    307.379341   -286.386388    115.730953      0.000000      0.000000      0.000000   -283.705612    269.823468   -418.764757           20
W= 87.64194, xmin= -0.01795, parasitic=0.6324, |e|=0.107281           1.000000   -376.641351   -184.044101   -377.274217     43.360736    437.292294      0.000000    163.065811   -414.605717   -411.228216     60.806356   -299.994282      0.000000      0.000000      0.000000    354.738529    406.007524   -158.640439           21
W= 87.28055, xmin= -0.02170, parasitic=0.5908, |e|=0.096000           1.000000   -165.064078   -378.627308   -347.246219    120.798576     99.912737      0.000000     84.054188   -261.821683   -436.341298     -2.092037    219.771447      0.000000      0.000000      0.000000    364.424565    238.657253   -401.461130           22
W= 87.81284, xmin= -0.02119, parasitic=0.7352, |e|=0.096000           1.000000    176.380864     -9.366615   -447.698079   -140.981870    194.982641      0.000000    -99.334960    357.904343   -444.314159    100.080760    -86.682067      0.000000      0.000000      0.000000    362.865347    415.096475   -431.505639           23
W= 87.72475, xmin= -0.01417, parasitic=0.7336, |e|=0.328705           1.000000    332.347434    261.841565    378.915178   -349.785088    434.537395      0.000000   -103.630921    262.881869    104.256847   -424.707866    386.950239      0.000000      0.000000      0.000000    -11.779782    100.554016    437.575901           24
W= 87.50210, xmin= -0.02541, parasitic=0.6171, |e|=0.096000           1.000000    -32.845987    228.877931   -292.570987     94.052168   -266.201101      0.000000    -90.719448    410.193567   -175.747129    325.178630   -348.116930      0.000000      0.000000      0.000000    113.217735     14.502198     -4.832868           25
W= 87.36613, xmin= -0.01884, parasitic=0.6551, |e|=0.132574           1.000000    -92.952699   -288.791478    285.004683   -259.611077     41.215386      0.000000     -4.234806    190.338739   -379.269562     96.724473    -43.868487      0.000000      0.000000      0.000000    240.981317    187.191166   -303.818360           26
W= 88.34658, xmin= -0.01307, parasitic=0.7270, |e|=0.172788           1.000000    330.405472   -119.741366    -24.340001   -153.700236    240.250619      0.000000     -1.164474   -228.024401    394.643924   -445.692944   -237.520452      0.000000      0.000000      0.000000   -289.264161    195.509360    298.139095           27
W= 87.45863, xmin= -0.02048, parasitic=0.6093, |e|=0.096000           1.000000    -86.971968   -218.546128   -101.093375   -398.688293   -264.998217      0.000000    -82.388984    447.532940   -259.801417    412.061023   -339.841191      0.000000      0.000000      0.000000    165.896466    181.276529   -189.858524           28
W= 87.12272, xmin= -0.01743, parasitic=0.6911, |e|=0.111601           1.000000    -95.457505   -313.781713   -428.904292    169.928655   -287.114838      0.000000     33.137762    -18.450344   -404.620994     -1.882487   -140.190659      0.000000      0.000000      0.000000    336.860343    382.074606   -227.634487           29
W= 87.21945, xmin= -0.02362, parasitic=0.5677, |e|=0.096000           1.000000     42.020558    268.809539    340.105003    -32.869936     49.832376      0.000000    -34.247755     93.230069   -372.979142    340.076578   -222.842733      0.000000      0.000000      0.000000    180.328398     29.570714   -445.871204           30
W= 87.93827, xmin= -0.01776, parasitic=0.7181, |e|=0.102101           1.000000   -315.955872   -199.530268    -40.123096   -186.679094   -431.649175      0.000000    141.990568   -391.737542   -420.399879    314.348690    209.975675      0.000000      0.000000      0.000000    334.350027    -38.195598   -105.986768           31
W= 87.06166, xmin= -0.03069, parasitic=0.6774, |e|=0.156184           1.000000    180.632193    -86.812693    -92.564502    418.373853   -175.049328      0.000000     82.897783   -400.920264    294.764614   -188.869329    193.274887      0.000000      0.000000      0.000000   -217.853214   -125.782776    -53.821131           32
W= 87.52805, xmin= -0.02395, parasitic=0.6402, |e|=0.156462           1.000000   -125.532851   -423.442497    336.980213     19.694606   -389.187708      0.000000     49.201810    -26.532678     83.722609    -76.208481      8.123086      0.000000      0.000000      0.000000    -90.713114   -136.194899    304.306747           33
W= 87.29400, xmin= -0.02670, parasitic=0.6268, |e|=0.470928           1.000000   -365.657541    211.579306    -11.810740    375.640536    -59.949785      0.000000    107.194203   -337.152460    273.888288   -316.670865    319.325641      0.000000      0.000000      0.000000   -184.024620     69.260357   -187.040952           34
W= 87.95866, xmin= -0.01623, parasitic=0.6182, |e|=0.188704           1.000000   -433.022710   -379.344866   -304.361366    -30.946236   -363.204602      0.000000     27.115621    328.966446   -277.744731    188.722757   -186.502114      0.000000      0.000000      0.000000    247.591271      5.731050    312.084085           35
W= 87.13339, xmin= -0.02920, parasitic=0.6058, |e|=0.249591           1.000000   -240.452128     70.229819   -439.403461     24.922522    394.249472      0.000000    -15.837123    221.058250   -149.218402    239.439473     14.779255      0.000000      0.000000      0.000000    186.546618   -185.102849    153.019429           36
W= 87.10912, xmin= -0.02936, parasitic=0.5829, |e|=0.133741           1.000000    427.836749    -82.187102    291.025529   -143.535710   -433.079483      0.000000     18.401583   -410.340076    391.573970   -155.258755    177.254616      0.000000      0.000000      0.000000   -350.252636     17.994911   -317.082854           37
W= 88.06039, xmin= -0.01130, parasitic=0.7443, |e|=0.185811           1.000000    216.099762    320.108636    441.102704   -449.061260   -262.822127      0.000000     14.686784   -315.892856    218.338192   -222.578973    403.471462      0.000000      0.000000      0.000000   -196.283422    -59.798121    -29.589634           38
W= 88.22693, xmin= -0.01021, parasitic=0.6923, |e|=0.096000           1.000000     35.828451   -328.699191    318.186213   -332.600977    271.827775      0.000000     86.456715   -436.046603    439.140267   -420.323900    425.783043      0.000000      0.000000      0.000000   -323.381427     -2.664708     -4.367368           39
W= 87.35088, xmin= -0.02624, parasitic=0.5890, |e|=0.096000           1.000000    -92.808749   -324.959106   -162.348503   -393.439757   -153.567075      0.000000    -10.731619    235.574304   -159.694717     37.951120   -375.138366      0.000000      0.000000      0.000000     88.586873    321.665311   -151.959701           40
W= 87.47055, xmin= -0.02304, parasitic=0.6644, |e|=0.096325           1.000000    -48.066121   -420.449548    287.266721    117.699116     30.518090      0.000000     68.878938   -285.840229   -133.058192   -136.642237    443.632242      0.000000      0.000000      0.000000    149.950375   -119.094235    302.690368           41
W= 88.22587, xmin= -0.01027, parasitic=0.6867, |e|=0.116964           1.000000    158.325012     36.900453   -221.617061    446.516651   -314.127679      0.000000     29.771091   -295.897263   -135.525813    156.630856   -361.795483      0.000000      0.000000      0.000000     62.306404    183.849819   -289.535496           42
</code></pre>
<h2>3. Order 5<a id=order5></a></h2>
<p>Searching for formulas with cycle length of 3.</p>
<pre class="line-numbers" data-line=17,30><code class="language-bash">$ echo 1  1 1  1 1 1 : 0 1 1  1 1 1 : 0 0 0  1 1 1 | stabregion3 -l- -bBase5:Base6:Base7 -I3:-450:450:98290900 -W79 -E2
W= 79.09728, xmin= -0.34272, parasitic=0.6603, |e|=0.126160	      1.000000     33.457820     78.330402   -378.077330   -101.957219   -386.459261      0.000000     39.470267   -360.908232     63.165373   -351.990454    412.564476      0.000000      0.000000      0.000000     -7.842920    326.606161   -444.991265		1
parasitic roots: zggev_.info=3
W= 79.27844, xmin= -0.48618, parasitic=0.7144, |e|=0.535846	      1.000000    279.169731     88.114385   -335.937707   -239.088127    -47.934349      0.000000   -222.775086   -167.468042     33.487602    164.547551   -106.172540      0.000000      0.000000      0.000000      1.646478    129.991022   -251.465341		2
W= 80.45768, xmin= -0.39566, parasitic=0.7353, |e|=0.163215	      1.000000    344.692026   -389.667996    228.933206   -247.307756   -348.667898      0.000000    -94.717599   -272.950918   -200.035479    275.292971   -150.167168      0.000000      0.000000      0.000000     22.275603   -138.720427    335.052508		3
W= 79.09577, xmin= -0.32366, parasitic=0.6217, |e|=0.363094	      1.000000    417.345502   -335.431664   -378.214389    321.369260    349.496618      0.000000   -278.433160    112.029456   -254.536004    301.536483   -299.010916      0.000000      0.000000      0.000000     41.684033     28.924410   -137.030458		4
W= 79.99073, xmin= -0.25909, parasitic=0.7309, |e|=0.158500	      1.000000   -184.873143    407.250915   -429.280754     31.377964   -279.207796      0.000000      6.377188    270.045573   -405.457531    138.034374   -268.233823      0.000000      0.000000      0.000000     68.629786     88.741830    -15.271299		5
W= 80.02766, xmin= -0.25877, parasitic=0.7416, |e|=0.445657	      1.000000   -380.904376     -0.687232    342.291258     60.743717     47.430314      0.000000    287.748911    134.910979    387.633817   -295.205331   -123.131662      0.000000      0.000000      0.000000    -34.560399   -177.277024    443.987839		6
W= 79.67605, xmin= -0.31441, parasitic=0.6503, |e|=0.230570	      1.000000   -317.233896    264.934011    -27.709313    176.216849   -145.693866      0.000000    162.201084     38.151483    338.242172     51.808005     91.554566      0.000000      0.000000      0.000000    -28.057876   -112.919782    136.758902		7
parasitic roots: zggev_.info=3
W= 79.91330, xmin= -0.28320, parasitic=0.6779, |e|=0.159393	      1.000000    115.220388   -141.883364   -340.751575   -322.418947   -220.447192      0.000000    -25.724036   -129.216213      4.526567    248.316214   -347.681616      0.000000      0.000000      0.000000      1.175674    194.761169   -253.800865		8
W= 79.32415, xmin= -0.32731, parasitic=0.6009, |e|=0.211226	      1.000000   -378.326326    284.879275    279.039087   -310.632862   -138.839043      0.000000    173.889257    224.205345   -147.291544   -398.993813    398.214470      0.000000      0.000000      0.000000     24.965088    -64.604562    261.465489		9
W= 79.96910, xmin= -0.26833, parasitic=0.6992, |e|=0.298203	      1.000000    413.316353     51.247535    299.704468     93.103156   -122.060427      0.000000   -276.044165   -314.428405   -200.496656   -311.813948   -154.941690      0.000000      0.000000      0.000000    -34.396227    169.005209   -355.000322		10
W= 79.70391, xmin= -0.28211, parasitic=0.6773, |e|=1.331917	      1.000000    429.952420    225.420891    -86.238711     26.151001    233.101558      0.000000   -400.720500     18.696210    333.493958    336.659578    413.264180      0.000000      0.000000      0.000000     -1.966934   -204.857096    251.979968		11
W= 79.83715, xmin= -0.34423, parasitic=0.6039, |e|=0.223272	      1.000000    321.973223   -252.490271    -63.971352    433.298910   -354.836180      0.000000   -154.732405   -165.236504    410.516765    -94.753595   -273.096992      0.000000      0.000000      0.000000    -77.320462     93.673679   -267.496013		12
W= 79.28053, xmin= -0.32600, parasitic=0.6136, |e|=0.213483	      1.000000   -336.880806    431.977775     97.372903    375.472394    224.144757      0.000000    142.154092     24.513593     99.198646   -100.821395    122.527440      0.000000      0.000000      0.000000     11.454072   -227.440677    338.341476		13
W= 79.04300, xmin= -0.33789, parasitic=0.5912, |e|=0.146490	      1.000000    257.921873    439.053524    291.363941   -375.153419   -181.787430      0.000000   -372.632730    256.056206   -196.984985   -286.614743   -164.718486      0.000000      0.000000      0.000000     33.791527    -92.564196    409.121108		14
W= 79.70536, xmin= -0.31670, parasitic=0.6625, |e|=0.588671	      1.000000    366.456237    342.700668    103.743653    392.490748   -430.349413      0.000000   -425.028282    310.142358    -56.255682    -93.921849   -133.445875      0.000000      0.000000      0.000000    -47.833884    113.617828   -401.219799		15
W= 79.30957, xmin= -0.28060, parasitic=0.7483, |e|=0.295184	      1.000000   -139.305560    361.809883   -150.560322   -131.915130   -303.569744      0.000000     58.754435   -106.446027   -283.690990    -71.715947   -291.577682      0.000000      0.000000      0.000000     32.099689    102.722446    -42.997485		16
W= 80.82336, xmin= -0.48174, parasitic=0.7381, |e|=0.138119	      1.000000    224.792636   -252.344311    243.580007    213.110826    238.723517      0.000000    -29.374913   -352.109614   -291.781431   -272.483055   -436.187747      0.000000      0.000000      0.000000     36.181355   -142.760911    349.850442		17
W= 79.60649, xmin= -0.28885, parasitic=0.6690, |e|=0.323377	      1.000000    449.766911     94.183875     74.158252    -97.799864   -440.446562      0.000000   -315.296293   -307.377094    412.848702   -268.182161   -315.356957      0.000000      0.000000      0.000000    -45.424301    -21.694704    193.552251		18
W= 79.29346, xmin= -0.28625, parasitic=0.7019, |e|=0.176173	      1.000000   -222.885904    229.980798    -46.585716    197.051110   -335.997265      0.000000     58.520110    391.079798    149.550416    289.378117     86.613311      0.000000      0.000000      0.000000    -34.504862      3.230495   -162.279569		19
W= 80.75001, xmin= -0.33134, parasitic=0.6969, |e|=0.297368	      1.000000   -365.929105    214.448643   -322.952827    -81.070685    354.320051      0.000000    215.313143    215.994007     16.807255    293.869762   -307.611782      0.000000      0.000000      0.000000     -0.353777    111.435373   -311.018450		20
W= 80.02301, xmin= -0.26221, parasitic=0.7373, |e|=0.137951	      1.000000    182.229747   -304.473160   -433.217357    205.341507    445.268388      0.000000     -7.949292   -251.930887   -128.060462   -394.005027   -219.695719      0.000000      0.000000      0.000000     24.769149    239.909156   -394.221446		21
parasitic roots: zggev_.info=3
W= 79.09743, xmin= -0.30363, parasitic=0.6633, |e|=0.251923	      1.000000   -194.191684    -79.245403    223.122969   -425.556219   -346.899054      0.000000    264.518601   -424.977279    -36.481242   -197.146656   -187.795491      0.000000      0.000000      0.000000     12.725739    -58.726349    357.083620		22
W= 80.86688, xmin= -0.24329, parasitic=0.7239, |e|=0.442601	      1.000000   -410.996499   -264.722432     -6.298539   -268.407297     -9.430052      0.000000    324.414189    370.457992   -362.371321     30.969562   -288.076091      0.000000      0.000000      0.000000     26.275405    133.900895   -170.630447		23
W= 79.31355, xmin= -0.28529, parasitic=0.6924, |e|=0.265648	      1.000000    357.837760   -348.500043    375.788624   -319.057845   -122.136410      0.000000   -197.169293     23.624199    176.596795    -44.294925   -133.468716      0.000000      0.000000      0.000000    -42.491669    -38.077520    105.083512		24
W= 80.57411, xmin= -0.26896, parasitic=0.6712, |e|=0.431450	      1.000000   -449.729511    134.667202   -369.245937    -35.901665    419.224338      0.000000    332.329101      9.662988   -409.660407    340.268237     99.029304      0.000000      0.000000      0.000000     62.151009     90.076514   -237.658501		25
W= 79.45852, xmin= -0.33286, parasitic=0.5870, |e|=0.316735	      1.000000   -306.160940    348.795025    173.137965    380.405940    416.832258      0.000000    189.182149   -191.987513     -3.326351   -144.403510    -16.465552      0.000000      0.000000      0.000000    -34.912302     50.072046   -288.807982		26
parasitic roots: zggev_.info=3
W= 80.30011, xmin= -0.28023, parasitic=0.6807, |e|=0.100862	      1.000000     22.676035   -428.219025    438.733596     60.269008     92.015755      0.000000     96.623684   -143.222366     62.968757    108.128332    102.556169      0.000000      0.000000      0.000000     -2.833522   -236.138597    444.633353		27
parasitic roots: zggev_.info=3
W= 80.57009, xmin= -0.31202, parasitic=0.6774, |e|=0.179548	      1.000000    -51.352390    -98.901551     38.645505   -156.285748    -77.808970      0.000000     68.938134    -15.338660    353.608655    444.727275    -27.128682      0.000000      0.000000      0.000000    -10.946021   -249.054818    428.453558		28
W= 79.62192, xmin= -0.30020, parasitic=0.6649, |e|=0.134359	      1.000000    204.724581   -170.609283   -173.639381    334.774005   -173.661147      0.000000    -30.613598   -372.301263   -440.648179   -248.176168   -437.501246      0.000000      0.000000      0.000000     16.724015    288.565556   -444.174526		29
W= 79.20402, xmin= -0.35740, parasitic=0.6262, |e|=0.555386	      1.000000    362.003551    259.792702   -174.766640   -351.167168   -228.617455      0.000000   -426.917897    446.242153    -58.628979    263.786209    198.282066      0.000000      0.000000      0.000000     -0.905920    116.084583   -259.633191		30
</code></pre>
<p>Seaching for formulas with cycle length 4.
It is surprising that a longer cycle does not lead to improved Widlund-wedge angles.</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1  1 1  1 1 1  1 1 1 1 : 0  1 1  1 1 1  1 1 1 1 : 0  0 0  1 1 1  1 1 1 1 : 0  0 0  0 0 0  1 1 1 1  | stabregion3 -l- -bBase5:Base6:Base7:Base8 -I4:-450:450:98290900 -W77 -E2
W= 77.31719, xmin= -1.58872, parasitic=0.4190, |e|=0.072993	      1.000000    -63.924296    152.539202    424.205447   -410.820169   -145.792159   -407.503903   -277.272573    204.114089    158.411847      0.000000    -36.214016   -162.429546    283.391163    224.822392   -142.651706    175.248847   -333.014347     88.390353    422.769862      0.000000      0.000000      0.000000     98.880458   -337.704966     63.578783   -382.528328    375.325672   -208.622533   -164.974065      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    121.325728     86.732212    254.913995    -92.187154		1
W= 77.20246, xmin= -0.37196, parasitic=0.3781, |e|=0.406271	      1.000000   -285.526494    427.665732    291.215838    259.317771    173.824345     92.171472     -9.226708    -86.358821   -111.008877      0.000000    185.274427   -238.350042    387.999858   -306.502369   -103.017717    300.403762    155.238714   -203.694067    342.023893      0.000000      0.000000      0.000000    447.774144   -332.849594    283.371959      9.765481    166.945248   -192.564883    305.047450      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000      7.275023   -254.466570    109.461156    169.910623		2
W= 77.10681, xmin= -0.57845, parasitic=0.1705, |e|=0.072993	      1.000000    179.910409   -334.620999   -219.230988   -311.902170    384.102029    112.703322   -416.872625   -148.338774     33.002927      0.000000    229.014548    122.725626   -214.829251     42.215568    229.679057    302.728418   -293.290557    370.942303   -404.945747      0.000000      0.000000      0.000000   -429.316246    218.538704    -70.648424   -213.324293    124.328236   -152.056481    169.424938      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     36.909394    355.382835    447.544476   -340.615542		3
W= 79.29190, xmin= -0.35630, parasitic=0.5932, |e|=0.101100	      1.000000     29.151573   -426.475828    380.236499    409.719518     83.672757    -35.858514    -49.178717     46.092619    301.861739      0.000000     79.095769     81.704871    431.742466   -176.098282    197.579945     42.110111   -257.711818      4.098061    242.809096      0.000000      0.000000      0.000000    -40.402949   -314.743122    434.842590    177.510954   -445.579152    233.658990   -362.022222      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     10.170908     83.667380   -135.656405     53.915414		4
W= 78.61266, xmin= -0.69100, parasitic=0.3558, |e|=0.126151	      1.000000   -328.228455    270.569043   -329.988766     37.364591    142.529328    -57.268126    199.236313    148.464087    391.465929      0.000000      4.228012    319.544972     38.447395    -76.956625    373.528552    293.325512   -364.671017    367.855910   -384.242251      0.000000      0.000000      0.000000     68.530274   -103.567677    174.203225   -237.088913    421.867210     95.077975   -316.410512      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     35.616055    162.868664    202.043071   -112.378387		5
W= 78.99183, xmin= -0.40697, parasitic=0.4630, |e|=0.115730	      1.000000   -334.324097    155.040778     16.706641    185.888614    438.802954    -87.808420     17.266244   -154.106284   -198.491885      0.000000     65.796247    270.236214   -339.792580   -340.069098    221.942368   -371.835416   -172.488944    191.116807    292.337093      0.000000      0.000000      0.000000    139.710922   -174.228512    327.437187    288.291307     43.998365    325.998249     42.870573      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    -30.276824   -445.194034   -295.997424    119.873296		6
W= 77.31936, xmin= -1.47741, parasitic=0.5479, |e|=0.132698	      1.000000    319.636069   -144.432344   -349.371663   -274.314439   -142.020690    325.855856     97.646001    441.450086    388.275594      0.000000    -80.157793   -400.947518    151.124766     97.921274   -157.990122   -316.359580    124.948827   -328.465316    392.574147      0.000000      0.000000      0.000000   -304.526137    428.252229   -445.188868    258.702345    101.068597   -445.736594    179.425044      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000   -252.910390    440.330462    -84.339279   -352.229022		7
W= 78.00905, xmin= -0.83881, parasitic=0.2412, |e|=0.072993	      1.000000   -176.658666    150.280819     54.128123     11.636740    236.294418    283.636341    327.569188   -419.484678     -0.985935      0.000000   -144.299850    180.255781    348.107799    357.379398     36.221719    279.626936    322.856582    -85.116952    104.105401      0.000000      0.000000      0.000000   -256.932053    361.561346   -445.113206   -155.660064   -428.696268   -190.206847    397.582672      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    115.754553   -256.257658    193.755723   -242.478796		8
W= 78.85299, xmin= -0.34165, parasitic=0.3297, |e|=0.094782	      1.000000   -362.636670     37.786527   -265.858167    -19.235420   -255.964383   -204.511248   -412.658701    113.081129     15.888196      0.000000     61.143571    118.217327    266.787118   -385.421989   -118.769542     24.388521   -133.294349    198.567273    315.901163      0.000000      0.000000      0.000000    291.723018   -361.697232    313.618674    440.918832    420.207339    284.166900    -37.502109      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000   -259.289665    407.758801   -278.186784   -192.695916		9
W= 78.27667, xmin= -0.41052, parasitic=0.3536, |e|=0.072993	      1.000000    138.514446   -304.002694    293.754684    -65.842456   -104.797112   -125.124889    303.650734    291.452368    -65.337142      0.000000    411.253083   -433.963021    359.150171   -104.434920    400.850482    269.685234   -139.222550     96.742392    151.585729      0.000000      0.000000      0.000000   -202.629516    292.543674   -317.402620   -368.108779    264.153937   -260.626503     -7.950191      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    120.869480    140.669206    370.578601   -391.796153		10
W= 79.30261, xmin= -0.97956, parasitic=0.4181, |e|=0.377625	      1.000000    288.415644    -60.385272    363.316879   -160.913042    -86.620748   -345.438266   -361.762462     60.578439    182.482755      0.000000   -226.828255    251.287592   -222.892779    310.432141   -439.755957   -127.785025   -322.467281    -10.103914    224.143191      0.000000      0.000000      0.000000   -162.051394    427.414041   -357.965355    395.602958   -418.357863     20.229181    182.773551      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     -7.187575   -391.828028    158.561389   -202.400992		11
W= 77.05618, xmin= -1.01316, parasitic=0.1606, |e|=0.127435	      1.000000    420.373711   -227.609119     34.024709   -355.589513    184.095576   -246.081046   -449.263646    331.590620   -443.225290      0.000000   -137.596333    192.621709   -418.363255   -118.998229    272.886541    137.916373    213.521180    221.161223    367.105370      0.000000      0.000000      0.000000    297.409339   -421.187251    431.997785    352.292129    266.607562    166.214182     38.287842      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000   -195.855301    133.909037   -382.367176    222.713749		12
W= 77.73044, xmin= -0.64037, parasitic=0.2537, |e|=0.072993	      1.000000    -54.967334    334.996278    200.602898    296.189408    428.021657    136.164960   -234.728094   -248.513248   -277.940379      0.000000   -232.741016    191.718736     63.760677    109.670042    -45.428155    -14.912225    -76.720101    420.185842     -7.035680      0.000000      0.000000      0.000000    116.022371   -366.948509    353.208766    113.889835    402.127564   -365.702000     21.207546      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000   -159.249015    290.467002   -109.821345    387.762707		13
phi=0.000000, zggev_.info=5
W= 77.05318, xmin= -0.50578, parasitic=0.3761, |e|=0.194028	      1.000000   -347.689184    158.531118   -289.152396    320.738257   -141.605443    365.935184   -124.792686   -150.990308   -193.835198      0.000000    202.644629   -361.137536     45.880824    -64.307293    -36.308832   -316.585252   -253.083249    246.359534   -281.861590      0.000000      0.000000      0.000000    394.875965   -375.605815     71.239399   -216.269292    441.452825    133.702702    -10.628158      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     54.648118    192.011528    336.432696   -403.676652		14
W= 77.68526, xmin= -1.54629, parasitic=0.4787, |e|=0.072993	      1.000000   -126.632810    -93.289364   -287.974428   -342.964537   -281.998157   -219.832764     95.516479   -424.750372   -252.725317      0.000000      7.150524    241.469775   -383.511770     -7.212056    -77.062952    -25.994521   -356.660567    330.795160   -327.152484      0.000000      0.000000      0.000000    -12.224174    422.226943   -271.746573   -371.084436    -74.219439     41.992470   -141.858443      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000   -126.077268    314.488675    213.089728    412.607801		15
W= 79.18787, xmin= -1.08965, parasitic=0.4015, |e|=0.193338	      1.000000   -291.067029    322.507595   -248.748945     -2.936432    441.777017    132.055434    408.351302    -34.598729    322.257911      0.000000    145.068681   -371.004680    170.738342   -105.582013   -406.044464    290.640341    217.440750   -366.124352   -339.776274      0.000000      0.000000      0.000000    -68.450828    294.208750   -293.357849   -399.553978   -435.483020   -395.273949      4.077777      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     14.736441    376.242012    138.418629     98.033262		16
W= 77.06706, xmin= -1.01822, parasitic=0.5289, |e|=0.072993	      1.000000   -372.905134    248.377337     42.775531   -270.641771    407.830042    385.543661   -305.748619    428.664930    193.733039      0.000000   -106.370715    317.629509    335.049076   -296.994306   -370.847366    151.025192   -283.469710    -63.677609   -230.117693      0.000000      0.000000      0.000000     40.137599   -315.199383    318.747537   -242.175742     69.975815    275.644496    429.747779      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000   -423.935710   -110.495395     25.826323    133.053558		17
W= 77.92628, xmin= -0.43734, parasitic=0.3108, |e|=0.212744	      1.000000   -161.136442    -50.274775    363.621797   -174.665952    399.798435   -299.287399    357.777690    204.540057    277.869615      0.000000    226.038075   -344.705501    443.435519   -315.053963   -138.555138   -198.372516   -446.081537    -65.825802   -373.600249      0.000000      0.000000      0.000000     84.723742   -443.002627    136.465786   -295.082707    -55.871021   -239.964214   -169.396325      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     68.130756    374.139665   -372.969490   -346.692878		18
W= 77.56906, xmin= -0.60422, parasitic=0.5022, |e|=0.072993	      1.000000   -121.641334   -191.893768   -254.903473   -136.620752    147.643156   -171.054076   -215.730425     70.279630    405.319363      0.000000    240.844837   -123.803566   -421.348785    351.012947    191.495863     57.349386    266.584944   -366.322913   -434.544756      0.000000      0.000000      0.000000     35.175866     39.602046    -58.668139   -440.615152   -178.069547    -87.855795   -255.434649      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    144.808592    292.999237    164.478211    -86.122942		19
W= 78.17350, xmin= -0.96823, parasitic=0.4927, |e|=0.113969	      1.000000   -424.592315     84.243289    295.299677   -254.588241   -283.233980   -427.099435   -378.096727    246.854222    317.339340      0.000000    104.703049    303.335952   -273.910548   -438.294334    -73.352098    228.030955   -124.589917   -380.404609   -422.116358      0.000000      0.000000      0.000000     99.025064   -128.313235    300.878670   -242.307276    145.786312    -40.844037    -75.051552      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     29.420834    448.055714   -174.897669   -207.682502		20
W= 79.78668, xmin= -0.60338, parasitic=0.4011, |e|=0.197512	      1.000000    417.109894     93.931877   -148.393258     14.323390     -5.085572   -347.403310   -439.803875   -297.855865   -429.483307      0.000000   -242.917177   -239.536420   -132.436580    171.601732    261.841782   -212.561514      7.138393    399.630049   -230.683467      0.000000      0.000000      0.000000    -85.737097    145.242619   -389.851701    218.281904   -449.000573    -97.281570    362.615262      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     24.411381   -393.360917   -196.093837    109.629459		21
W= 77.59583, xmin= -0.95061, parasitic=0.3826, |e|=0.115024	      1.000000    302.401160   -154.608949     35.951479   -391.356070     44.375212    292.217522   -205.035071   -218.702593    266.670171      0.000000    -73.366796     18.993399    439.180323    -49.192072    256.450208   -344.133297    -77.501292    299.663203   -312.993107      0.000000      0.000000      0.000000    402.497512    -76.579869     29.198805   -356.706573   -344.286858    228.518827    312.342324      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    233.413091   -377.008035   -413.497815    298.092688		22
W= 80.14187, xmin= -0.76930, parasitic=0.3247, |e|=0.276322	      1.000000   -180.190122    144.594609    402.234304    -99.030824   -352.917793   -355.507754    438.358503      8.909233   -213.339643      0.000000    113.978605   -137.152383   -413.580181     45.760240     -6.902753    -28.812879     -5.637229   -217.013303    -64.073091      0.000000      0.000000      0.000000     58.739842   -152.660537    343.217355   -231.168959    213.733713    246.015160     39.214811      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    -96.688417    201.732814    298.967074     88.255778		23
W= 78.29271, xmin= -0.60303, parasitic=0.5917, |e|=0.293978	      1.000000    175.984424    329.143187    407.751804   -111.995979     16.683731    -67.201787     32.277279   -243.931858   -142.505293      0.000000   -143.546702   -321.114033     -6.149868      1.496219    419.868815    -48.610453    -56.840906   -392.348912    -73.188336      0.000000      0.000000      0.000000     40.536811   -253.524556    347.591519    331.377898   -435.096852    -17.782399   -284.004906      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     25.204845   -411.168623    297.100744   -449.741731		24
W= 78.39938, xmin= -0.77866, parasitic=0.1702, |e|=0.126722	      1.000000   -316.230641    231.757052    431.218282    233.835434    200.543620   -206.046564    201.345743    -62.799664   -161.637647      0.000000     78.689535     36.279981    132.865287     89.457871   -229.438496   -159.166432   -228.626990    342.793651     42.196692      0.000000      0.000000      0.000000     22.959916   -255.710304    253.437252     66.513918   -102.735657   -132.269324    438.256353      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000   -114.352614    393.111577   -253.463290    257.072565		25
W= 78.21180, xmin= -0.67503, parasitic=0.2042, |e|=0.072993	      1.000000    441.777742   -393.738741   -191.036815   -372.464607    206.541888    324.787111    255.280146   -370.837965   -429.101713      0.000000    238.615279   -162.341385    169.287281   -247.976993   -105.464546   -277.297865   -196.392479    108.434406   -147.067242      0.000000      0.000000      0.000000    432.505488   -310.896941    368.148980     30.241632    379.311593    343.478140    -19.090153      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    -88.567619    392.714472    131.112974   -179.049305		26
W= 77.81978, xmin= -0.41211, parasitic=0.4821, |e|=0.216859	      1.000000   -340.348698     66.224890    170.001924     11.366284    321.263009    415.790229    218.988825    -87.779508    440.750157      0.000000    186.801558    206.800623    228.236041    325.427747    306.355539   -183.151793    113.448869    134.828379      7.191701      0.000000      0.000000      0.000000     -6.548407   -150.728405    104.650381    269.911890    -16.648468    -90.065335   -188.558131      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    -63.023664   -302.199103    -19.670416    146.245089		27
W= 78.03550, xmin= -0.41152, parasitic=0.4444, |e|=0.105478	      1.000000    206.066040   -301.352820   -389.470887    -12.068919      0.903988    114.415850    372.397510   -266.384967    236.034206      0.000000     29.938618    -56.086163    -84.796671     70.019522    157.328628     60.182484     36.585734   -250.923683    370.432035      0.000000      0.000000      0.000000     20.547555     91.919437   -100.615499    181.763173    -53.808712   -270.486267   -271.810946      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    -29.363968    -52.748025    121.210329    100.380842		28
W= 77.57594, xmin= -1.01125, parasitic=0.5698, |e|=0.072993	      1.000000   -307.227646     -4.851863      9.644946   -163.656339   -407.876370    261.372548    419.383742   -407.299206    360.028937      0.000000    -49.880451    170.384492   -430.348013   -338.261508    117.216186     63.082469     45.446565     41.460353     51.567640      0.000000      0.000000      0.000000    284.917360   -429.613170    316.458291    273.089097   -348.792419    445.367627    169.275394      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    -85.248735   -194.430252   -353.371271    165.409308		29
W= 77.33097, xmin= -1.05204, parasitic=0.1957, |e|=0.259934	      1.000000   -208.585849    174.541782    310.893955    -18.481602    -30.789398     23.813802    337.557709     48.877536   -366.400182      0.000000    137.894973   -315.634055   -354.829738   -412.870149    252.349018   -183.166358   -343.273189    311.617510   -409.876078      0.000000      0.000000      0.000000    184.786635   -378.055610    169.146393     47.623399    124.192397     28.570206    357.050760      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000    -90.157245    377.037175   -384.557507   -190.976840		30
W= 79.03226, xmin= -0.30832, parasitic=0.2638, |e|=0.815434	      1.000000    429.920178    -92.752839   -205.835975    398.268616    405.821311     84.726572    -67.761897   -315.005987    289.853661      0.000000   -384.183627    418.874593    347.292988    139.861484   -229.521648     99.934211     60.773520   -367.830520    -21.139895      0.000000      0.000000      0.000000     44.425342   -311.261912    322.972103   -319.342236    225.916961   -431.472258    -71.028716      0.000000      0.000000      0.000000      0.000000      0.000000      0.000000     86.921880     -9.219812    366.596872   -166.628741		31
</code></pre>
<h2>4. Order 6<a id=order6></a></h2>
<p>Surprisingly, adding more parameters does not necessarily lead to a higher Widlund-wedge angle α.
Here we allow three sets of formulas: Base6, Base7, and Base8 formulas.
However, this is in line with the observation that longer cycle lengths do not necessarily lead to better properties.</p>
<pre class="line-numbers" data-line=11><code class="language-bash">$ echo 1  1 1  1 1 1  1 1 1 1 : 0  1 1  1 1 1  1 1 1 1 : 0  0 0  1 1 1  1 1 1 1 |  stabregion3 -l- -bBase6:Base7:Base8 -I4:-450:450:98290900 -W64 -E2
W= 67.54653, xmin= -2.46612, parasitic=0.5638, |e|=0.058309	      1.000000    -88.446555    435.464456   -117.740537   -431.402050    214.618546     16.907333    162.333594    -21.472930   -418.266138      0.000000    171.876731   -338.514381    384.374933     59.087540   -162.330710    379.222400   -445.975632   -442.151579    312.069446      0.000000      0.000000      0.000000   -271.713762    380.919014   -329.856794    -60.590089   -412.918937    136.027252    152.041751		1
W= 64.83814, xmin= -3.16497, parasitic=0.4425, |e|=0.058309	      1.000000    -13.214485    134.980326     90.737944   -375.298865    304.552085    123.264925    110.473508    336.647326     50.727389      0.000000   -172.458823    399.626777   -400.442084    392.803025   -252.210321   -420.514298    -29.092094   -115.726488    297.995724      0.000000      0.000000      0.000000     96.084777    196.109788    -79.952175   -145.005340    147.510215     45.013689   -202.934025		2
W= 64.34274, xmin= -2.88622, parasitic=0.5019, |e|=0.058309	      1.000000    -43.778041    293.301196   -178.688029    182.343683    133.998989   -149.736899   -249.880365   -295.396109   -144.262864      0.000000    -83.988942     84.303367    161.245495    195.085171    249.182814   -424.079367    -50.096532      6.542937    433.178927      0.000000      0.000000      0.000000     81.942716   -279.026223    -18.440319    172.155883    213.959567    386.042922   -352.993916		3
W= 64.41311, xmin= -2.76947, parasitic=0.4988, |e|=0.058309	      1.000000    429.891274    332.262385   -336.350680   -280.434834     52.900637   -375.322783   -152.921586   -282.340165     63.225542      0.000000     80.491203   -352.851801    421.938873    216.833885    114.150522   -359.946617   -258.391128    256.745631   -126.615594      0.000000      0.000000      0.000000   -115.497855   -344.470656     37.223312   -114.557889    -59.885618    326.384695     14.538543		4
W= 64.33665, xmin= -3.07332, parasitic=0.6488, |e|=0.058309	      1.000000    134.092175    217.318859   -397.365587    370.105018    339.303002   -163.806734    330.121826   -332.689028     70.507036      0.000000     25.076819   -254.050534   -196.659641    -10.214147   -170.207937    105.575008    335.891065    -67.777670     16.093379      0.000000      0.000000      0.000000    -32.438014    286.067394    -93.826440    -13.404610   -301.722669    178.827710    171.832816		5
W= 64.78222, xmin= -3.35909, parasitic=0.4329, |e|=0.073306	      1.000000    403.394188    339.048191     90.094300   -140.819297    201.065155   -216.978836   -345.711095     39.509429    -98.524046      0.000000   -100.969837    111.776871     43.854476     92.511310    219.967596    -30.397284   -397.974992    189.923862     97.330512      0.000000      0.000000      0.000000     26.016899   -295.834138    147.260237    370.015930    -43.325532    237.149530   -423.817540		6
W= 66.93177, xmin= -1.88617, parasitic=0.4516, |e|=0.058309	      1.000000   -126.638516   -430.330631     -4.022733    283.138826   -393.089286   -435.958863    259.790162   -255.971412    308.804232      0.000000    131.006051   -145.692822   -136.717338    206.596022    240.530382   -395.592709    423.667941   -154.599125   -311.748053      0.000000      0.000000      0.000000    -39.719514    387.562166   -366.080407     84.543102    -43.267088     80.700395     29.356299		7
W= 64.11569, xmin= -2.93310, parasitic=0.4706, |e|=0.058309	      1.000000    150.749641   -435.186016    409.294732   -309.629994   -220.377965     -8.450577    301.074725   -372.794881     75.852452      0.000000   -138.089433    405.094666    152.478191   -418.003449    427.487475   -422.217037   -263.380139   -334.268276    339.059255      0.000000      0.000000      0.000000     38.992905   -387.255739    370.576963   -230.431679    372.031602     72.687390    137.678510		8
W= 64.06113, xmin= -3.30911, parasitic=0.5571, |e|=0.058309	      1.000000    335.002214    337.462483    120.588306    136.646226    -87.265866   -262.413750   -324.082102   -333.662698    277.402512      0.000000   -123.313017    159.569623    202.317900   -250.285578     23.196461   -333.387305    402.691354    -73.760062    -44.498508      0.000000      0.000000      0.000000      7.354448   -433.740933    293.521574   -259.613431   -295.945493    167.420198      8.751970		9
W= 66.51670, xmin= -3.01107, parasitic=0.4875, |e|=0.058309	      1.000000   -415.664580     82.204130   -120.182512     16.838608   -363.882405   -180.515630    -78.752113    224.649560   -357.884440      0.000000   -265.887790    206.933135    215.678197    162.319712   -300.128481   -232.539084    287.222433   -241.351815   -313.365902      0.000000      0.000000      0.000000   -160.390832    296.869658    113.018304     15.350409    102.678938   -145.161457     30.809011		10
W= 65.89447, xmin= -2.98383, parasitic=0.4138, |e|=0.058309	      1.000000    203.396305   -413.254224    245.371353    366.189841     45.955277   -147.202473    301.044792   -172.354110    163.230809      0.000000   -106.331614    322.640172   -432.138897   -175.940468   -305.607161    391.562160     23.691439    302.459051   -385.139379      0.000000      0.000000      0.000000    161.334155    121.074317    272.109080    342.539619   -192.304676   -374.611287   -171.117058		11
W= 64.76285, xmin= -2.94010, parasitic=0.6380, |e|=0.163260	      1.000000   -404.831074    185.848990     95.118830    315.634302    378.790824   -395.555921    421.589437   -294.825022    434.856462      0.000000     33.276794    -24.454388    295.128530   -375.693477    397.949591   -160.864320     12.132652    183.811852   -149.175939      0.000000      0.000000      0.000000    -38.148219   -332.125160    203.162050   -342.316718     37.675720    146.036335    151.888261		12
W= 64.25880, xmin= -1.40200, parasitic=0.4539, |e|=0.058309	      1.000000    392.972182    266.236598   -160.169463    135.205784   -211.214239   -361.915868    337.536101    114.105764     45.197783      0.000000    157.074879   -333.426847    332.735634   -190.196537   -213.019678   -444.927237    318.854045    398.794849    254.154167      0.000000      0.000000      0.000000    -25.674031   -392.890963    337.152707    105.922023     51.281352   -198.924836   -166.488368		13
W= 64.27878, xmin= -1.99496, parasitic=0.4347, |e|=0.058309	      1.000000    203.138291    324.292492    171.861769     82.162456   -391.201476   -194.809987   -440.096251    288.850666    310.671838      0.000000     90.783224   -335.441740   -210.825214   -197.878059    390.624001    432.223491   -155.461488   -167.681818    271.870019      0.000000      0.000000      0.000000    149.818852   -259.238452    321.361956    381.174450    221.561588   -415.386801   -315.450742		14
W= 67.10243, xmin= -2.87977, parasitic=0.5954, |e|=0.058309	      1.000000      2.058993   -110.707419     99.685895    322.733715    328.137822     40.996517   -180.101085    -29.076454    410.091143      0.000000     49.462312   -106.104590    133.283993   -172.886439    154.391392   -374.940887    -38.477206    214.364572   -306.195361      0.000000      0.000000      0.000000     53.725682   -367.444496    402.697528     66.984107    295.427300    -48.492721    134.265987		15
</code></pre>
<p>Compare this with the random search when only a <em>single</em> set of base formulas is employed.</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion3 -bBase6 -W70 -E2 -I4:-450:450:9819300
W= 71.55973, xmin= -0.93024, parasitic=0.3410, |e|=0.105361           1.000000     80.333367   -223.849863   -187.222768    247.089215    191.256628    267.993183   -435.182929    299.708939    390.863079            1
W= 71.15494, xmin= -1.02473, parasitic=0.4990, |e|=0.101590           1.000000    210.589744   -411.930721   -220.038817    444.698526   -403.951154    138.556920   -291.358926    -46.288660     93.732936            2
W= 71.16650, xmin= -1.94530, parasitic=0.5221, |e|=0.112169           1.000000   -153.999303    379.227582    110.422649   -255.016495    281.367423     49.043405   -132.769636     -6.089447     34.969255            3
W= 70.09362, xmin= -1.95606, parasitic=0.6986, |e|=0.100219           1.000000   -189.417638    359.033506   -165.808125    428.535094     26.131632    274.475489   -336.763730    406.544973    166.990216            4
W= 70.72116, xmin= -1.59629, parasitic=0.4165, |e|=0.096505           1.000000     90.976584   -213.406825    196.209245   -371.900940   -206.481614   -313.687606    433.190526   -413.337332   -299.204072            5
W= 70.85822, xmin= -0.52520, parasitic=0.6547, |e|=0.115250           1.000000     66.688945   -216.271079    206.978871   -365.336381   -161.258932    165.992101   -312.604055    317.891180    251.262966            6
W= 71.38589, xmin= -2.16498, parasitic=0.4507, |e|=0.090024           1.000000    415.505456   -304.680505     84.169731   -223.688647   -219.251824     71.296090   -120.618622    143.244295    108.274770            7
W= 71.02675, xmin= -2.35557, parasitic=0.5733, |e|=0.087825           1.000000    294.314160   -294.805531   -141.418955    230.704906   -108.969227   -146.551054    316.051677     89.910843    -91.319845            8
W= 71.35918, xmin= -0.98587, parasitic=0.6184, |e|=0.102140           1.000000     78.002401   -205.136731   -176.462764    340.751218     80.395471    160.343502   -302.565109    336.936158    103.006787            9
W= 71.49847, xmin= -1.11109, parasitic=0.5081, |e|=0.115140           1.000000   -109.401653    187.732547   -355.067729    300.840724   -135.494023    -75.913527    337.052275    110.343754   -270.237408            10
W= 70.67949, xmin= -1.29558, parasitic=0.4727, |e|=0.106940           1.000000    123.975438   -354.795782    171.012361   -240.362262   -169.758584    237.172610   -277.685793    195.966308    269.977209            11
W= 70.48881, xmin= -0.93909, parasitic=0.5908, |e|=0.090745           1.000000    219.955592   -392.118534   -179.887955    283.192780   -260.540073   -141.310752    302.365929    114.696990   -138.459134            12
</code></pre>
<h2>5. Order 7<a id=order7></a></h2>
<p>Formulas of order 7 constructed of three sets, Base7, Base8, and Base9, with meaningful Widlund-wedge angle α seem to be rare.</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1  1 1  1 1 1  1 1 1 1 : 0  1 1  1 1 1  1 1 1 1 : 0  0 0  1 1 1  1 1 1 1 |  stabregion3 -l- -bBase7:Base8:Base9 -I4:-50:50:290900 -W25 -E2
W= 34.51907, xmin= -9.52724, parasitic=0.7439, |e|=0.083714	      1.000000    -49.787006    -38.645505      6.246160     25.600818     43.250677      1.454365     25.173615     28.372818     13.979240      0.000000     10.626254     43.010267     40.567520    -20.218042     23.147959     -8.195217    -27.450269     19.901167    -27.594202      0.000000      0.000000      0.000000     -3.554666    -45.485097     38.440671     37.130445     39.256199    -34.162766    -18.724106		1
W= 31.26502, xmin=-12.43616, parasitic=0.5880, |e|=0.048209	      1.000000     17.492427     -4.576355      7.145668    -41.462552     -2.399962     49.740036     41.387687    -28.571193     35.850322      0.000000     10.418379    -49.184722     21.956006     41.467788     45.013661     31.890658    -17.710307     -6.767474    -42.963648      0.000000      0.000000      0.000000      1.433361    -40.024482     33.779467     28.591296    -42.366184      6.906117    -25.016493		2
W= 25.60398, xmin=-14.09364, parasitic=0.5808, |e|=0.048209	      1.000000    -33.900978     43.902329     22.952382    -10.148130    -41.708624      9.594444     18.687829     -1.742980     40.167387      0.000000    -26.121574    -39.982315     39.145232    -31.388292     18.670346    -19.611664    -19.833483     -7.050386     33.771190      0.000000      0.000000      0.000000     14.574235    -44.883959    -40.277183     -1.257618     41.553367     -9.948569    -24.297351		3
W= 29.25813, xmin=-36.49355, parasitic=0.7186, |e|=0.082148	      1.000000     36.079242     23.167975     24.316283    -23.288978     14.013669    -31.278675      5.780114    -47.703691     42.807861      0.000000     -8.448900     -4.274475    -45.690980    -20.973436    -44.588346     -5.167747     47.139403     25.063867     18.470264      0.000000      0.000000      0.000000     26.801371    -22.842860     13.478604     -1.270296     37.630920     -0.845685    -45.203890		4
</code></pre>
<p>More restrictive search for higher Widlund-wedge angle again with three sets.</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1  1 1  1 1 1  1 1 1 1 : 0  1 1  1 1 1  1 1 1 1 : 0  0 0  1 1 1  1 1 1 1 |  stabregion3 -l- -bBase7:Base8:Base9 -I4:-50:50:1290900 -W30 -E2
W= 34.37689, xmin= -8.91417, parasitic=0.6743, |e|=0.048209	      1.000000      4.249818     35.109286    -13.834333     -9.386971    -12.563943      5.293010     11.906956    -41.455168     -6.141531      0.000000    -17.869535     32.883018    -27.801967      9.501506    -49.219814     13.569190     28.023432     29.688017    -33.649409      0.000000      0.000000      0.000000     -2.709722     32.841005    -24.335179    -22.061307     20.227585    -39.047157     39.559018		1
W= 31.71833, xmin=-11.43678, parasitic=0.5273, |e|=0.095614	      1.000000     31.535698    -46.766962    -41.439363     16.826135     -1.883355     39.081585    -29.911468      3.617866    -14.884831      0.000000     11.742047    -40.615529     43.308705     34.206682     36.249833     19.661236     -7.762999     46.453214    -41.924208      0.000000      0.000000      0.000000     -3.375058    -32.868536     12.457608     37.780089     -8.923751     18.559303      1.650041		2
</code></pre>
<p>Formulas based on two sets: Base7 and Base8.
It seems that <em>more</em> sets make things <em>worse</em>.</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1  1 1  1 1 1  1 1 1 1 : 0  1 1  1 1 1  1 1 1 1 |  stabregion3 -l- -bBase7:Base8 -I4:-30:30:290900 -W39 -E2
W= 42.59231, xmin= -7.48266, parasitic=0.6977, |e|=0.089804	      1.000000     17.353636    -11.548404    -28.141561     11.698022      4.360216     22.844265    -23.504424     26.919319     -1.901065      0.000000    -14.062553     26.571709      4.320092     19.015367      3.690662      8.649977    -19.878004     21.482587      8.437867		1
W= 41.60076, xmin= -7.82422, parasitic=0.6617, |e|=0.060017	      1.000000      3.145439     22.492435    -15.171445     -4.284414     -6.983982    -22.997626     26.260758    -10.810490     10.135423      0.000000      4.330308    -28.335417      0.748223     17.922552     -6.132793    -22.534954     24.360752      3.006023    -11.082475		2
W= 42.41626, xmin= -7.50200, parasitic=0.6505, |e|=0.053776	      1.000000     13.188587     20.933224      6.926805     -3.639143    -20.359008     13.523800    -17.103283    -22.397818     -2.044400      0.000000    -11.735713     11.600722    -10.072907     26.319121    -19.862325     14.900879    -10.864651      6.660344    -10.787078		3
W= 46.08985, xmin= -6.57422, parasitic=0.7483, |e|=0.068898	      1.000000     13.158079     -4.290486    -23.471374     23.895990    -15.207723     13.820788     -7.758338    -23.925579     10.814226      0.000000      4.707507    -29.957935      0.000253     25.095827    -20.052777    -26.569959      7.896756      0.189629     14.705573		4
W= 40.47451, xmin= -6.45688, parasitic=0.6382, |e|=0.048209	      1.000000      9.059824     19.596926      2.229319     17.123296     12.158903    -10.941999     15.963138     29.162798      5.274658      0.000000    -12.264743     19.840437     -7.380504     12.375592    -27.204160    -12.223831     -5.544771    -18.323775     -0.110944		5
W= 40.92196, xmin= -6.07759, parasitic=0.6805, |e|=0.071077	      1.000000     24.284169    -21.359598    -29.922803     -2.615604      5.097248     -8.682417      9.780683    -25.064353     21.999485      0.000000     -2.320804      3.100529      2.624634     29.746889     -2.060858    -13.200658     29.521064    -25.590068     -6.071131		6
W= 42.50927, xmin= -6.62509, parasitic=0.7239, |e|=0.303188	      1.000000     27.651065      3.209499     21.345156    -18.378918     -3.153724     -2.164946    -21.005093     14.060494     26.611348      0.000000    -16.291830     20.771447     -3.531222     -7.414161     12.147053     26.107446     21.742979    -29.490991    -13.648093		7
</code></pre>
<p>Formulas based on the single set Base7 are quite easy to find and yield higher Widlund-wedge angle α.</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion3 -bBase7 -I4:-30:30:8290900 -W50 -E2 | tee /tmp/b741
W= 51.52616, xmin= -5.63113, parasitic=0.7324, |e|=0.082610           1.000000    -23.043095     14.603635     -6.724500     18.411629     -6.544309     10.354891    -25.605345     12.613725    -14.756356            1
W= 51.22919, xmin= -4.21733, parasitic=0.4866, |e|=0.093339           1.000000      6.458356    -24.228481    -20.055308     27.980043      7.571668    -17.165491     27.787403    -18.338537    -19.534220            2
W= 50.82603, xmin= -4.28453, parasitic=0.7409, |e|=0.079234           1.000000      6.185805    -17.055178    -10.293223     24.685373    -11.871361     26.058411    -19.780656     19.733129    -23.102061            3
W= 50.58450, xmin= -5.04173, parasitic=0.6872, |e|=0.079152           1.000000     -5.300128     14.277660      6.093794    -14.875046      7.028983    -24.942679     15.584798    -13.243981     19.633189            4
W= 50.04870, xmin= -6.57940, parasitic=0.7176, |e|=0.083041           1.000000     22.186644    -16.293885     -2.443787      7.916797      1.838857     -3.999582      6.475088     -6.550578      1.474010            5
W= 50.05823, xmin= -5.96069, parasitic=0.5732, |e|=0.094170           1.000000     11.913590    -22.673872      8.138947    -26.473259     17.210068    -19.775009     13.629897      3.041401      5.238668            6
</code></pre>
<p>So it seems that more base sets are detrimental for a larger Widlund-wedge angle.</p>
<h2>6. Order 8<a id=order8></a></h2>
<p>Searching with just two base sets: Base8 and Base9.</p>
<pre class="line-numbers" data-line=4><code class="language-bash">$ echo 1  1 1  1 1 1  1 1 1 1 : 0  1 1  1 1 1  1 1 1 1 | stabregion3 -l- -bBase8:Base9 -I4:-50:50:290900 -E4
W=  0.00000, xmin=-82.34054, parasitic=0.6835, |e|=0.067029	      1.000000     28.262869    -45.382614    -30.043501     33.285890     37.319181    -47.862164     34.379160     35.083759     37.933542      0.000000     48.422083    -37.469406    -16.634632     -4.907783     25.117292      5.620534    -18.126027     16.960134    -23.056917		1
W=  0.00000, xmin=-67.96211, parasitic=0.7484, |e|=0.368496	      1.000000      9.109440     31.656182     21.059681     47.629395     36.524408    -37.273181     40.656923    -25.979917    -42.338647      0.000000     35.448946    -47.846292    -42.903295     29.320589    -41.043557     14.631502    -43.518774     18.575699     -5.353672		2
W=  7.49330, xmin=-23.29545, parasitic=0.7281, |e|=0.045709	      1.000000     35.247213     17.449506    -18.164306     42.648299     21.328397    -34.784101     16.772620     -2.106495    -18.434175      0.000000     -1.089800    -25.052049     16.678354    -44.842543     13.810216    -24.851581     34.773218    -21.779917    -44.543455		3
W=  0.00000, xmin=-20.28801, parasitic=0.7465, |e|=0.079296	      1.000000     42.317278     46.772628     23.461713    -18.673073     34.490594      4.594882     10.750445    -14.390383     -3.416139      0.000000     -6.985513    -31.409845      8.367073    -46.166143     49.626392     26.598195     -4.547412     14.649090    -10.585631		4
W=  0.00000, xmin=-42.03990, parasitic=0.7352, |e|=0.071334	      1.000000    -38.627712     34.874651    -15.645782     14.061970    -14.536010    -25.001801     23.026256    -24.286294    -38.205960      0.000000     21.196157    -36.920536    -21.732125     41.064098     34.347675     -2.904305     14.780983     16.815697    -24.001789		5
W=  0.00000, xmin=-262.86237, parasitic=0.7211, |e|=0.107967	      1.000000    -32.418975     -7.524365    -48.244494     -4.091966     37.416440    -33.873666     31.127046     -5.515854      2.292268      0.000000     -3.337246     28.373696    -47.552983     -3.446929     13.253201      7.637490    -44.533423     24.230598     -1.100640		6
W=  0.00000, xmin=-24.61936, parasitic=0.7446, |e|=0.040882	      1.000000     -8.390462    -47.294168     21.252309     34.358762     -3.890763    -48.322150    -37.091336     -0.541233    -30.198073      0.000000     21.229063    -38.353983    -21.322983     37.655067    -32.371136    -46.034396     48.130404    -38.993196    -35.067601		7
</code></pre>
<p>The third method in detail.</p>
<pre class="line-numbers" data-line=14,48,49,52,63><code class="language-bash">l=4, offset=0, il=10, name=Base8
           1.00000000
          35.24721300     17.44950600
         -18.16430600     42.64829900     21.32839700
         -34.78410100     16.77262000     -2.10649500    -18.43417500
l=4, offset=10, il=10, name=Base9
           0.00000000
          -1.08980000    -25.05204900
          16.67835400    -44.84254300     13.81021600
         -24.85158100     34.77321800    -21.77991700    -44.54345500
linearComb(): l[0..2] = 4 4
lncOffset[0..3] = 0 10 20
fm based on LinearCombination, l=4, colLen=24
LinearCombination, p=8, k=8, l=4
               105.0000      -571.6777         0.0000         0.0000
              -960.0000      9368.3694     -6377.5303         0.0000
              3920.0000    -59358.0280     62436.1871      8170.5872
             -9408.0000    207305.4599   -276062.5564    -86713.2852
             14700.0000   -457707.4191    727850.3529    414734.8316
            -15680.0000    683486.5136  -1273616.5687  -1179014.5269
             11760.0000   -719090.5604   1563070.2849   2210062.2659
             -6720.0000    566297.0032  -1411006.4238  -2844601.8572
              2283.0000   -297247.4885    924598.1289   2812602.9819
                 0.0000     67517.8275   -379441.6256  -2053666.4415
                 0.0000         0.0000     68549.7509    963250.5525
                 0.0000         0.0000         0.0000   -244825.1083
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
               840.0000    -48473.5784     52717.5978   -127734.2136
                 0.0000     26861.3629    -77178.6372    -56654.8466
                 0.0000         0.0000     26771.4350    101717.5102
                 0.0000         0.0000         0.0000    -91844.6290
rho_0              0.000000000           0.000000000           0.000000000          -0.000000000        &lt;-----
rho_1               0.000000000            0.000000000            0.000000000            0.000000000    &lt;-----
rho_2               0.000000000            0.000000000            0.000000000            0.000000000    &lt;-----
rho_3               0.000000000            0.000000000            0.000000000            0.000000000    &lt;-----
rho_4               0.000000000            0.000000000            0.000000000            0.000000000    &lt;-----
rho_5               0.000000000            0.000000000            0.000000000           -0.000000000    &lt;-----
rho_6               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_7               0.000000000            0.000000000            0.000000000           -0.000000000    &lt;-----
rho_8               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_9              -0.040881881           -0.045708851            0.030952761           -0.013963007    &lt;-----
Parasitic roots of LinearCombination
        nr      real                    imag                    abs                     4-th root
            0      1.00000000         0.00000000              1.00000000                1.00000000
            1      0.72805888         0.00000000              0.72805888                0.92372272
            2     -0.05091917        -0.45717498              0.46000188                0.82354987
            3     -0.05091917         0.45717498              0.46000188                0.82354987
            4      0.44835329         0.00000000              0.44835329                0.81828594
            5     -0.08928272         0.00000000              0.08928272                0.54662797
            6     -0.04769271         0.00000000              0.04769271                0.46731853
            7      0.02637447         0.00000000              0.02637447                0.40299154
. . .
        10199        73.76601347              0.04215602,       -23.47581         0.02492
        10199        -2.22940150             -0.00096956,       -23.47581         0.02492
        10199         0.00000000             -0.00015400,       -23.47581         0.02492
        10199        -0.24830238              0.00063072,       -23.47581         0.02492
</code></pre>
<h2>7. Order 9<a id=order9></a></h2>
<p>We haven't yet created a Base10 set, so we couldn't test with two sets of base formulas.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/02-07-searching-for-tendler-like-formulas-p2</link>
		<guid>https://eklausmeier.goip.de/blog/2026/02-07-searching-for-tendler-like-formulas-p2</guid>
		<title>Searching for Tendler-like formulas, #2</title>
		<category>mathematics</category>
		<pubDate>Sat, 07 Feb 2026 18:10:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#order3">1. Order 3</a></li>
<li><a href="#order4">2. Order 4</a></li>
<li><a href="#order5">3. Order 5</a></li>
<li><a href="#order6">4. Order 6</a></li>
<li><a href="#order7">5. Order 7</a></li>
<li><a href="#order8">6. Order 8</a></li>
<li><a href="#order9">7. Order 9</a></li>
</ul>
<p>In continuation of <a href="https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas">Searching for Tendler-like formulas</a> here we search for further Tendler-like formulas.
This time we particularly watch for low error constants.</p>
<p>For reference, below are Widlund-wedge angle α and Widlund-distance δ for the original Tendler formulas and for Tischer's formulas.
See <a href="https://eklausmeier.goip.de/blog/2026/01-20-tendler-like-formulas-for-stiff-odes">Tendler-like Formulas for Stiff ODEs</a>.</p>
<table>
<thead>
<tr>
<th><em>p</em></th>
<th><em>l</em></th>
<th>abs(root)</th>
<th>α(Tendler)</th>
<th>δ(Tendler)</th>
<th></th>
<th>α(Tischer)</th>
<th>δ(Tischer)</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>3</td>
<td>0</td>
<td>90°</td>
<td>0</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>0.333333333</td>
<td>90°</td>
<td>0</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td>0.55371901</td>
<td>89.427°</td>
<td>0.004776</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>0.35406989</td>
<td>80.882047°</td>
<td>0.244157</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>5</td>
<td>4</td>
<td>0.42931855</td>
<td>77.477315°</td>
<td>1.421472</td>
<td></td>
<td>86.649352°</td>
<td>0.040844</td>
</tr>
<tr>
<td>6</td>
<td>4</td>
<td>0.52827598</td>
<td>63.245842°</td>
<td>2.933167</td>
<td></td>
<td>76.311756°</td>
<td>0.280752</td>
</tr>
<tr>
<td>7</td>
<td>4</td>
<td>0.66669430</td>
<td>33.531759°</td>
<td>10.179501</td>
<td></td>
<td>57.663061°</td>
<td>0.959187</td>
</tr>
<tr>
<td>8</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td></td>
<td>22.149242°</td>
<td>2.534082</td>
</tr>
</tbody>
</table>
<p>The new eTendler formulas have below characteristics.</p>
<table>
<thead>
<tr>
<th><em>p</em></th>
<th><em>l</em></th>
<th>abs(root)</th>
<th>α(new)</th>
<th>δ(new)</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>3</td>
<td>3</td>
<td>0.70756795</td>
<td>89.72423°</td>
<td>0.00164</td>
<td>worse root modulus, better δ</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>0.28351644</td>
<td>84.91216°</td>
<td>0.07106</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>5</td>
<td><strong>3</strong></td>
<td>0.48870093</td>
<td>77.81321°</td>
<td>0.42370</td>
<td>shorter cycle length, better α, better δ</td>
</tr>
<tr>
<td>6</td>
<td>4</td>
<td>0.29026688</td>
<td>71.63806°</td>
<td>1.03854</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>7</td>
<td>4</td>
<td>0.57300425</td>
<td>55.13529°</td>
<td>3.87902</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>8</td>
<td>4</td>
<td>0.61600197</td>
<td>none</td>
<td>15.05503</td>
<td>no other formula with α&gt;0.1 found</td>
</tr>
<tr>
<td>9</td>
<td><strong>5</strong></td>
<td>0.76270334</td>
<td>none</td>
<td>38.22753</td>
<td>cycle length &gt; 4 seems to be required</td>
</tr>
</tbody>
</table>
<p>We will see that when we prescribe the error constant we loose on Widlund-wedge angle, Widlund-distance, and parasitic root.</p>
<h2>1. Order 3<a id=order3></a></h2>
<p>We employ the program <a href="https://github.com/eklausme/c/blob/master/stabregion2.c"><code>stabregion2.c</code></a> for the search using random numbers.</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -b Base3 -I3:-10:10:59000 -r600 -W89.5 -E0.14
W= 89.56934, xmin= -0.00360, parasitic=0.6994, |e|=0.136364           1.000000      3.335559      2.623882      1.477945     -6.120679     -7.546915            1
W= 89.52794, xmin= -0.00397, parasitic=0.5910, |e|=0.136364           1.000000     -9.687612     -2.527196      3.336938     -7.423275     -9.724498            2
</code></pre>
<h2>2. Order 4<a id=order4></a></h2>
<p>Again, we search with random numbers.</p>
<pre class="line-numbers" data-line=4><code class="language-bash">$ stabregion2 -b Base4 -I3:-10:10:2000 -r100 -W78 -E0.096
W= 78.52669, xmin= -0.93122, parasitic=0.6049, |e|=0.096000           1.000000      6.174723      9.151434      1.293058     -4.412818     -8.263781     1
W= 78.52125, xmin= -0.62438, parasitic=0.2035, |e|=0.096000           1.000000      4.588593      0.467625      9.696157     -0.059481     -9.838954     2
W= 80.46735, xmin= -0.29149, parasitic=0.3093, |e|=0.096000           1.000000      4.642505      1.606047      6.561387     -5.370817     -9.787012     3
W= 78.66516, xmin= -0.52590, parasitic=0.2016, |e|=0.096000           1.000000     -8.725426     -2.189642      8.017470     -2.111142     -8.335239     4
W= 80.08353, xmin= -0.49374, parasitic=0.2710, |e|=0.096000           1.000000     -9.096624     -2.132855      3.516639     -1.567879     -4.539268     5
W= 78.00667, xmin= -0.46577, parasitic=0.1835, |e|=0.096000           1.000000     -8.004718     -2.377983     -7.135334      2.866952      6.301039     6
W= 78.59052, xmin= -0.73024, parasitic=0.2260, |e|=0.096000           1.000000      3.683475      2.871425     -4.932404      3.618247      7.881263     7
</code></pre>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -b Base4 -I3:-10:10:9000 -r600 -W80 -E0.096
W= 80.59363, xmin= -0.61309, parasitic=0.3071, |e|=0.096000           1.000000     -9.325420     -0.012520     -5.553564      1.195361      7.319080            1
W= 80.28302, xmin= -0.37801, parasitic=0.2860, |e|=0.096000           1.000000     -4.825342     -1.320631      4.961141     -3.047921     -6.726809            2
</code></pre>
<h2>3. Order 5<a id=order5></a></h2>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -b Base5 -I4:-1900:1900:899000 -r900 -W74.1 -E0.08
W= 74.31418, xmin= -1.68403, parasitic=0.2051, |e|=0.078685           1.000000  -1491.817515    395.126127  -1792.630306   1110.243650   1534.486280    784.959397   -966.016786   -701.824850   1226.864835            1
</code></pre>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -b Base5 -I4:-1900:1900:899000 -r900 -W74.1 -E0.089
W= 75.20646, xmin= -1.53885, parasitic=0.2110, |e|=0.087748           1.000000  -1252.368581    660.602768  -1231.700621   1033.954073    527.803206   -933.216358   1661.927947   1245.672615  -1554.875177            1
W= 74.33716, xmin= -1.37348, parasitic=0.1823, |e|=0.087133           1.000000    490.519477     66.562261   1860.739731  -1874.446795  -1668.188156   1420.240414  -1410.230961  -1001.645470    666.853183            2
W= 74.89894, xmin= -1.59237, parasitic=0.3850, |e|=0.081935           1.000000  -1624.672483    609.769408    755.177769   -180.897365   -346.208473    579.514095  -1030.370337   -951.801300   1012.218738            3
W= 74.74018, xmin= -0.61120, parasitic=0.3961, |e|=0.088743           1.000000   1736.941219  -1017.092362   1149.179193  -1528.840154  -1742.299332  -1839.828567    666.834218   -614.143367  -1453.277644            4
W= 75.53897, xmin= -1.36863, parasitic=0.2055, |e|=0.088627           1.000000   1712.818112  -1197.567020  -1443.226169   1087.898172    510.183732  -1455.596397   1304.210881   1870.252325  -1838.881617            5
W= 74.65602, xmin= -1.40860, parasitic=0.2517, |e|=0.085185           1.000000  -1096.204252    144.280540    757.228488   -848.965002  -1310.688236  -1108.842315   1295.166221    -46.098896  -1811.457701            6
W= 74.45184, xmin= -0.92923, parasitic=0.2351, |e|=0.087047           1.000000  -1581.852536    387.822554    872.573450  -1302.307854  -1811.708139  -1562.666218   1068.728308   -619.933340   -938.558801            7
W= 74.59584, xmin= -1.23390, parasitic=0.1926, |e|=0.088355           1.000000  -1767.163161   1215.328023   1345.966971  -1337.707137  -1173.589445   1710.693208  -1082.658330   -807.728682   1214.264965            8
W= 74.19220, xmin= -1.41392, parasitic=0.1600, |e|=0.080024           1.000000   1584.538390   -438.669678  -1498.637018    867.319895    954.161418  -1353.140573   1510.461700   1404.023283  -1230.044727            9
W= 74.26498, xmin= -1.25002, parasitic=0.1660, |e|=0.085538           1.000000   1808.097183  -1026.827791  -1160.187592   1094.737163   1242.728791  -1874.076961    918.040804    636.847498  -1332.949513            10
W= 75.25440, xmin= -1.14900, parasitic=0.1374, |e|=0.083791           1.000000   -872.499296    313.303682    940.672074   -649.843634   -448.661418    840.303013  -1015.153151   -853.675570    636.374128            11
</code></pre>
<h2>4. Order 6<a id=order6></a></h2>
<pre class="line-numbers" data-line=4><code class="language-bash">$ stabregion2 -b Base6 -I4:-1900:1900:1099500 -r900 -W66.1 -E0.09
W= 67.55345, xmin= -1.45207, parasitic=0.3118, |e|=0.083147           1.000000    331.108370   -484.790354   -943.081133   1775.798064    772.642075   1475.012880  -1579.506075   1323.542728    887.719731            1
W= 66.63496, xmin= -1.52131, parasitic=0.3734, |e|=0.087649           1.000000  -1426.017726   1774.952404    756.547810  -1549.081344   -412.092170   -885.455680    699.925019   -488.372693   -132.457100            2
W= 70.34158, xmin= -2.21298, parasitic=0.4175, |e|=0.089965           1.000000   -516.363044   1032.062293    878.714645  -1423.809312  -1183.216422  -1320.767055   1409.360907  -1121.281874  -1043.276621            3
</code></pre>
<p>Below formulas don't really get any better.</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -b Base6 -I4:-1900:1900:1099500 -r900 -W66.1 -E0.09
W= 66.10921, xmin= -2.89189, parasitic=0.4068, |e|=0.088087           1.000000    777.743818   -463.908836   1003.734617  -1881.742311     64.067672   1261.830874  -1314.519519   -851.818241    636.247183              1
W= 66.41275, xmin= -2.83390, parasitic=0.2920, |e|=0.087356           1.000000    417.267233   -351.655661    623.341664  -1559.465815  -1244.346654   1345.875578  -1854.407306   1893.154591   1674.290334              2
W= 66.49257, xmin= -2.81394, parasitic=0.5255, |e|=0.086813           1.000000   1093.920090   -476.591234   -545.775038   1456.897303   1421.628310   1309.632896  -1637.645096   1675.884867   1092.694957              3
W= 67.04915, xmin= -2.64442, parasitic=0.5746, |e|=0.083940           1.000000   -684.650596   1034.047474    191.755691   -406.904827   -271.014904   1716.142605  -1815.428518   1537.632044    647.282132              4
W= 66.40144, xmin= -2.46850, parasitic=0.4717, |e|=0.085470           1.000000   -772.258784   1167.280541   -445.968061    920.404948    432.282382   1450.420341  -1351.899530    937.758821    296.142070              5
W= 68.12433, xmin= -2.09311, parasitic=0.3225, |e|=0.087345           1.000000  -1455.559408   1189.915637    790.086088  -1864.395957  -1232.425752   1142.640999  -1454.911389   1346.054102    787.678130              6
$ stabregion2 -b Base6 -I4:-1900:1900:1099500 -r900 -W66.1 -E0.09
W= 69.39934, xmin= -2.35118, parasitic=0.3066, |e|=0.084166           1.000000   -366.768582    584.012171   -886.816493   1758.921374    841.323012  -1323.201066   1507.692545  -1225.693841  -1304.468235            1
W= 67.07043, xmin= -1.98584, parasitic=0.3019, |e|=0.085861           1.000000   -698.288224   1236.536907   1472.042742  -1685.730268   1204.284695   -900.003534   1743.047495    957.758375   -950.733943            2
$ stabregion2 -b Base6 -I4:-1900:1900:1099500 -r900 -W66.1 -E0.09
W= 66.22433, xmin= -1.93776, parasitic=0.4520, |e|=0.085693           1.000000  -1109.366295   1773.528426   -913.259153   1853.229863    752.930646  -1569.830832   1868.024515  -1476.688091   -468.598571            1
W= 68.08989, xmin= -2.51212, parasitic=0.4128, |e|=0.085143           1.000000   1280.640873  -1672.090745   -719.755459   1466.828140    681.221052  -1863.334099   1112.660300   -663.115698   -189.352203            2
W= 67.28186, xmin= -2.26165, parasitic=0.5384, |e|=0.083420           1.000000   -942.888268   1326.322755   -789.139652   1775.537325   1496.273632   -872.459389   1174.793850  -1361.756217   -879.110473            3
W= 66.32962, xmin= -1.86160, parasitic=0.4837, |e|=0.088438           1.000000    489.025963   -346.624518    710.923641  -1739.665606  -1169.415134  -1123.536735   1660.239406  -1584.703722   -566.135225            4
$ stabregion2 -b Base6 -I4:-1900:1900:1099500 -r900 -W66.1 -E0.09
W= 66.91742, xmin= -2.75146, parasitic=0.2836, |e|=0.087787           1.000000   -569.033533   1069.068050    724.051144  -1466.872054   -733.236224  -1368.895444   1704.712395  -1458.867723  -1621.567683            1
W= 67.45387, xmin= -1.76458, parasitic=0.3361, |e|=0.082292           1.000000  -1063.991192   1666.038072    362.224662   -450.969250    316.529548   1007.603421  -1712.275173   -941.703188    627.306638            2
W= 66.48618, xmin= -1.94415, parasitic=0.3932, |e|=0.088613           1.000000  -1026.274656   1882.488117    628.441346  -1313.531895   -321.774302   1778.007676  -1528.261739   1162.372964    398.534392            3
W= 68.06953, xmin= -2.65866, parasitic=0.2529, |e|=0.085302           1.000000   -305.201445    451.856199   1280.149981  -1866.213196   1107.241556   -979.668034   1485.078793   1313.071549  -1158.804508            4
W= 66.11887, xmin= -2.10597, parasitic=0.2568, |e|=0.078862           1.000000   -492.632733    650.274411   1592.767962  -1546.770437    725.816435   -869.915017   1839.103659   1133.129678  -1228.089256            5
W= 67.75929, xmin= -2.00557, parasitic=0.2927, |e|=0.084694           1.000000   1082.418891  -1314.032462   -898.452311   1349.638973   -558.393120   1036.462825  -1899.741000   -646.812846    974.382845            6
</code></pre>
<h2>5. Order 7<a id=order7></a></h2>
<pre class="line-numbers" data-line=12><code class="language-bash">$ stabregion2 -b Base7 -I4:-1900:1900:1099500 -r900 -W40.1 -E0.07
W= 41.94816, xmin= -6.82533, parasitic=0.5064, |e|=0.069498           1.000000    604.400265   -929.052367    520.837200  -1100.667375   -241.026895   1607.804974  -1778.079749   1469.747897    875.458526            1
W= 43.20235, xmin= -7.50878, parasitic=0.5408, |e|=0.067023           1.000000   -776.178510   1380.220808   -605.393131   1130.614447    290.072447  -1660.672501   1717.192304  -1093.818981  -1398.643812            2
W= 40.55719, xmin= -7.21602, parasitic=0.5691, |e|=0.068968           1.000000    462.612438   -710.638771    705.156252  -1195.468181    635.804851  -1838.033046   1601.028736   1552.644522   -791.168046            3
W= 40.83142, xmin= -7.97041, parasitic=0.5265, |e|=0.069279           1.000000  -1058.519862   1074.530646  -1353.715455   1678.393659    -56.256967    542.307884  -1282.895924   -291.082958    890.164289            4
W= 40.48440, xmin= -6.45767, parasitic=0.6742, |e|=0.067784           1.000000    640.563826  -1180.497876    936.083292  -1448.093006    525.906850  -1501.635942   1089.553202    410.402179   -438.353162            5
W= 40.18680, xmin= -7.65083, parasitic=0.6002, |e|=0.066508           1.000000  -1465.482996   1674.200029   -884.223738   1673.487634    508.354938   1725.926060  -1793.674594    747.162553   1254.954011            6
$ stabregion2 -b Base7 -I4:-1900:1900:1099500 -r900 -W40.1 -E0.07
W= 41.42166, xmin= -9.82521, parasitic=0.4210, |e|=0.066272           1.000000   1236.188284  -1808.160341   1126.292246  -1679.801885    909.605818  -1191.758587   1887.441802   1295.949128  -1612.483830            1
W= 40.36240, xmin= -9.58647, parasitic=0.5251, |e|=0.065729           1.000000   -968.693470   1188.004256    610.692301  -1216.555984   -719.153902  -1784.007621   1864.718312  -1357.790974  -1577.915290            2
W= 40.45280, xmin= -7.13364, parasitic=0.6838, |e|=0.067193           1.000000   -780.795789    506.937029    671.842933  -1257.171471   -191.646258    644.053859  -1137.012644    246.705772    498.893610            3
W= 46.81597, xmin= -6.51908, parasitic=0.4308, |e|=0.068767           1.000000    681.091183  -1233.682610   -890.294075   1855.390968    514.351326   -953.372885   1424.568886  -1322.828240   -647.160123            4
</code></pre>
<h2>6. Order 8<a id=order8></a></h2>
<pre class="line-numbers" data-line=13><code class="language-bash">$ stabregion2 -b Base8 -I4:-1900:1900:1099500 -r1400  -E0.05
W=  0.00000, xmin=-23.85777, parasitic=0.6766, |e|=0.048399           1.000000   1887.256462  -1035.917921  -1007.169342   1231.223647    822.188747   1682.595870  -1709.029070   -474.801023   1536.391356            1
W=  0.00000, xmin=-513.58927, parasitic=0.6778, |e|=0.044933          1.000000   1475.503275   -832.927478     93.207109   1278.271777  -1129.167000   -720.790624  -1547.021667  -1111.843338   1404.176119            2
W=  0.00000, xmin=-176.02952, parasitic=0.7454, |e|=0.040882          1.000000   -585.347260   -721.840790   -249.374842     20.963422   1171.825122  -1048.687503  -1505.200219   1128.745873  -1843.950602            3
W=  0.00000, xmin=-111.39488, parasitic=0.7305, |e|=0.040882          1.000000   1180.692065      9.269570   -238.044717    -87.989443    730.150525   -848.945749   -583.824082   1490.722406  -1510.606463            4
W=  0.00000, xmin=-42.44942, parasitic=0.7074, |e|=0.048062           1.000000   1884.500963   -231.040531  -1116.089647   1442.308622   1433.176484   -763.342553   1087.766794    755.733718  -1812.126287            5
W=  0.00000, xmin=-31.13149, parasitic=0.7322, |e|=0.048026           1.000000   1464.863516  -1305.078037   1317.524158  -1419.509962   -549.927224    978.144408  -1274.578366  -1040.095413   1859.378833            6
W=  0.00000, xmin=-122.87497, parasitic=0.6960, |e|=0.049351          1.000000   -396.471382    454.988598  -1226.771985   -265.654099   1435.930816   -356.245894   -615.321618   1655.269703  -1133.700838            7
W=  0.00000, xmin=-187.37440, parasitic=0.6242, |e|=0.040882          1.000000    936.734284    829.835423    685.155070   1005.491085  -1306.343359   -305.727304     43.252381   1877.639396  -1025.981211            8
W=  0.00000, xmin=-41.74583, parasitic=0.7208, |e|=0.049830           1.000000   1475.927015  -1557.606702   -465.305102    645.924265    345.597859   -878.147686   -116.514129    997.536019  -1570.976615            9
W=  0.00000, xmin=-48.46757, parasitic=0.6751, |e|=0.048326           1.000000   -639.841356    649.520124   1591.607647  -1858.621137  -1325.482235   -785.060208     68.735301   1313.552262  -1836.762112            10
W=  0.02785, xmin=-23.54848, parasitic=0.6394, |e|=0.048973           1.000000  -1149.074731   1262.745407   1614.956209  -1762.078435   -268.729817   1205.705699  -1187.735828  -1074.378044   1251.230795            11
W=  0.14471, xmin=-23.69321, parasitic=0.6383, |e|=0.049722           1.000000   1755.807518  -1772.726701  -1255.350352   1814.943391   1303.016747  -1289.925655   1196.057832   -266.187408  -1428.783815            12
W=  0.00000, xmin=-179.25813, parasitic=0.7192, |e|=0.040882          1.000000    707.567714   1291.548005    493.649594   -172.511800  -1352.259319    479.847960    488.736186  -1738.382843    886.413860            13
W=  0.00000, xmin=-74.92529, parasitic=0.7264, |e|=0.045020           1.000000  -1520.719189    876.351998  -1129.515740    832.168443   1507.417644    175.605164     72.244941   -446.362741    529.810811            14
W=  0.00000, xmin=-45.04340, parasitic=0.6982, |e|=0.049245           1.000000   1054.501705  -1195.716079   -328.786365    387.184316    287.952548   -738.145733    271.656352   1087.269981  -1820.330214            15
W=  0.00000, xmin=-257.95909, parasitic=0.6958, |e|=0.040882          1.000000   1774.058735   1050.777827  -1885.341121   -808.716280   1599.936578   -237.165686   -964.458272   1866.747880   -761.720810            16
W=  0.00000, xmin=-245.11378, parasitic=0.6810, |e|=0.047281          1.000000   -890.338809    782.113738    982.470328    391.431984  -1694.916969     96.729519    878.703770   -409.121653   -194.516133            17
W=  0.00000, xmin=-188.19747, parasitic=0.7437, |e|=0.040882          1.000000   1613.225604    572.352618   -314.824608   -705.546246   1818.295876   1684.336705   1586.817791   -732.380468   1169.107483            18
W=  0.00000, xmin=-35.54136, parasitic=0.6592, |e|=0.049764           1.000000    200.262601   -163.361730  -1441.139532   1757.722424    185.357370   -250.035159    441.624109    325.011823   -555.213909            19
W=  0.00000, xmin=-194.26458, parasitic=0.7466, |e|=0.045204          1.000000   1412.355014   -849.032482   -345.758821  -1384.854380   1793.222670   -975.180725  -1587.901451    381.241703    124.431518            20
W=  0.00000, xmin=-190.15261, parasitic=0.6549, |e|=0.040882          1.000000   1650.638868    120.878463    340.728352    944.620954  -1826.707751    801.091257    723.157884   -894.558731   1355.555690            21
W=  0.00000, xmin=-52.97417, parasitic=0.7485, |e|=0.047320           1.000000   1851.725143    723.872535   -371.232556    457.549074   1072.883990    350.161394   -461.711870    -79.557471   1162.292805            22
W=  0.00000, xmin=-51.22602, parasitic=0.7270, |e|=0.048297           1.000000   1684.304709  -1703.525632    526.510580    -36.263800  -1181.625893   -362.550077    418.453136    559.019841  -1254.580573            23
W=  0.00000, xmin=-85.44861, parasitic=0.7042, |e|=0.047948           1.000000    678.890110   -655.756404   1251.044723    134.716159  -1679.169324   -412.232047   -137.371602   1392.412048  -1211.229781            24
W=  0.00000, xmin=-45.20671, parasitic=0.7251, |e|=0.047838           1.000000  -1733.036218    718.344552    892.946576  -1160.408085  -1280.002521   -623.396178    638.184774    533.721161  -1804.260148            25
W=  0.00000, xmin=-121.39983, parasitic=0.7379, |e|=0.044937          1.000000  -1877.143577   1060.523019   -370.771386    -10.185957    533.260376    334.704346    720.977849  -1319.530974    873.569898            26
W=  0.00000, xmin=-48.43030, parasitic=0.7110, |e|=0.047750           1.000000   -862.094807    810.401745    579.690995   -395.415089   -470.515753    427.136262   -497.433835   -891.840080   1277.174692            27
W=  0.00000, xmin=-190.44704, parasitic=0.5666, |e|=0.040882          1.000000    313.952344     61.170909    213.642056    204.374189   -865.133420    751.703233   1415.395593  -1165.514410    659.051952            28
W=  0.00000, xmin=-37.26504, parasitic=0.7364, |e|=0.046796           1.000000   1128.694962   -919.091451  -1086.702152    485.713689   1313.404502    991.436045  -1098.628630  -1364.271296   1893.178776            29
</code></pre>
<p>Checking on solution #12.</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1 1755.807518  -1772.726701  -1255.350352   1814.943391   1303.016747  -1289.925655   1196.057832   -266.187408  -1428.783815 | stabregion2 -b Base8 -l- -r64000 -d
Base8, p=8, k=8, l=9, cpLen=18
        -2283.00000000  -105.00000000     15.00000000     -5.00000000      3.00000000     -3.00000000      5.00000000    -15.00000000    105.00000000
        6720.00000000   -1338.00000000  -240.00000000     60.00000000    -32.00000000     30.00000000    -48.00000000    140.00000000   -960.00000000
        -11760.00000000 2940.00000000   -798.00000000   -420.00000000    168.00000000   -140.00000000    210.00000000   -588.00000000   3920.00000000
        15680.00000000  -2940.00000000  1680.00000000   -378.00000000   -672.00000000    420.00000000   -560.00000000   1470.00000000   -9408.00000000
        -14700.00000000 2450.00000000   -1050.00000000  1050.00000000      0.00000000   -1050.00000000  1050.00000000   -2450.00000000  14700.00000000
        9408.00000000   -1470.00000000   560.00000000   -420.00000000    672.00000000    378.00000000   -1680.00000000  2940.00000000   -15680.00000000
        -3920.00000000   588.00000000   -210.00000000    140.00000000   -168.00000000    420.00000000    798.00000000   -2940.00000000  11760.00000000
         960.00000000   -140.00000000     48.00000000    -30.00000000     32.00000000    -60.00000000    240.00000000   1338.00000000   -6720.00000000
        -105.00000000     15.00000000     -5.00000000      3.00000000     -3.00000000      5.00000000    -15.00000000    105.00000000   2283.00000000
         840.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000    840.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000    840.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000    840.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000    840.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000    840.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000    840.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000    840.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000    840.00000000
fname=-, l=4, il=10
           1.00000000
        1755.80751800   -1772.72670100
        -1255.35035200  1814.94339100   1303.01674700
        -1289.92565500  1196.05783200   -266.18740800   -1428.78381500
fm based on LinearCombination, l=4, colLen=24
LinearCombination, p=8, k=8, l=4
               105.0000         0.0000         0.0000         0.0000
              -960.0000    210950.6899         0.0000         0.0000
              3920.0000  -1933756.9554   -152520.8541         0.0000
             -9408.0000   7925128.7707   1396683.6088   -150427.6468
             14700.0000 -19124545.3798  -5714526.5769   1375690.2064
            -15680.0000  30153550.9321  13748613.5181  -5615660.1944
             11760.0000 -32742878.3832 -21532093.8980  13442801.3215
             -6720.0000  25860112.9126  22830758.9539 -20671522.5895
              2283.0000 -14170934.8469 -19059046.3450  23649558.8599
                 0.0000   3822372.2600  11177072.6419 -19498442.4828
                 0.0000         0.0000  -2694941.0488  10290467.8318
                 0.0000         0.0000         0.0000  -2822465.3060
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
               840.0000  -1489090.4288   1094534.0675  -1200178.4046
                 0.0000   1474878.3151   1524552.4484   -223597.4227
                 0.0000         0.0000  -1054494.2957   1004688.5789
                 0.0000         0.0000         0.0000  -1083537.5502
rho_0              0.000000000          -0.000000001           0.000000004           0.000000001        &lt;-----
rho_1               0.000000000           -0.000000000           -0.000000000            0.000000000    &lt;-----
rho_2               0.000000000           -0.000000000           -0.000000000            0.000000000    &lt;-----
rho_3               0.000000000           -0.000000000           -0.000000000            0.000000000    &lt;-----
rho_4               0.000000000            0.000000000           -0.000000000            0.000000000    &lt;-----
rho_5               0.000000000           -0.000000000           -0.000000000            0.000000000    &lt;-----
rho_6               0.000000000           -0.000000000           -0.000000000            0.000000000    &lt;-----
rho_7               0.000000000           -0.000000000           -0.000000000            0.000000000    &lt;-----
rho_8               0.000000000           -0.000000000           -0.000000000            0.000000000    &lt;-----
rho_9              -0.040881881           -0.048283413           -0.049721675           -0.047069863    &lt;-----
. . .
        63999        -0.00000000             -0.00002454,       -23.69333         0.00317
        63999        -0.26987232              0.00009273,       -23.69333         0.00317
</code></pre>
<h2>7. Order 9<a id=order9></a></h2>
<p>Surprisingly, there is a 4-stage cyclic formula of order 9.
However, its Widlund-δ-distance is enormous.</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -b Base9 -I4:-1900:1900:1099500 -r19500  -E0.05
W=  0.00232, xmin=-376.86583, parasitic=0.6895, |e|=0.035349          1.000000   1285.147501    630.706237    258.664447   -133.593623  -1256.384007   -794.490164  -1351.699759   1475.827104  -1330.879604            1
</code></pre>
<p>Searching for 5-stage cyclic formulas.</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -b Base9 -I5:-1900:1900:2099500 -r19500  -E0.05
W=  0.00000, xmin=-77.99213, parasitic=0.6481, |e|=0.046158           1.000000   -635.929995   1197.438115  -1705.402704   1736.138997   1799.824913  -1885.217062   -364.365106  -1868.833292    332.614681   1836.415456   -906.179706   -372.683443  -1753.289873   1211.838718              1
W=  0.00000, xmin=-95.71107, parasitic=0.7170, |e|=0.043922           1.000000    653.266267   -695.552005    742.248596   -399.821459  -1568.054703   -475.082850    803.267298   -299.222882  -1712.011932   -686.161477   -393.089533    855.504204   -383.521770    715.098937              2
W=  0.00000, xmin=-87.09916, parasitic=0.6843, |e|=0.041257           1.000000   1641.882781   -219.270218   1728.848482  -1441.475710    221.042597  -1587.316427    336.948242  -1017.479202    965.230519   -873.485619   1476.915671   1711.232141  -1769.201903    514.970838              3
W=  0.00000, xmin=-93.20954, parasitic=0.7077, |e|=0.042560           1.000000  -1169.995357    924.058730   1330.388072  -1361.477472   1654.715396   1147.463239   -590.188946  -1684.961322    648.748375   1250.070060   -212.286528   1149.045875   1747.626462  -1779.754762              4
$ stabregion2 -b Base9 -I5:-1900:1900:3099500 -r19500  -E0.05
W=  0.00653, xmin=-107.73419, parasitic=0.6960, |e|=0.046719          1.000000    643.245487   -693.833660   -974.151372   -268.060978    933.196601   1544.408832   -332.586678   -549.165176  -1113.060631    684.484908  -1666.867528  -1640.142136    802.315914   1769.222144              1
W=  0.00000, xmin=-135.67292, parasitic=0.7267, |e|=0.046149          1.000000   -513.538976    966.289438   1752.519109  -1480.794223   -544.351124   -563.548812     52.359850    340.471937  -1183.335764  -1607.926942  -1864.386294    985.420325    862.198047     51.540752              2
W=  0.00000, xmin=-65.54811, parasitic=0.6881, |e|=0.044826           1.000000   -292.575450    145.999624    483.071129  -1020.184032  -1018.950959   1710.799227  -1197.581726   1761.169695   1487.822194   1209.704241   -205.105418  -1365.861210    727.377200    331.206604              3
W=  0.00634, xmin=-126.43438, parasitic=0.6879, |e|=0.044570          1.000000   1544.033244    -17.007798    877.011835    774.025823   -706.931386   1472.441772  -1471.650435   -929.256095   -965.274164   -556.778211   1034.080630    535.852385   -501.857101   -476.703132              4
W=  0.00000, xmin=-132.67919, parasitic=0.7149, |e|=0.042009          1.000000    514.659729   -469.198973   1547.803775    510.306623    573.495462   1629.600035   -793.678072   -263.161259  -1013.882639    824.641169  -1551.997124  -1830.889100   1781.564551   -432.675743              5
W=  0.00000, xmin=-96.34673, parasitic=0.6749, |e|=0.047176           1.000000  -1799.701667   -880.734083   1851.738765   -828.255398  -1699.556379  -1860.835088    665.213522    716.054189    643.126991    802.133831  -1887.182379   -634.294542   1459.233782    187.714336              6
</code></pre>
<p>Details on the surprising 4-stage formula.</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1 1285.147501    630.706237    258.664447   -133.593623  -1256.384007   -794.490164  -1351.699759   1475.827104  -1330.879604 | stabregion2 -b Base9 -l- -r360100 -d
Base9, p=9, k=9, l=10, cpLen=20
        -7129.00000000  -280.00000000     35.00000000    -10.00000000      5.00000000     -4.00000000      5.00000000    -10.00000000     35.00000000   -280.00000000
        22680.00000000  -4329.00000000  -630.00000000    135.00000000    -60.00000000     45.00000000    -54.00000000    105.00000000   -360.00000000   2835.00000000
        -45360.00000000 10080.00000000  -2754.00000000  -1080.00000000   360.00000000   -240.00000000    270.00000000   -504.00000000   1680.00000000   -12960.00000000
        70560.00000000  -11760.00000000 5880.00000000   -1554.00000000  -1680.00000000   840.00000000   -840.00000000   1470.00000000   -4704.00000000  35280.00000000
        -79380.00000000 11760.00000000  -4410.00000000  3780.00000000   -504.00000000   -2520.00000000  1890.00000000   -2940.00000000  8820.00000000   -63504.00000000
        63504.00000000  -8820.00000000  2940.00000000   -1890.00000000  2520.00000000    504.00000000   -3780.00000000  4410.00000000   -11760.00000000 79380.00000000
        -35280.00000000 4704.00000000   -1470.00000000   840.00000000   -840.00000000   1680.00000000   1554.00000000   -5880.00000000  11760.00000000  -70560.00000000
        12960.00000000  -1680.00000000   504.00000000   -270.00000000    240.00000000   -360.00000000   1080.00000000   2754.00000000   -10080.00000000 45360.00000000
        -2835.00000000   360.00000000   -105.00000000     54.00000000    -45.00000000     60.00000000   -135.00000000    630.00000000   4329.00000000   -22680.00000000
         280.00000000    -35.00000000     10.00000000     -5.00000000      4.00000000     -5.00000000     10.00000000    -35.00000000    280.00000000   7129.00000000
        2520.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000   2520.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000   2520.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000   2520.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000   2520.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000   2520.00000000      0.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000   2520.00000000      0.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000   2520.00000000      0.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000   2520.00000000      0.00000000
           0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000      0.00000000   2520.00000000
fname=-, l=4, il=10
           1.00000000
        1285.14750100    630.70623700
         258.66444700   -133.59362300   -1256.38400700
        -794.49016400   -1351.69975900  1475.82710400   -1330.87960400
fm based on LinearCombination, l=4, colLen=26
LinearCombination, p=9, k=9, l=4
              -280.0000         0.0000         0.0000         0.0000
              2835.0000   -337766.5820         0.0000         0.0000
            -12960.0000   3416338.9200    -64537.9819         0.0000
             35280.0000 -15595925.1348    649487.0908    153735.0853
            -63504.0000  42373161.6964  -2943510.9802  -1538938.3572
             79380.0000 -76049177.8932   7907221.6025   6922582.5768
            -70560.0000  94597903.2823 -13910753.8166 -18383812.6093
             45360.0000 -83262902.3234  16563191.3385  31677017.3630
            -22680.0000  51936771.7764 -12434886.4256 -35631517.6207
              7129.0000 -26416818.0227   9619561.4805  29417186.5299
                 0.0000   9338414.2810  -7236358.3763 -19785862.3962
                 0.0000         0.0000   1850586.0685  13276968.4849
                 0.0000         0.0000         0.0000  -6107359.0564
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
                 0.0000         0.0000         0.0000         0.0000
              2520.0000   1589379.7172  -3166087.6976  -3353816.6021
                 0.0000   3238571.7025   -336655.9300   3719084.3021
                 0.0000         0.0000    651834.4064  -3406283.3927
                 0.0000         0.0000         0.0000  -2002115.2133
rho_0              0.000000000          -0.000000002          -0.000000005           0.000000014        &lt;-----
rho_1               0.000000000           -0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_2               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_3               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_4               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_5               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_6               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_7               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_8               0.000000000            0.000000000           -0.000000000           -0.000000000    &lt;-----
rho_9               0.000000000            0.000000000           -0.000000000            0.000000000    &lt;-----
rho_10             -0.035348576           -0.032789014           -0.032492071           -0.024239692    &lt;-----
. . .
        360099        1.58070137              0.00004958,       -376.86584        0.00077
        360099       -0.00000000             -0.00000436,       -376.86584        0.00077
        360099        0.15016818             -0.00000836,       -376.86584        0.00077
</code></pre>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/02-01-rubin-4-th-order-method-is-neither-a-stable-nor-d-stable</link>
		<guid>https://eklausmeier.goip.de/blog/2026/02-01-rubin-4-th-order-method-is-neither-a-stable-nor-d-stable</guid>
		<title>Rubin's 4-th Order Method is Neither A-stable Nor D-stable</title>
		<category>mathematics</category>
		<pubDate>Sun, 01 Feb 2026 13:20:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>We analyze below method from <a href="https://eklausmeier.goip.de/blog/2025/04-03-a-stability-and-composite-multistep-methods">Rubin</a>, see his Fig. 4.2.
Also see <a href="https://eklausmeier.goip.de/blog/2025/10-26-weitere-zyklische-und-blockimplizite-lineare-mehrschritt-verfahren#Rubin">Weitere zyklische und blockimplizite lineare Mehrschritt-Verfahren</a>.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=4 && 1 & 2\cr%R4A
\hline
-1 && 0 & 56\cr
 0 && 24 & -72\cr
 1 && -24 & 0\cr
 2 && 0 & 16\cr
\hline
-1 && 1 & -21\cr
 0 && -13 & -39\cr
 1 && -13 & 33\cr
 2 && 1 & 3\cr
\hline
c_{5i} && 0.0153 & 0.08125\cr
\end{array}
$$
</div>
<p>The error constant is</p>
<div class=math>
$$
    c_{p+1} = \frac{1}{\alpha_{i}\,(p+1)!} \sum_{i=0}^k\bigl(\alpha_ii^{p+1}-(p+1)\beta_ii^p\bigr).
$$
</div>
<p>The stability polynomial has roots at 1 and 3.5, and therefore by definition is not <em>D</em>-stable.
By a continuity argument it can hence not be <em>A</em>-stable.
I.e., in the vicinity of zero its roots are less than one in magnitude, by definition of <em>A</em>-stability.
But at exactly zero the zero jumps to 3.5.
That cannot be.</p>
<pre><code class="language-bash">Rubin1, p=4, k=2, l=2
            0.0000        56.0000
           24.0000       -72.0000
          -24.0000         0.0000
            0.0000        16.0000
            1.0000       -21.0000
          -13.0000       -39.0000
          -13.0000        33.0000
            1.0000         3.0000
rho_0       0.000000000           0.000000000
rho_1      -0.000000000           0.000000000
rho_2      -0.000000000           0.000000000
rho_3      -0.000000000           0.000000000
rho_4      -0.000000000           0.000000000
rho_5       0.015277778           0.081250000  &lt;-----
</code></pre>
<h2>1. Stability region.</h2>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f Rubin1 -oj -r600
</code></pre>
<div id="container_Rubin1" class="chartarea"></div>
<p>Just looking at this stability region one could assume that the method is <em>A</em>-stable.</p>
<p>Truth is, it is not.</p>
<h2>2. Stability mountain.</h2>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f Rubin1 -o3 -r600 -L29
</code></pre>
<p>Rubin1 stability mountain.</p>
<div id="container_Rubin1_3d" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/01-20-tendler-like-formulas-for-stiff-odes</link>
		<guid>https://eklausmeier.goip.de/blog/2026/01-20-tendler-like-formulas-for-stiff-odes</guid>
		<title>Tendler-like Formulas for Stiff ODEs</title>
		<category>mathematics</category>
		<pubDate>Tue, 20 Jan 2026 17:20:00 +0100</pubDate>
		<description><![CDATA[
<p><strong>Abstract.</strong>
This paper proves a convergence result for a general class of methods for the solution of ordinary differential equations (initial value problems).
The proof uses standard results from the theory of matrix polynomials.
We present new cyclic linear multistep formulas of orders 3 to 9 for stiff equations, which, order by order, outperform the cyclic composite multistep methods of Tendler with respect to the Widlund-wedge angle and Widlund-distance.
The Tendler formulas had already outperformed the BDF order by order.
We present numerical accuracy comparisons on Dahlquist’s and Runge’s test equations with the BDF, the original Tendler, the new methods, and the Tischer methods.</p>
<p><em>Subject Classification:</em> Mathematics Subject Classification 65L04 65L06; CR: G.1.7.</p>
<ul>
<li><a href="#introduction">1. Introduction</a></li>
<li><a href="#consistency">2. Consistency and stability</a></li>
<li><a href="#convergence">3. Convergence result</a></li>
<li><a href="#formulas">4. New cyclic linear multistep formulas</a></li>
<li><a href="#numericalresults">5. Numerical results</a></li>
<li><a href="#summary">6. Summary and conclusions</a></li>
<li><a href="#references">7. References</a></li>
</ul>
<h2>1. Introduction<a id=introduction></a></h2>
<p>We consider the numerical solution of the ordinary differential equation, the initial value problem</p>
<div class=math>
$$
    \dot y(t) = f(t,y(t)), \quad y(t_0)=y_0\in\mathbb{C}^n, \quad t\in[t_0,t_\text{end}]\subset\mathbb{R}.
$$
</div>
<p>Assume that $f:[t_0,t_\text{end}]\times\mathbb{C}^n \to \mathbb{C}^n$ is Lipschitz-continuous in $y$ for all $t$, and continuous in $t$.
We will use cyclic linear multistep methods for this, i.e., we will employ a fixed set of linear multistep methods and cycle through them.</p>
<p>Cyclic linear multistep methods are attractive for a number of reasons:</p>
<ol>
<li>They are not subject to Dahlquist's first and second barriers.</li>
<li>They share the same low overhead per step as linear multistep methods.</li>
<li>They offer more parameters to attain desirable stability or accuracy properties than linear multistep methods.</li>
</ol>
<p>Below is an example of an order-four cyclic composite method, which we call eTendler4 (enhanced Tendler4).
It cycles through three different linear multistep methods for some fixed step size $h\in\mathbb{R}$, $m=1,2,\ldots$:</p>
<div class=math>
$$
\begin{array}{ccccccccccccccccccc}
3y_{3m-3}&-&16y_{3m-2}&+&36y_{3m-1}&-&48y_{3m}&+&25y_{3m+1}&&&&\\
    &&&&&& &=& 12h\dot y_{3m+1},\\
&&16y_{3m-2}&-&90y_{3m-1}&+&234y_{3m}&-&214y_{3m+1}&+&54y_{3m+2}&&\\
    &&&&&& &=&-84h\dot y_{3m+1}&+& 36h\dot y_{3m+2},\\
&&&&15y_{3m-1}&-&94y_{3m}&+&162y_{3m+1}&-&114y_{3m+2}&+&31y_{3m+3} \\
    &&&&&& &=&48h\dot y_{3m+1}&-&60h\dot y_{3m+2}&+&24h\dot y_{3m+3}.
\end{array}
$$
</div>
<p>The first stage of eTendler4 is the standard BDF4 (the classic backward differentiation formula of order 4).
Each stage is a 4-step linear multistep formula.</p>
<p>In addition to the initial value $y_0$, the above difference method needs three starting values $y_1$, $y_2$, and $y_3$ and will then produce discrete values $y_k$ for $k=4,5,\ldots$, as approximations of order ${\mathcal O}(h^4)$ to the desired function $y$,
$\dot y_k = f(t_k,y_k)$, $t_k=t_0+kh$.
These starting values can be generated using lower-order methods with fewer required starting values and a smaller step size $|h|$.</p>
<p>In a later chapter it will be shown that the above method converges for sufficiently small $|h|$ for a wide range of functions $f$.</p>
<p>The difference equation above can be expressed in matrix-vector form:</p>
<div class=math>
$$
    A_2 Y_m + A_1 Y_{m-1} + A_0 Y_{m-2} = h \left( B_2 \dot Y_m + B_1 \dot Y_{m-1} + B_0 \dot Y_{m-2} \right),
$$
</div>
<p>with</p>
<div class=math>
$$
    A_0 = \begin{pmatrix} 0 & 0 & 3\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{pmatrix}, \,
    A_1 = \begin{pmatrix} -16 & 36 & -48\\ 16 & -90 & 234\\ 0 & 15 & -94 \end{pmatrix}, \,
    A_2 = \begin{pmatrix} 25 & 0 & 0\\ -214 & 54 & 0\\ 162 & -114 & 31 \end{pmatrix},
$$
</div>
<p>and</p>
<div class=math>
$$
    B_0 = \mathbf{0}, \quad
    B_1 = \mathbf{0}, \quad
    B_2 = \begin{pmatrix} 12 & 0 & 0\\ -84 & 36 & 0\\ 48 & -60 & 24 \end{pmatrix},
$$
</div>
<p>and</p>
<div class=math>
$$
    Y_{m-2} = \begin{pmatrix} y_{3m-5}\\ y_{3m-4}\\ y_{3m-3} \end{pmatrix}, \,
    Y_{m-1} = \begin{pmatrix} y_{3m-2}\\ y_{3m-1}\\ y_{3m} \end{pmatrix}, \,
    Y_m = \begin{pmatrix} y_{3m+1}\\ y_{3m+2}\\ y_{3m+3} \end{pmatrix}, \,
    \dot Y_m = \begin{pmatrix} f(t_{3m+1},y_{3m+1})\\ f(t_{3m+2},y_{3m+2})\\ f(t_{3m+3},y_{3m+3}) \end{pmatrix}.
$$
</div>
<p>Stability of this cyclic method is now governed by the two matrix polynomials</p>
<div class=math>
$$
    \rho(\mu) = A_2 \mu^2 + A_1 \mu + A_0, \quad
    \sigma(\mu) = B_2 \mu^2 + B_1 \mu + B_0.
$$
</div>
<p>All stages in eTendler4 are implicit and must therefore be solved iteratively (fixed-point or Newton).</p>
<p>The stages of a composite method might be explicit or implicit.
They might have different orders,
and might require a different number of starting values.</p>
<h2>2. Consistency and stability<a id=consistency></a></h2>
<p><strong>1.</strong> Consider the multistep method</p>
<div class=math>
$$
    L(y,t_0,h) = \sum_{i=0}^k \left(\alpha_i y(t_0+ih)
        - h\beta_i\dot y(t_0+ih)\right) \in \mathbb{C}^n.
$$
</div>
<p>and</p>
<div class=math>
$$
    \rho(\mu) := \sum_{i=0}^k \alpha_i\mu^i \in\mathbb{C},\qquad
    \sigma(\mu) := \sum_{i=0}^k \beta_i\mu^i \in\mathbb{C}.
$$
</div>
<p>The consistency conditions are:</p>
<div class=math>
$$
    C_{p,k}\cdot\begin{pmatrix}\alpha\\ \beta \end{pmatrix}
    = \begin{pmatrix} A{\mskip 3mu}|{\mskip 3mu}B \end{pmatrix} \begin{pmatrix} \alpha\\ \beta \end{pmatrix} = 0.
$$
</div>
<p>The consistency matrix $C_{p,k}$ for a linear $k$-step method of
consistency order $p$ is given by the following equation</p>
<div class=math>
$$
\left( \begin{array}{cccccc|cccccc}
1&   1&   1&   1& \ldots&   1 & 0&        0&        0&        0& \ldots&         0\\
0&   1&   2&   3& \ldots&   k &-1&       -1&       -1&       -1& \ldots&        -1\\
0& 1^2& 2^2& 3^2& \ldots& k^2 & 0& -2\cdot1& -2\cdot2& -2\cdot3& \ldots& -2\cdot k\\
0& 1^3& 2^3& 3^3& \ldots& k^3 & 0& -3\cdot1^2& -3\cdot2^2& -3\cdot3^2& \ldots& -3\cdot k^2\\
\vdots & \vdots & \vdots & \vdots & \ddots&\vdots     & \vdots & \vdots & \vdots & \vdots & \ddots&\vdots\\
0& 1^p& 2^p& 3^p& \ldots& k^p & 0& -p1^{p-1}& -p2^{p-1} & -p3^{p-1}& \ldots& -pk^{p-1}
\end{array} \right)
    \cdot
    \begin{pmatrix} \alpha_0\\ \alpha_1\\ \vdots\\ \alpha_{k-1}\\ \alpha_k\\
             \beta_0\\  \beta_1\\  \vdots\\ \beta_{k-1}\\   \beta_k \end{pmatrix}
    =
    \begin{pmatrix} 0\\ 0\\ 0\\ 0\\ \vdots\\ 0 \end{pmatrix}.
$$
</div>
<p><strong>2. Theorem:</strong>
The following eight propositions are equivalent. Therefore any of these statements can be used as a definition for consistency of order $p$.</p>
<p><strong>(1)</strong> $C_{p,k} \binom{\alpha}{\beta}= {\bf0}$,
so $(\alpha,\beta)^\top\in\ker C_{p,k}$.</p>
<p><strong>(2)</strong> $\sum_{i=0}^k \alpha_i i^q = q\sum_{i=0}^k \beta_i i^{q-1}$,
for $q=0,1,\ldots,p$.</p>
<p><strong>(3)</strong> $\rho(e^h)-h\sigma(e^h)={\mathcal O}(h^{p+1})$, for $h\to 0$.</p>
<p><strong>(4)</strong> $\zeta=1$ is a zero of multiplicity at least $p$ of the function</p>
<div class=math>
$$
    h\mapsto \frac{\rho(\zeta)}{\ln\zeta}-\sigma(\zeta),
$$
</div>
<p>so
$\rho(\zeta)/\ln\zeta=\sigma(\zeta)+{\mathcal O}\bigl((\zeta-1)^p\bigr)$,
for $\zeta\to 1$.</p>
<p><strong>(5)</strong> $L(f,t,h)={\mathcal O}(h^{p+1}),\quad\forall f\in C^{p+2}(G,\mathbb{C}{})$.</p>
<p><strong>(6)</strong> The monomials up to the degree $p$ lie in the kernel of the $h=1$ cut
of $L$; therefore $L(t^i,t_0,1)=0$, for $i=0,1,\ldots,p$.</p>
<p><strong>(7)</strong> $L(f,t_0,h)={\mathcal O}(h^{p+1})$, for the special function
$t\mapsto f(t)=e^t$.</p>
<p><strong>(8)</strong> $L(y,t_0,h)=c_{p+1}h^{p+1}y^{(p+1)}(t_0)+{\mathcal O}(h^{p+2})$ with</p>
<div class=math>
$$c_{p+1} = \frac{1}{(p+1)!} \sum_{i=0}^k\bigl(\alpha_ii^{p+1}-(p+1)\beta_ii^p\bigr).$$
</div>
<p>The factor $c_{p+1}$ is called the <em>unscaled error constant</em>.</p>
<p><em>Proof:</em> Mostly trivial reformulations.
See <a href="https://doi.org/10.1007/978-3-540-78862-1">Hairer/Wanner/Norsett (2008)</a>, Thm. III.2.4.     ☐</p>
<p><strong>3.</strong> Our composite method is</p>
<div class=math>
$$
    \sum_{i=0}^\kappa A_i Y_{n+i} = h\, \varphi(Y_{n+\kappa},\ldots,Y_n) = h\cdot \left( \sum_{i=0}^\kappa B_i \dot Y_{n+i} \right),
    \quad n=0,1,2,\ldots .
$$
</div>
<p>$\varphi(\cdot)$ also depends on $h$, $t_{n+i}$, and $f$, but for brevity we omit that.
This general method is called <em>general linear method</em> in <a href="https://doi.org/10.1002/9781119121534">Butcher (2016)</a>
and <a href="https://doi.org/10.1007/978-3-540-78862-1">Hairer/Wanner/Norsett (2008)</a>.
The characteristic polynomial is</p>
<div class=math>
$$
    \det Q(\mu,H) := \det\Biggl\{\sum_{i=0}^\kappa (A_i  -  H B_i) \mu^i
        \Biggr\}.
$$
</div>
<p>The <em>stability region</em> of a method is the area</p>
<div class=math>
$$
    \{H\in\mathbb{C}: \det Q(\mu,H)=0 \land |\mu|\lt 1 \}.
$$
</div>
<p>This set is not necessarily connected, i.e., it might contain holes.
See, for example, the two block-implicit methods of order 8 and 10 from <a href="https://doi.org/10.1007/BF01951938">Bickart/Picel (1973)</a>.</p>
<p>The <em>stability mountain</em> is the set</p>
<div class=math>
$$
    \{ (H,|\mu|)\in\mathbb{C}\times\mathbb{R^\ge}: \det Q(\mu,H)=0 \}.
$$
</div>
<p>This mountain is interesting for observing how fast $|\mu|$ decays, i.e., the gradient.</p>
<p><strong>4. Definition.</strong> Slightly deviating and expanding from <a href="https://doi.org/10.1145/356502.356495">Tendler/Bickart/Picel (1978)</a>.
For real values $\alpha\ge0$, $\delta\ge0$, $r\ge0$, let</p>
<div class=math>
$$
    {\mathcal A}[\alpha] = \{ z\in\mathbb{C}^-: |\arg(-z)| \le\alpha \land z\ne0 \}, \quad
    {\mathcal S}[\delta] = \{ z\in\mathbb{C}: \mathop{\rm Re}z \le -\delta\le0\} .
$$
</div>
<ol>
<li>A method is $D$-stable if the Jordan triple for the matrix polynomial $Q(\mu,0)$ has all its eigenvalues in the closed unit disc with all eigenvalues of magnitude 1 lying in $1\times1$ blocks, see <a href="https://doi.org/10.1002/9781119121534">Butcher (2016)</a>, Thm 142C.</li>
<li>The eigenvalues not equal to 1 for $Q(\mu,0)$ with the greatest magnitude are called the parasitic roots.</li>
<li>A method is $A[\alpha]$-stable if ${\mathcal A}[\alpha]$ is a subset of the stability region.</li>
<li>The largest $\alpha$ for which a method is $A[\alpha]$-stable is called the Widlund-wedge angle $\alpha$.</li>
<li>A method is $S[\delta]$-stable if ${\mathcal S}[\delta]$ is a subset of the stability region.</li>
<li>The smallest $\delta$ for which a method is $S[\delta]$-stable is called the Widlund-distance $\delta$.</li>
<li>If $\alpha=90^\circ$ or $\delta=0$ then the method is called $A$-stable.</li>
<li>An $A[\alpha]$-stable method with the additional property that for
$\mathop{\rm Re}\nolimits H\to-\infty$ all $|\mu|&lt;r$ is called $A_\infty^r[\alpha]$-stable.
The smallest $r$ is of interest.</li>
<li>An $S[\delta]$-stable method with the additional property that for
$\mathop{\rm Re}\nolimits H\to-\infty$ all $|\mu|&lt;r$ is called $S_\infty^r[\delta]$-stable.</li>
<li>For $r&lt;1$ we abbreviate with $A_\infty[\alpha]$- and $S_\infty[\delta]$-stable.
For $r=0$ the limit $r\to 0$ is meant.
An $A_\infty^0[90^\circ]$-stable method is called $L$-stable, see <a href="https://doi.org/10.1007/978-3-642-05221-7">Hairer/Wanner (2010)</a>, definition 3.7.</li>
</ol>
<p><strong>5. Examples.</strong>
The above stability characteristics manifest in all shapes and forms.</p>
<ol>
<li>The explicit Euler method, $y_{n+1} = y_n + h f(t_n,y_n)$, is $D$-stable but not $A$-stable, nor $A[\alpha]$-stable.</li>
<li>The implicit Euler method (=BDF1), $y_{n+1} = y_n + h f(t_{n+1},y_{n+1})$, and the BDF2 are $D$-stable and $A$-stable.</li>
<li>The BDF$i$ are $D$-stable for $i=1,\ldots,6$, and are unstable for all $i\ge7$, see
<a href="https://doi.org/10.1007/978-3-540-78862-1">Hairer/Wanner/Nørsett (2008)</a>, III.3, Thm 3.4.</li>
<li>The BDF$i$ ($i=1,\ldots,6$) are $A_\infty^0[\alpha]$-stable with $\alpha$ being
90°, 90°, 86.03°, 73.35°, 51.84°, 17.84°, respectively,
see <a href="https://doi.org/10.1007/s10543-019-00768-1">Akrivis/Katsoprinakis (2020)</a>.</li>
<li>All Tischer cyclic composite formulas, see <a href="">Tischer (1983)</a> and <a href="https://doi.org/10.1137/0904051">Tischer/Sacks-Davis (1983)</a>, are
$A_\infty^0[\alpha]$-stable and $S_\infty^0[\delta]$-stable and have equal to zero parasitic roots.
These properties are highly desirable for the integration of stiff systems.</li>
<li>The 5-step cyclic linear multistep method with 5 stages of order seven from <a href="https://doi.org/10.1002/zamm.19810610609">Mihelcic/Wingerath (1981)</a> is $A[44.8^\circ]$- and $S[6]$-stable. The $\alpha$ given in <a href="https://doi.org/10.1002/zamm.19810610609">Mihelcic/Wingerath (1981)</a> is slightly smaller.</li>
<li>The linear multistep formula of order nine from <a href="https://doi.org/10.1137/0906063">Gupta (1985)</a> used in DSTIFF is $S_\infty^{0.989}[2.086]$-stable.</li>
<li>The DSTIFF formula of order 10 from <a href="https://doi.org/10.1137/0906063">Gupta (1985)</a> is $A_\infty^{0.878}[63.74^\circ]$-stable.</li>
<li>The new formulas eTendler8 and eTendler9 are $S_\infty^0[\delta]$-stable but not $A[\alpha]$-stable.</li>
</ol>
<h2>3. Convergence result<a id=convergence></a></h2>
<p>The proof of the convergence result is conducted in the setting of matrix polynomials, see
<a href="https://www.sciencedirect.com/science/article/pii/0024379578900265/pdfft?pid=1-s2.0-0024379578900265-main.pdf">Gohberg/Lancaster/Rodman (1978)</a>
or <a href="https://doi.org/10.1137/1.9780898719024">Gohberg/Lancaster/Rodman (2009)</a>.</p>
<p>For the differential equation we can confine ourselves to the scalar case $n=1$, i.e., $\mathbb{C}$ instead of $\mathbb{C}^n$.
Otherwise we would have to add $A_i\otimes I_{n\times n}$, and $B_i\otimes I_{n\times n}$, etc. everywhere.</p>
<p><strong>6. Notation.</strong>
Let $(P_1,C_1,R_1)$ be the first companion triple
for the <a href="https://eklausmeier.goip.de/blog/2024/01-23-matrixpolynome">matrix polynomial</a></p>
<div class=math>
$$
    \rho(\mu) := I\mu^\ell+A_{\ell-1}\mu^{\ell-1}+\cdots+A_1\mu+A_0 \in \mathbb{C}^k,
$$
</div>
<p>of degree $\ell\ge1$.</p>
<p>Let $\mathopen|t_\text{end} - t_0\mathclose|\ne0$.
The step size $h$ is such that
$\mathopen|t_\text{end}-t_0\mathclose| / \mathopen|h\mathclose|$ is an integer.
$N$ is defined by $N\mathopen|h\mathclose| = \mathopen|t_\text{end} - t_0\mathclose|$.</p>
<p>Let</p>
<div class=math>
$$
\def\dcol{\mathop{\rm col\vphantom {dg}}}
\def\drow{\mathop{\rm row\vphantom {dg}}}
\def\diag{\mathop{\rm diag\vphantom {dg}}}
\def\bov#1#2{\overline{\bf #1}_{#2}} % boldface and overlined
\def\bopo{\bov P1} \def\boro{\bov R1} \def\bfR{{\bf R}}
\def\bovy#1{\bov Y{\!#1}} \def\ovbf#1{\overline{\bf #1}}
    P_1 := \begin{pmatrix} I&0&\ldots&0 \end{pmatrix} \in\mathbb{C}^{k\times k\ell},\qquad
    R_1 := \begin{pmatrix} 0\\ \vdots\\ 0\\ I \end{pmatrix} \in\mathbb{C}^{k\ell\times k}.
$$
</div>
<p>Let $I=I_{k\times k}$. The first companion matrix is</p>
<div class=math>
$$
    C_1 := \begin{pmatrix}
        0 & I & 0 & \ldots & 0\\
        0 & 0 & I & \ldots & 0\\
        \vdots & \vdots & \vdots & \ddots & \vdots\\
         & & & \ldots & I\\
        -A_0 & -A_1 & & \ldots & -A_{\ell-1} \end{pmatrix}
    \in\mathbb{C}^{k\ell\times k\ell}.
$$
</div>
<p>Further</p>
<div class=math>
$$
  \bopo := \diag_{\nu=0}^N P_1 = \begin{pmatrix}
      I & 0 & \ldots & 0 &   &   &        &   &        &   &   &        & \\
        &   &        &   & I & 0 & \ldots & 0 &        &   &   &        & \\
        &   &        &   &   &   &        &   & \ddots &   &   &        & \\
        &   &        &   &   &   &        &   &        & I & 0 & \ldots & 0 \end{pmatrix}
  \in\mathbb{C}^{(N+1)k\times(N+1)k\ell},
$$
</div>
<p>and</p>
<div class=math>
$$
    \boro := \diag\left(I_{k\ell\times k\ell},{\mskip 3mu} \diag_{\nu=1}^N R_1\right)
    = \begin{pmatrix}
    I_{k\ell\times k\ell} &&&\\
    & 0      &&\\
    & \vdots &&\\
    & 0      &&\\
    & I      &&\\
    & & \ddots &\\
    & && 0\\
    & && \vdots\\
    & && 0\\
    & && I \end{pmatrix} \in\mathbb{C}^{(N+1)k\ell\times(N+\ell)k}.
$$
</div>
<p>Let</p>
<div class=math>
$$
    \bfR := \dcol_{\nu=0}^{N+\ell-1} r_\nu =
    \begin{pmatrix} r_0\\ \vdots\\ r_{N+\ell-1} \end{pmatrix} \in\mathbb{C}^{(N+\ell)k}.
$$
</div>
<p><strong>7. Definition.</strong>  Let $T$ be an arbitrary square matrix of size $k\times k$.
The <em>bidiagonal operator</em> $[T]$ for the matrix $T$ of size
$(N+1)k\times(N+1)k$, is defined as follows:</p>
<div class=math>
$$
    \left[T\right] := \begin{pmatrix}
        I  &   & & \\
        -T & I & & \\
           &\ddots&\ddots&\\
           &   & -T & I \end{pmatrix}, \qquad
    \left[T\right]^{-1} = \begin{pmatrix}
        I      &         &        & \\
        T      & I       &        & \\
        \vdots & \vdots  & \ddots & \\
        T^N    & T^{N-1} & \ldots & I \end{pmatrix}.
$$
</div>
<p>See <a href="https://www.researchgate.net/publication/243095661_Analysis_of_Fixed-Stepsize_Methods">Skeel (1976)</a>.</p>
<p>For the product we have:
$[C_1]^{-1} \boro \in \mathbb{C}^{(N+1)k\ell \times (N+\ell)k}$.</p>
<p>Let $(X,T,Y)$ be an arbitrary standard triple.
Due to biorthogonality we have</p>
<div class=math>
$$
    \left( \dcol_{i=0}^{\ell-1} XT^i \right)^{-1} =
    \left( \drow_{i=0}^{\ell-1} T^iY \right) B,
$$
</div>
<p>with the block-Hankel-matrix $B$</p>
<div class=math>
$$
    B = \begin{pmatrix}
        A_1    & \ldots & A_\ell\\
        \vdots & \unicode{x22F0} & \\
        A_\ell &        & \\
    \end{pmatrix}, \qquad A_\ell = I.
$$
</div>
<p>See <a href="https://doi.org/10.1137/1.9780898719024">Gohberg/Lancaster/Rodman (2009)</a>, Prop. 2.1.</p>
<p>Further</p>
<div class=math>
$$
    \ovbf X := \diag_{\nu=0}^N X = \begin{pmatrix}
        X&&&\\ &X&&\\ &&\ddots&\\ &&&X \end{pmatrix}
$$
</div>
<p>and</p>
<div class=math>
$$
    \ovbf Y := \diag\left[\left(\dcol_{i=0}^{\ell-1}
    XT^i\right)^{-1}, \diag_{\nu=1}^N Y\right] = \begin{pmatrix}
        \left(\dcol_{i=0}^{\ell-1} XT^i\right)^{-1} &&&\\
        &Y&&\\ &&\ddots&\\ &&&Y \end{pmatrix}.
$$
</div>
<p>The special handling of the block matrix for $\boro$ and $\ovbf Y$
in the first “diagonal element” has its root in the
solution representation of the difference equation for <a href="https://eklausmeier.goip.de/blog/2024/01-23-matrixpolynome">matrix polynomials</a> of the form</p>
<div class=math>
$$
    x_n = XJ^n\left(\dcol_{i=0}^{\ell-1} XJ^i\right)\begin{pmatrix} y_0\\ \vdots\\ y_{\ell-1} \end{pmatrix}
        + X \sum_{\nu=0}^{n-1} J^{n-1-\nu} Y y_{\nu+\ell}.
$$
</div>
<p>For the case $\ell=1$ we have $\rho(\mu)=I\mu-A$ and the two matrices $P_1$ and $R_1$ reduce to the identity matrices of size $n\times n$.
The biorthogonality relation reduces to $X=Y^{-1}$ or $X^{-1}=Y$.</p>
<p><strong>8. Theorem:</strong>  (Discrete Lemma of Gronwall)
Let $0\le\eta_0\le\eta_1\le\ldots\le\eta_m$ be $(m+1)$ positive numbers.
Furthermore $\delta\ge0$, $h_j\ge0$ and $x_{j+1}=x_j+h_j$.
Assume</p>
<div class=math>
$$
    \varepsilon_0\le\eta_0\qquad\text{and}\qquad
    \varepsilon_{j+1}\le \eta_j + \delta\sum_{\nu=0}^j h_\nu\varepsilon_\nu,
        \qquad j=0,\ldots,m-1.
$$
</div>
<p>Then</p>
<div class=math>
$$
    \varepsilon_j\le \eta_j{\mskip 3mu}e^{\delta\cdot(x_j-x_0)},\qquad j=0,\ldots,m.
$$
</div>
<p><em>Proof:</em> See <a href="https://www.amazon.de/Gew%C3%B6hnliche-Differentialgleichungen-Einf%C3%BChrung-Theorie-Hochschultext/dp/3540152881/">Werner/Arndt (1986)</a>.
The case $\delta=0$ is simple, due to $e^0=1$.
Hence, let $\delta&gt;0$.
Starting the induction with $j=0$ is obvious, again due to $e^0=1$.
We perform induction from $j$ to $j+1$, assuming $\delta&gt;0$.
We have</p>
<div class=math>
$$
\begin{split}
  \varepsilon_{j+1} &{}\le\eta_{j+1}+\delta\sum_{\nu=0}^j h_\nu{\mskip 3mu}\varepsilon_\nu\\
      &{}\le\eta_{j+1}+\delta\sum_{\nu=0}^j h_\nu{\mskip 3mu}\eta_\nu{\mskip 3mu}e^{\delta\cdot(x_\nu-x_0)}\\
      &{}\le\eta_{j+1}\cdot\left(1+\delta\sum_{\nu=0}^j h_\nu{\mskip 3mu}e^{\delta\cdot(x_\nu-x_0)}\right)\\
      &{}\le\eta_{j+1} {\mskip 5mu} e^{\delta\cdot(x_{j+1}-x_0)}.\\
\end{split}
$$
</div>
<p>This is so because for the sum in parentheses we can estimate (the sum of a strictly monotonically increasing function)</p>
<div class=math>
$$
    \sum_{\nu=0}^j h_\nu{\mskip 3mu}e^{\delta\cdot(x_\nu-x_0)}
    \le \int_{x_0}^{x_{j+1}} e^{\delta\cdot(t-x_0)}{\mskip 3mu}dt
    =   \frac{1}{\delta} \left( e^{\delta(x_{j+1}-x_0)}-1 \right).
$$
</div>
<p>    ☐</p>
<p><strong>9. Theorem:</strong>  (Properties of $\dcol$, $\drow$, $\diag$, $[\cdot]$)
We have</p>
<ol>
<li>$\dcol A_\nu B_\nu = \diag A_\nu{\mskip 5mu}\dcol B_\nu$.</li>
<li>$\dcol A_\nu B = \left(\dcol A_\nu\right) B$;
  right distributivity of $\dcol$-operator.</li>
<li>$\drow A_\nu B_\nu = \drow A_\nu{\mskip 5mu}\diag B_\nu$.</li>
<li>$\drow AB_\nu = A{\mskip 3mu} \drow B_\nu$;
  left distributivity of $\drow$-operator.</li>
<li>$\diag A_\nu B_\nu = \diag A_\nu{\mskip 5mu}\diag B_\nu$.</li>
<li>$\left[S^{-1}TS\right] = \diag S^{-1}{\mskip 3mu} \left[T\right]{\mskip 3mu} \diag S$.</li>
<li>$\left[S^{-1}TS\right]^{-1} = \diag S^{-1}{\mskip 5mu}\left[T\right]^{-1} \diag S$.</li>
</ol>
<p><em>Proof:</em> Trivial computations.     ☐</p>
<p><strong>10. Theorem:</strong> (Solution of difference equation)
The general solution of the difference equation</p>
<div class=math>
$$
    x_{n+\ell}+A_{\ell-1}x_{n+\ell-1}+\cdots+A_0x_n = y_n, \qquad
    n=0,1,\ldots,N
$$
</div>
<p>is</p>
<div class=math>
$$
    x_n = P_1 C_1^n z_0  +  P_1 \sum_{\nu=0}^{n-1} C_1^{n-1-\nu} R_1 y_\nu.
$$
</div>
<p><em>Proof:</em> See <a href="https://doi.org/10.1137/1.9780898719024">Gohberg/Lancaster/Rodman (2009)</a>, Thm. 1.6.
    ☐</p>
<p><strong>11. Theorem:</strong>  (Representation theorem) Prerequisites:
$\hat u_n$ and $u_n$ are the solutions of the two difference equations</p>
<div class=math>
$$
\begin{split}
    \hat u_{n+\ell}+A_{\ell-1}\hat u_{n+\ell-1}+\cdots+A_0\hat u_n
        &= h{\mskip 3mu}\varphi(\hat u_{n+\ell},\ldots,\hat u_n)+r_{n+\ell} \\
    u_{n+\ell}+A_{\ell-1}u_{n+\ell-1}+\cdots+A_0u_n
        &= h{\mskip 3mu}\varphi(u_{n+\ell},\ldots,u_n)
\end{split}
\Bigg\} \qquad n=0,1,\ldots,N.
$$
</div>
<p>The “disturbances” $r_{n+\ell}$ correspond to $\hat u_{n+\ell}$.
We will use</p>
<div class=math>
$$
\begin{split}
    \delta_{n+\ell} &:= \hat u_{n+\ell} - u_{n+\ell}, \\
    \hat\delta_{n+\ell} &:= \varphi(\hat u_{n+\ell},\ldots,\hat u_n) -
        \varphi(u_{n+\ell},\ldots,u_n) \\
\end{split} \Bigg\} \qquad n=0,\ldots,N.
$$
</div>
<p>The difference equation for $\hat u_n$ has the starting values
$\hat u_i := u_i + r_i$, for $i=0,\ldots,\ell-1$.
Let $\delta_i := r_i$, for $i=0,\ldots,\ell-1$,
and $r_\nu := \delta_\nu := \hat\delta_\nu := 0$, for $\nu&gt;N$.</p>
<p>Proposition:</p>
<div class=math>
$$
\begin{split}
     \delta_n &= P_1 C_1^n \begin{pmatrix} \delta_0\\ \vdots\\ \delta_{\ell-1} \end{pmatrix}
          + P_1 \sum_{\nu=0}^{n-\ell} C_1^{n-1-\nu} R_1
               \left( r_{\nu+\ell} + h \hat\delta_{\nu+\ell} \right) \\
      &= P_1 C_1^n \begin{pmatrix} \delta_0\\ \vdots\\ \delta_{\ell-1} \end{pmatrix}
          + P_1 \sum_{\nu=0}^{n-\ell} C_1^{n-1-\nu} R_1 r_{\nu+\ell}
          + h\,P_1 \sum_{\nu=0}^{n-\ell} C_1^{n-1-\nu} R_1
          \hat\delta_{\nu+\ell}. \\
\end{split}
$$
</div>
<p><em>Proof:</em>  Follows immediately from the previous theorem.     ☐</p>
<p><strong>12. Theorem:</strong>  Prerequisite: Let
$C_1^i := {\bf0} \in \mathbb{C}^{k\ell\times k\ell}$, when $i&lt;0$.</p>
<p>Proposition: The reduced stability functional is norm-equivalent to the original stability functional, i.e.,</p>
<div class=math>
$$
    \left| [C_1]^{-1} \boro \bfR \right| \sim
    \left| \bopo [C_1]^{-1} \boro \bfR \right|.
$$
</div>
<p><em>Proof:</em>  In two parts.
We estimate each against the other.</p>
<p>(1) The estimation $\left|\bopo [C_1]^{-1} \boro \bfR\right| \le
\left|\bopo\right| \left|[C_1]^{-1} \boro \bfR\right|$ is obvious.
The row-norm of $\bopo$ is independent of $N$.</p>
<p>(2) We use</p>
<div class=math>
$$
    \left| C_1^n z_0 \right| \le
    \left| C_1^{\ell-1} \right| {\mskip 3mu} \left| C_1^{n-\ell+1} z_0 \right| =
    \left| C_1^{\ell-1} \right| {\mskip 3mu}
         \max_{i=0}^{\ell-1} \left| P_1 C_1^{n+i-\ell+1} z_0 \right|,
$$
</div>
<p>due to</p>
<div class=math>
$$
     \left| C_1^n z_0 \right| =
     \max_{i=0}^{\ell-1} \left| P_1 C_1^{n+i} z_0 \right|.
$$
</div>
<p>We can &quot;extract&quot; $C_1^{\ell-1}$ because the $\sup$-norm for $\left| \bopo [C_1]^{-1} \boro \bfR \right|$
still goes over all rows.
Finally</p>
<div class=math>
$$
     \left| C_1^{n-1-\nu} R_1 r_{\nu+\ell} \right| \le
     \left| C_1^{\ell-1} \right| {\mskip 3mu}
          \left| C_1^{n-\ell-\nu} R_1 r_{\nu+\ell} \right| =
     \left| C_1^{\ell-1} \right| {\mskip 3mu}
          \max_{i=0}^{\ell-1} \left| P_1 C_1^{n-\ell-\nu+i} R_1 r_{\nu+\ell} \right|,
$$
</div>
<p>due to $r_\nu := 0$, for $\nu&gt;N$.
    ☐</p>
<p><strong>13. Theorem:</strong>  (Estimation theorem)  Prerequisite:
Let $\varphi(\cdot)$ be Lipschitz-continuous in each component with
Lipschitz constant $K_i$.
The values $\delta_{\nu+\ell}$ and $\hat\delta_{\nu+\ell}$ are as above.</p>
<p>Proposition:</p>
<div class=math>
$$
\begin{split}
    \sum_{\nu=0}^{n-\ell} \mathopen| \hat\delta_{\nu+\ell} \mathclose| &\le
        K_\ell\mathopen|\delta_n\mathclose| + \left(\sum_{i=0}^\ell K_i\right)
        \left(\sum_{\nu=0}^{n-1} \mathopen|\delta_\nu\mathclose|\right)\\
    & \le \left(\sum_{i=0}^\ell K_i\right)
        \left(\sum_{\nu=0}^n \mathopen|\delta_\nu\mathclose|\right)\\
    & \le (\ell+1)\cdot\left(
        \max_{i=0}^\ell K_i\right)\sum_{\nu=0}^n \mathopen|\delta_\nu\mathclose|.\\
\end{split}
$$
</div>
<p><em>Proof:</em>  For $\nu=0,\ldots,n-1$ we have</p>
<div class=math>
$$
\begin{split}
     \mathopen| \hat\delta_{\nu+\ell} \mathclose|
     &= \left| \varphi(\hat u_{\nu+\ell},\ldots,\hat u_\nu)
          - \varphi(u_{\nu+\ell},\ldots,u_\nu) \right|\\
     &\le K_0 \mathopen|\delta_\nu\mathclose|  +  K_1 \mathopen|\delta_{\nu+1}\mathclose|
          +  \cdots  +  K_\ell \mathopen|\delta_{\nu+\ell}\mathclose|.\\
\end{split}
$$
</div>
<p>For ease of notation $\delta_\nu \gets \mathopen|\delta_\nu\mathclose|$
and $\hat\delta_\nu \gets \mathopen|\hat\delta_\nu\mathclose|$.
Hence,</p>
<div class=math>
$$
\begin{split}
    \sum_{\nu=0}^{n-\ell} \hat\delta_\nu &\le
        \left(K_0\delta_0+\cdots+K_\ell\delta_\ell\right)+
        \left(K_0\delta_1+\cdots+K_\ell\delta_{\ell+1}\right)+\cdots+
        \left(K_0\delta_{n-\ell+1}+\cdots+K_\ell\delta_n\right)\\
    &= K_0\left(\delta_0+\cdots+\delta_{n-\ell+1}\right)\\
    & \qquad+K_1\left(\delta_1+\cdots+\delta_{n-\ell+2} \right)\\
    & \qquad\qquad+\qquad\cdots\\
    & \qquad\qquad\qquad+K_\ell\left(\delta_\ell+\cdots+\delta_n\right).\\
\end{split}
$$
</div>
<p>Summation and estimate shows the first claim.
The second estimate follows from the first.
    ☐</p>
<p><strong>14. Main theorem:</strong>  Prerequisites:
The function $\varphi$ is Lipschitz-continuous in each component with
Lipschitz constants $K_i$, i.e.,</p>
<div class=math>
$$
    \left|\varphi(u_\ell,\ldots,\hat u_i,\ldots,u_0)-
        \varphi(u_\ell,\ldots,u_i,\ldots,u_0)\right|
    \le K_i\cdot\left|\hat u_i-u_i\right|,\quad\text{for}\quad i=0,\ldots,\ell.
$$
</div>
<p>The powers of the matrix $C_1$ are bounded by $D$,
$\left|C_1^\nu\right|\le D$, $\forall\nu\in\mathbb{N}$.
Let $\xi$ and $\hat\xi$ be</p>
<div class=math>
$$
    \xi := \left|P_1\right| D \left|R_1\right| K_\ell,\qquad
    \hat\xi := \left|P_1\right| D \left|R_1\right|
        \left(\sum_{i=0}^\ell K_i\right).
$$
</div>
<p>The value $\hat\xi$ is a multivariate function:
$\hat\xi=\hat\xi(P_1,D,R_1,K_0,\ldots,K_\ell)$.</p>
<p>Assume</p>
<div class=math>
$$
    \mathopen|h\mathclose| \lt  \begin{cases}
        1/\xi,&\text{if } \xi\gt 0;\\ \infty,&\text{if } \xi=0. \end{cases}
$$
</div>
<p>Proposition: (1) The two difference equations</p>
<div class=math>
$$
\begin{split}
    \hat u_{n+\ell}+A_{\ell-1}\hat u_{n+\ell-1}+\cdots+A_0\hat u_n
        &= h{\mskip 3mu}\varphi(\hat u_{n+\ell},\ldots,\hat u_n)+r_{n+\ell}\\
    u_{n+\ell}+A_{\ell-1}u_{n+\ell-1}+\cdots+A_0u_n
        &= h{\mskip 3mu}\varphi(u_{n+\ell},\ldots,u_n)\\
\end{split}
$$
</div>
<p>have a unique solution $u_{n+\ell}$ for each $n$ ,
and $\hat u_{n+\ell}$.</p>
<p>(2) For the maximal norm deviation $\left|\hat u_n-u_n\right|$
we have the two-sided estimation with respect to the error terms $r_n$,</p>
<div class=math>
$$
    c_1 \left| \bopo [C_1]^{-1} \boro \bfR \right|
    \le \left| \hat U-U\right|
    \le c_2 \left| \bopo [C_1]^{-1} \boro \bfR \right|
    \le c_3 N \left| \bfR \right| .
$$
</div>
<p>We use $U=(u_1,\ldots,u_N)$, and $\hat U=(\hat u_1,\ldots,\hat u_N)$.</p>
<p>(3) The positive constants $c_i$, for $i=1,2,3$, are given by</p>
<div class=math>
$$
    c_1 = \frac{1}{1+\hat\xi\mathopen|t_\text{end}-t_0\mathclose|},\qquad
    c_2 = \frac{1}{1-\mathopen|h\mathclose|\xi}
        \exp \frac{ \hat\xi\,\mathopen|t_\text{end}-t_0\mathclose| }{1-\mathopen|h\mathclose|\xi},\qquad
    c_3 = c_2 \left|P_1\right| D \left|R_1\right|.
$$
</div>
<p>(4) The estimate by (2) is independent from the choice of standard triple, i.e.,</p>
<div class=math>
$$
    \bov X1 [T_1]^{-1} \bovy1 \bfR = \bov X2 [T_2]^{-1} \bovy2 \bfR,
$$
</div>
<p>for two arbitrary standard triples $(X_1,T_1,Y_1)$ and $(X_2,T_2,Y_2)$
for the <a href="https://eklausmeier.goip.de/blog/2024/01-23-matrixpolynome">matrix polynomial</a> $\rho$.</p>
<p>(5) The reduced functional $\left|[C_1]^{-1} \boro \bfR \right|$
is also a stability functional and equivalent to the unreduced
functional, independent of $N$, i.e.,</p>
<div class=math>
$$
    \left| \bopo [C_1]^{-1} \boro \bfR \right| \sim
    \left| [C_1]^{-1} \boro \bfR \right|.
$$
</div>
<p>(6) Reduced stability functionals are each equivalent when changing standard triples.
They are not necessarily equal.
We have</p>
<div class=math>
$$
    \left| [T_1]^{-1} \bovy1 \bfR \right| \sim
    \left| [T_2]^{-1} \bovy2 \bfR \right|.
$$
</div>
<p><em>Proof:</em>  For abbreviation, we use</p>
<div class=math>
$$
    \delta_{n+\ell} := \hat u_{n+\ell} - u_{n+\ell},\qquad
    \hat\delta_{n+\ell} := \varphi(\hat u_{n+\ell},\ldots,\hat u_n) -
        \varphi(u_{n+\ell},\ldots,u_n).
$$
</div>
<p>For (1): For each $n$ both difference equations can be written as</p>
<div class=math>
$$
    \hat u_{n+\ell} = \hat F(\hat u_{n+\ell}) := h\varphi(\hat u_{n+\ell},\ldots{\mskip 5mu})+\hat\psi,
    \quad\text{resp.}\quad
    u_{n+\ell} = F(u_{n+\ell}) := h\varphi(u_{n+\ell},\ldots{\mskip 5mu})+\psi,
$$
</div>
<p>These are contractive if $\mathopen|h\mathclose| K_\ell &lt; 1$.
Therefore, we have uniqueness due to $\mathopen|h\mathclose|\xi&lt;1$.</p>
<p>For (2): a) According to the representation theorem</p>
<div class=math>
$$
\begin{split}
    \left|P_1 C_1^n \begin{pmatrix} r_0\\ \vdots\\ r_{\ell-1} \end{pmatrix} +
        P_1 \sum_{\nu=0}^{n-1} C_1^{n-1-\nu} R_1 r_{\nu+\ell}\right|
    &\le \mathopen|\delta_n\mathclose| +
        \mathopen|h\mathclose| \left|P_1\right| D \left|R_1\right|
        \sum_{\nu=0}^{n-\ell} \left|\hat\delta_{\nu+\ell}\right| \\
    &\le \mathopen|\delta_n\mathclose| + \mathopen|h\mathclose| \left|P_1\right| D \left|R_1\right|
        \left(\sum_{i=0}^\ell K_i\right)
        \sum_{\nu=0}^{n-1} \mathopen|\delta_\nu\mathclose| \\
    &\le \mathopen|\delta_n\mathclose| + \mathopen|t_\text{end}-t_0\mathclose| \left|P_1\right|
        D \left|R_1\right| \left(\sum_{i=0}^\ell K_i\right)
        \sup_{\nu=0}^{n-1} \mathopen|\delta_\nu\mathclose| \\
    &\le \sup_{\nu=0}^n \mathopen|\delta_\nu\mathclose| + \mathopen|t_\text{end}-t_0\mathclose|
        \left|P_1\right| D \left|R_1\right| \left(\sum_{i=0}^\ell K_i\right)
        \sup_{\nu=0}^n \mathopen|\delta_\nu\mathclose| \\
    &= \left( 1+\hat\xi\mathopen|t_\text{end}-t_0\mathclose| \right)
        \sup_{\nu=0}^n \mathopen|\delta_\nu\mathclose| . \\
\end{split}
$$
</div>
<p>Here we used</p>
<div class=math>
$$
    \sum_{\nu=0}^{n-\ell} \left|\hat\delta_{\nu+\ell}\right| \le
        K_\ell \mathopen|\delta_n\mathclose| + \left(\sum_{i=0}^{\ell-1} K_i\right)
        \left(\sum_{\nu=0}^{n-1} \mathopen|\delta_\nu\mathclose|\right)
$$
</div>
<p>of the above estimation theorem.
We employed
$N\mathopen|h\mathclose| = \mathopen|t_\text{end}-t_0\mathclose|$ and finally
$\sum_{\nu=0}^n \mathopen|\delta_\nu\mathclose| \le
N\sup_{\nu=0}^{n-1} \mathopen|\delta_\nu\mathclose|$.
Multiplying by</p>
<div class=math>
$$
    \frac{ 1 }{ 1 + \hat\xi\, \mathopen|t_\text{end}-t_0\mathclose| }
$$
</div>
<p>then this gives the first inequality from (2), and also gives $c_1$.</p>
<p>b) Again using the representation theorem and using norms</p>
<div class=math>
$$
\begin{split}
    \mathopen|\delta_n\mathclose| &\le \mathopen|h\mathclose|{\mskip 3mu}\left|P_1\right| D \left|R_1\right|
        \sum_{\nu=0}^{n-\ell} \left|\hat\delta_{\nu+\ell}\right| +
        \left| P_1 C_1^n \begin{pmatrix} r_0\\ \vdots\\ r_{\ell-1} \end{pmatrix}
            + P_1 \sum_{\nu=0}^{n-1} C_1^{n-1-\nu} R_1
            r_{\nu+\ell} \right| \\
    &\le \mathopen|h\mathclose| {\mskip 3mu} \underbrace{ \left|P_1\right| D \left|R_1\right|
            \left( \sum_{i=0}^\ell K_i \right) }_{\displaystyle{{}=\hat\xi}}
        \sum_{\nu=0}^{n-1} \mathopen|\delta_\nu\mathclose| + \mathopen|h\mathclose| {\mskip 3mu}
        \underbrace{ \left|P_1\right| D \left|R_1\right| K_\ell }
            _{\displaystyle{{}=\xi}} \mathopen|\delta_n\mathclose| +
        \left| \bopo [C_1]^{-1} \boro \bfR \right|, \\
\end{split}
$$
</div>
<p>We make use of the estimation theorem once more</p>
<div class=math>
$$
    \left(1-\mathopen|h\mathclose|\xi\right) \mathopen|\delta_n\mathclose| \le \mathopen|h\mathclose|\hat\xi
        \sum_{\nu=0}^{n-1} \mathopen|\delta_\nu\mathclose| +
        \left| \bopo [C_1]^{-1} \boro \bfR \right|.
$$
</div>
<p>As $\mathopen|h\mathclose|&lt;1/\xi$,
we have $1-\mathopen|h\mathclose|\xi&gt;0$.
Using the discrete lemma of Gronwall and using</p>
<div class=math>
$$
    \varepsilon_{j+1} \gets \mathopen|\delta_n\mathclose|,\qquad
    \eta_j \gets \frac{\left|\bopo[C_1]^{-1}\boro\bfR\right|}{1-\mathopen|h\mathclose|\xi},
    \qquad
    \delta \gets \frac{\hat\xi}{1-\mathopen|h\mathclose|\xi},\qquad
    h_\nu \gets \mathopen|h\mathclose|,
$$
</div>
<p>we get the estimate</p>
<div class=math>
$$
    \mathopen|\delta_n\mathclose| \le
    \frac{ \left|\bopo[C_1]^{-1}\boro\bfR\right| }{ 1-\mathopen|h\mathclose|\xi }
        \exp \frac{\hat\xi\,\mathopen|t_\text{end}-t_0\mathclose|}{1-\mathopen|h\mathclose|\xi}.
$$
</div>
<p>This shows the constant $c_2$.
The constant $c_3$ results from a typical estimation.</p>
<p>For (4): The standard triple $(X_1,T_1,Y_1)$ is similar to the
standard triple $(X_2,T_2,Y_2)$ iff</p>
<div class=math>
$$
    X_2=X_1S,\qquad T_2=S^{-1}T_1S,\qquad Y_2=S^{-1}Y_1,
$$
</div>
<p>or</p>
<div class=math>
$$
    X_1 = X_2 S^{-1}, \qquad T_1 = S T_2 S^{-1}, \qquad Y_1 = S Y_2.
$$
</div>
<p>Now we have</p>
<div class=math>
$$
\begin{split}
    \bov X1 [T_1]^{-1} \bovy1 \bfR
    &= \left(\diag_{\nu=0}^N X_1\right) [T_1]^{-1}
          \diag\left[ \left(\drow_{i=0}^{\ell-1} T_1^iY\right) B, {\mskip 3mu}
          \diag_{\nu=1}^N Y_1 \right] \bfR \\
    &= \left(\diag_{\nu=0}^N(X_2S^{-1})\right) [ST_2S^{-1}]^{-1}
          \diag\left\{ \drow_{i=0}^{\ell-1}\left[
          \left(ST_2S^{-1}\right)^i SY_2\right] B, {\mskip 3mu}
          \diag_{\nu=1}^N (SY_2) \right\} \bfR \\
    &= \left(\diag_{\nu=0}^N X_2\right) [T_2]^{-1}
          \diag\left[ \left(\drow_{i=0}^{\ell-1} T_2^iY\right) B, {\mskip 3mu}
          \diag_{\nu=1}^N Y_2 \right] \bfR \\
    &= \bov X2 [T_2]^{-1} \bovy2 \bfR. \\
\end{split}
$$
</div>
<p>For (5): This was already proved.</p>
<p>For (6): As in (4)</p>
<div class=math>
$$
\begin{split}
    [T_1]^{-1} \bovy1 \bfR
    &= [ST_2S^{-1}]^{-1} \diag\left\{ \drow_{i=0}^{\ell-1}\left[
       \left(ST_2S^{-1}\right)^i SY_2\right] B, {\mskip 3mu}
       \diag_{\nu=1}^N SY_2 \right\} \bfR \\
    &= \left(\diag_{\nu=0}^N S\right) [T_2]^{-1} \diag\left[
       \drow_{i=0}^{\ell-1} \left(T_2^iY_2\right) B,{\mskip 3mu} \diag_{\nu=1}^N Y_2
       \right] \bovy2 \bfR \\
    &= \left(\diag_{\nu=0}^N S\right) [T_2]^{-1} \bovy2 \bfR . \\
\end{split}
$$
</div>
<p>Multiplying from the left with $\diag_{\nu=0}^N S^{-1}$ then this gives</p>
<div class=math>
$$
    [T_2]^{-1} \bovy2 \bfR =
    \left(\diag_{\nu=0}^N S^{-1}\right) [T_1]^{-1} \bovy1 \bfR.
$$
</div>
<p>Therefore, both stability functionals are equivalent.
    ☐</p>
<p>Similar results can be found in <a href="https://doi.org/10.1007/BF02252202">Albrecht (1978)</a> and <a href="https://doi.org/10.1007/BF01389876">Albrecht (1985)</a>,
who also analyzes the left eigenvectors, which under some circumstances allow a higher convergence rate.</p>
<p>With the main theorem we now have the promised convergence result for a consistent method, i.e., we have the classical result:</p>
<ul>
<li>Consistency + $D$-Stability $\Rightarrow$ Convergence.</li>
</ul>
<h2>4. New cyclic linear multistep formulas<a id=formulas></a></h2>
<p>We now stick to cyclic linear multistep methods of the form</p>
<div class=math>
$$
    \sum_{j=-k+1}^\ell \left[ \alpha_{ij} y_{m\ell+j} - h \beta_{ij} \dot y_{m\ell+j} \right] = 0, \quad i=1,\ldots,\ell.
$$
</div>
<p>Building on the work of <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>
we combine the base formulas given in his chapter 4.2 and use the same restrictions R1-R4.
Linear combinations of elements in the kernel of $C_{p,k}$ are also in the kernel.</p>
<p><strong>15. Restrictions.</strong> Now for $i=1,\ldots,\ell$:</p>
<ul>
<li>R1. $\alpha_{ij} = \beta_{ij} = 0,$ for $i&lt;j$</li>
<li>R2. $\beta_{ij} = 0$ for $j\le0$ and $\beta_{ii}\ne0$</li>
<li>R3. $\alpha_{ij} = 0$ for $j &lt; -k + i$</li>
<li>R4. $p_i \ge k$, where $p_i$ is the consistency order of the $i$-th stage</li>
</ul>
<p>By design of R1-R4 all Tendler-like cycles start with the BDF of the same order.
Further, if the Tendler-like formula is $A[\alpha]$-stable, it is also automatically $A_\infty^0[\alpha]$-stable.</p>
<p>Restriction R3 has its origin in an implementation detail of <a href="https://doi.org/10.1145/356502.356495">STINT</a>, where the predictor for $y_{m\ell+i}$ for each stage $i$  in the cycle is built <em>only</em> from the backward differences of $y_{m\ell+i-1}$,
see <a href="">Tendler/Bickart/Picel (1976)</a>.
In principal, however, at each stage $i&gt;1$, all the previous values are available.
In contrast, the Tischer formulas are not subject to the restriction R3.</p>
<p><strong>16. Characteristics.</strong> The new cyclic linear multistep formulas are called eTendler3–9 (enhanced Tendler3–9).
These kind of formulas are a natural extension of the BDF to cyclic form.
From an implementation viewpoint, they are advantageous because each cycle requires no derivatives from the previous cycle.
Therefore, no interpolation and storage for $f(t_n,y_n)$-values is required.
In contrast, Tischer's formulas need storage and interpolation for both, $y_n$ and $f(t_n,y_n)$.</p>
<p>It is worth noting that although the new formulas all start with BDF$i$ and the BDF$i$ are not $D$-stable for $i\ge7$, the new cyclic formulas are all $D$-stable.
In a cyclic method one or all constituent multistep methods might be unstable, nevertheless the cycle itself can be $D$-stable.</p>
<p>For Tischer's formulas see <a href="">Tischer (1983)</a>, <a href="https://doi.org/10.1137/0904051">Tischer/Sacks-Davis (1983)</a>, and <a href="https://dl.acm.org/doi/10.1145/214408.214417">Tischer/Gupta (1985)</a>.
All Tischer formulas have a cycle length of two.</p>
<p>While Tendler apparently searched in an entirely manual way, we searched in an incremental and random <a href="https://github.com/eklausme/c/blob/master/stabregion2.c">machine-assisted</a> way.
I.e., we searched in a hypercube of the parameter space by either providing a starting point, or letting those starting points be chosen by a random number generator.
Our search criteria were Widlund-wedge $\alpha$, Widlund-distance $\delta$, and parasitic root modulus.</p>
<p>The formulas from Tendler from 1973 were our baseline.
Clearly, we wanted to improve them, or at least find possible limits.
So in table 1 we summarize their characteristics:</p>
<ul>
<li>$p$ is the <a href="https://eklausmeier.goip.de/blog/2024/06-11-konvergenzresultate-fuer-feste-schrittweiten">convergence order</a></li>
<li>$\ell$ is the <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">cycle length</a> of the Tendler formulas</li>
<li>abs(root) is the magnitude of the parasitic root</li>
<li>$\alpha$ is the Widlund-wedge angle</li>
<li>$\delta$ is the Widlund-distance</li>
</ul>
<table>
<thead>
<tr>
<th>$p$</th>
<th>$\ell$</th>
<th>abs(root)</th>
<th>$\alpha$(Tendler)</th>
<th>$\delta$(Tendler)</th>
<th></th>
<th>$\alpha$(Tischer)</th>
<th>$\delta$(Tischer)</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>3</td>
<td>0</td>
<td>90°</td>
<td>0</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>0.333333333</td>
<td>90°</td>
<td>0</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td>0.55371901</td>
<td>89.427°</td>
<td>0.004776</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>0.35406989</td>
<td>80.882047°</td>
<td>0.244157</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>5</td>
<td>4</td>
<td>0.42931855</td>
<td>77.477315°</td>
<td>1.421472</td>
<td></td>
<td>86.649352°</td>
<td>0.040844</td>
</tr>
<tr>
<td>6</td>
<td>4</td>
<td>0.52827598</td>
<td>63.245842°</td>
<td>2.933167</td>
<td></td>
<td>76.311756°</td>
<td>0.280752</td>
</tr>
<tr>
<td>7</td>
<td>4</td>
<td>0.66669430</td>
<td>33.531759°</td>
<td>10.179501</td>
<td></td>
<td>57.663061°</td>
<td>0.959187</td>
</tr>
<tr>
<td>8</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td></td>
<td>22.149242°</td>
<td>2.534082</td>
</tr>
</tbody>
</table>
<p>The new cyclic linear multistep formulas have better stability characteristics order by order than the original Tendler formulas.
They in turn have better stability characteristics than the BDF.</p>
<table>
<thead>
<tr>
<th>$p$</th>
<th>$\ell$</th>
<th>abs(root)</th>
<th>$\alpha$(new)</th>
<th>$\delta$(new)</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>3</td>
<td>3</td>
<td>0.70756795</td>
<td>89.72423°</td>
<td>0.00164</td>
<td>worse root modulus, better $\delta$</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>0.28351644</td>
<td>84.91216°</td>
<td>0.07106</td>
<td>better modulus, better $\alpha$, better $\delta$</td>
</tr>
<tr>
<td>5</td>
<td><strong>3</strong></td>
<td>0.48870093</td>
<td>77.81321°</td>
<td>0.42370</td>
<td>shorter cycle length, better $\alpha$, better $\delta$</td>
</tr>
<tr>
<td>6</td>
<td>4</td>
<td>0.29026688</td>
<td>71.63806°</td>
<td>1.03854</td>
<td>better modulus, better $\alpha$, better $\delta$</td>
</tr>
<tr>
<td>7</td>
<td>4</td>
<td>0.57300425</td>
<td>55.13529°</td>
<td>3.87902</td>
<td>better modulus, better $\alpha$, better $\delta$</td>
</tr>
<tr>
<td>8</td>
<td>4</td>
<td>0.61600197</td>
<td>none</td>
<td>15.05503</td>
<td>no other formula with $\alpha&gt;0.1$ found</td>
</tr>
<tr>
<td>9</td>
<td><strong>5</strong></td>
<td>0.76270334</td>
<td>none</td>
<td>38.22753</td>
<td>cycle length &gt; 4 seems to be required</td>
</tr>
</tbody>
</table>
<p><strong>17. Higher order.</strong>
While a formula not being $A[\alpha]$-stable is of limited value for a pure stiff ODE solver, it is nevertheless of interest for a
type-insensitive code, see <a href="https://doi.org/10.2307/2007622">Shampine (1982)</a> and <a href="https://doi.org/10.1007/BF01933714">Norsett/Thomsen (1986)</a>, switching between fixed point and Newton iteration.
The type-insensitive code LSODA from <a href="https://doi.org/10.1137/0904010">Petzold (1983)</a> has been found useful and competitive in <a href="https://doi.org/10.1038/s41598-021-82196-2">Städter et al (2021)</a>.
Higher order methods are required for orbit calculations with higher precision, see <a href="https://doi.org/10.1007/978-3-642-58351-3">Montenbruck/Gill (2000)</a> chapter 4.1.6.</p>
<p>The stability mountain of the new order 3 method eTendler3 is shown in the first figure.</p>
<p><img src="https://eklausmeier.goip.de/img/eTendler3-StabilityMountain.jpg" alt="" title="Stability mountain of eTendler3"></p>
<p>Our search results based on restrictions R1-R4 are as follows:</p>
<ol>
<li>We didn't find any formula of order 8 and higher with an $\alpha$ of any significance, even when allowing for a huge number of stages.
It is therefore conjectured that there aren't any methods of this kind.</li>
<li>We didn't find any formula of order 3 and 4 which actually is $A$-stable, in contrast to Tischer's results.
We conjecture that there isn't any.</li>
</ol>
<p><strong>18. The formulas.</strong>
$c_{i,p+1}$ is the unscaled error constant of the $i$-th stage.
$\eta_{i,p+1}$ is the <em>scaled error constant</em> for the eTendler formulas.
Likewise, $\eta^o_{i,p+1}$ are the scaled error constants for the original Tendler formulas,
and $\eta^T_{i,p+1}$ are the scaled error constants for the Tischer formulas.</p>
<div class=math>
$$
    \eta_{i,p+1} = -\frac{1}{(p+1)!} \frac{1}{\alpha_{ii}} c_{i,p+1}
$$
</div>
<p>The minus-sign is only there as most formulas in this manuscript have negative values.</p>
<p>For linear multistep methods and cyclic methods the $\alpha_{ii}$ cannot be zero.
However, for a block-implicit method the $\alpha_{ii}$ can be zero,
see the order 2, 4, 6, 8 and 10 methods in <a href="https://doi.org/10.1007/BF01951938">Bickart/Picel (1973)</a>.
More on the scaled error constant in <a href="">Tischer (1983)</a>, appendix B, and <a href="https://doi.org/10.1007/BF01389876">Albrecht (1985)</a>, chapter 6.</p>
<p>The error constants are rounded to five digits after the decimal point.
The coefficients of the formulas are exact.</p>
<p>Order 3 and 4.</p>
<div class=math>
$$
\begin{array}{r|rrr}
p=3 & 1 & 2 & 3\\
\hline
-2 &   -2 &    0 &    0\\
-1 &    9 & -153 &    0\\
0 &  -18 &  750 &  -23\\
1 &   11 & -1131 &  966\\
2 &    0 &  534 & -1365\\
3 &    0 &    0 &  422\\
\hline
-2 &    0 &    0 &    0\\
-1 &    0 &    0 &    0\\
0 &    0 &    0 &    0\\
1 &    6 & -246 & -384\\
2 &    0 &  336 & -378\\
3 &    0 &    0 &  264\\
\hline
\eta_{i,p+1} & 0.13636 & 0.19569 & 0.15521 \\
\eta^o_{i,p+1} & 0.13636 & 0.13636 & 0.16667 \\
\eta^T_{i,p+1} & 1.24411 & -0.56732 \\ 
\end{array}
\qquad\qquad
\begin{array}{r|rrr}
p=4 & 1 & 2 & 3\\
\hline
-3 &    3 &    0 &    0\\
-2 &  -16 &   16 &    0\\
-1 &   36 &  -90 &   15\\
0 &  -48 &  234 &  -94\\
1 &   25 & -214 &  162\\
2 &    0 &   54 & -114\\
3 &    0 &    0 &   31\\
\hline
-3 &    0 &    0 &    0\\
-2 &    0 &    0 &    0\\
-1 &    0 &    0 &    0\\
0 &    0 &    0 &    0\\
1 &   12 &  -84 &   48\\
2 &    0 &   36 &  -60\\
3 &    0 &    0 &   24\\
\hline
\eta_{i,p+1} & 0.096 & 0.21111 & 0.30323 \\
\eta^o_{i,p+1} & 0.096 & 0.096 & 0.10753 \\
\eta^T_{i,p+1} & 1.25579 & -1.30782 \\
\end{array}
$$
</div>
<p>Order 5 and 6.
$\eta^o_{4,p+1} = 0.10320$ for $p=5$ where Tendler's formula needs four stages.</p>
<div class=math>
$$
\begin{array}{r|rrr}
p=5 & 1 & 2 & 3\\
\hline
-4 &  -12 &    0 &    0\\
-3 &   75 &  -66 &    0\\
-2 & -200 &  425 &  -93\\
-1 &  300 & -1200 &  615\\
0 & -300 & 2100 & -1880\\
1 &  137 & -1550 & 2460\\
2 &    0 &  291 & -1515\\
3 &    0 &    0 &  413\\
\hline
-4 &    0 &    0 &    0\\
-3 &    0 &    0 &    0\\
-2 &    0 &    0 &    0\\
-1 &    0 &    0 &    0\\
0 &    0 &    0 &    0\\
1 &   60 & -600 &  540\\
2 &    0 &  180 & -540\\
3 &    0 &    0 &  240\\
\hline
\eta_{i,p+1} & 0.07299 & 0.17182 & 0.16223 \\
\eta^o_{i,p+1} & 0.07299 & 0.07299 & 0.07210 \\
\eta^T_{i,p+1} & 1.13388 & -1.34700 \\
\end{array}
\qquad\qquad
\begin{array}{r|rrrr}
p=6 & 1 & 2 & 3 & 4\\
\hline
-5 &   10 &    0 &    0 &    0\\
-4 &  -72 &   38 &    0 &    0\\
-3 &  225 & -276 &  145 &    0\\
-2 & -400 &  875 & -1054 &   41\\
-1 &  450 & -1600 & 3350 & -289\\
0 & -360 & 1950 & -6200 &  830\\
1 &  147 & -1388 & 7075 & -1880\\
2 &    0 &  401 & -4970 & 2935\\
3 &    0 &    0 & 1654 & -1991\\
4 &    0 &    0 &    0 &  354\\
\hline
-5 &    0 &    0 &    0 &    0\\
-4 &    0 &    0 &    0 &    0\\
-3 &    0 &    0 &    0 &    0\\
-2 &    0 &    0 &    0 &    0\\
-1 &    0 &    0 &    0 &    0\\
0 &    0 &    0 &    0 &    0\\
1 &   60 & -240 &  300 &  300\\
2 &    0 &  180 & -600 & -240\\
3 &    0 &    0 &  720 & -600\\
4 &    0 &    0 &    0 &  180\\
\hline
\eta_{i,p+1} & 0.05831 & 0.07838 & 0.07255 & 0.10048 \\
\eta^o_{i,p+1} & 0.05831 & 0.05900 & 0.05736 & 0.10557 \\
\eta^T_{i,p+1} & 0.94952 & -0.92618 \\
\end{array}
$$
</div>
<p>Order 7.</p>
<div class=math>
$$
\begin{array}{r|rrrr}
p=7 & 1 & 2 & 3 & 4\\
\hline
-6 &  -60 &    0 &    0 &    0\\
-5 &  490 & -280 &    0 &    0\\
-4 & -1764 & 2310 & -270 &    0\\
-3 & 3675 & -8442 & 2233 & -474\\
-2 & -4900 & 18025 & -8197 & 3920\\
-1 & 4410 & -25200 & 17675 & -14413\\
0 & -2940 & 25830 & -25550 & 31430\\
1 & 1089 & -14910 & 23695 & -42770\\
2 &    0 & 2667 & -12383 & 36904\\
3 &    0 &    0 & 2797 & -20615\\
4 &    0 &    0 &    0 & 6018\\
\hline
-6 &    0 &    0 &    0 &    0\\
-5 &    0 &    0 &    0 &    0\\
-4 &    0 &    0 &    0 &    0\\
-3 &    0 &    0 &    0 &    0\\
-2 &    0 &    0 &    0 &    0\\
-1 &    0 &    0 &    0 &    0\\
0 &    0 &    0 &    0 &    0\\
1 &  420 & -4200 & 2100 & -1680\\
2 &    0 & 1260 & -2940 & 3360\\
3 &    0 &    0 & 1260 & -2940\\
4 &    0 &    0 &    0 & 2520\\
\hline
\eta_{i,p+1} & 0.04821 & 0.08718 & 0.07955 & 0.06539 \\
\eta^o_{i,p+1} & 0.04821 & 0.04821 & 0.06281 & 0.06765 \\
\eta^T_{i,p+1} & 0.82959 & -0.70538 \\
\end{array}
$$
</div>
<p>Order 8.</p>
<div class=math>
$$
\begin{array}{r|rrrr}
p=8 & 1 & 2 & 3 & 4\\
\hline
-7 &  105 &    0 &    0 &    0\\
-6 & -960 & 10560 &    0 &    0\\
-5 & 3920 & -96740 & 4350 &    0\\
-4 & -9408 & 396116 & -40060 & 11580\\
-3 & 14700 & -954618 & 165256 & -106094\\
-2 & -15680 & 1501850 & -402822 & 434406\\
-1 & 11760 & -1623860 & 646450 & -1046346\\
0 & -6720 & 1267140 & -731500 & 1640450\\
1 & 2283 & -701166 & 591360 & -1801730\\
2 &    0 & 200718 & -290706 & 1438794\\
3 &    0 &    0 & 57672 & -782406\\
4 &    0 &    0 &    0 & 211346\\
\hline
-7 &    0 &    0 &    0 &    0\\
-6 &    0 &    0 &    0 &    0\\
-5 &    0 &    0 &    0 &    0\\
-4 &    0 &    0 &    0 &    0\\
-3 &    0 &    0 &    0 &    0\\
-2 &    0 &    0 &    0 &    0\\
-1 &    0 &    0 &    0 &    0\\
0 &    0 &    0 &    0 &    0\\
1 &  840 & -56280 & 25200 & 21000\\
2 &    0 & 76440 & -64680 & 2520\\
3 &    0 &    0 & 24360 & -81480\\
4 &    0 &    0 &    0 & 81480\\
\hline
\eta_{i,p+1} & 0.04088 & 0.04621 & 0.06424 & 0.04804 \\
\eta^T_{i,p+1} & 0.73907 & -0.55211 \\
\end{array}
$$
</div>
<p>Order 9.</p>
<div class=math>
$$
\begin{array}{r|rrrrr}
p=9 & 1 & 2 & 3 & 4 & 5\\
\hline
-8 & -280 &    0 &    0 &    0 &    0\\
-7 & 2835 & -5285 &    0 &    0 &    0\\
-6 & -12960 & 53730 & -13715 &    0 &    0\\
-5 & 35280 & -246960 & 138885 & -24780 &    0\\
-4 & -63504 & 677376 & -634992 & 250764 & -22331\\
-3 & 79380 & -1233036 & 1728720 & -1145544 & 225768\\
-2 & -70560 & 1569960 & -3111108 & 3115434 & -1029642\\
-1 & 45360 & -1446480 & 3883740 & -5600364 & 2789808\\
0 & -22680 & 1028160 & -3422160 & 6991530 & -4946214\\
1 & 7129 & -486351 & 2295792 & -6110664 & 6531756\\
2 &    0 & 88886 & -1194345 & 3889494 & -5933718\\
3 &    0 &    0 & 329183 & -2019384 & 3364992\\
4 &    0 &    0 &    0 & 653514 & -1609983\\
5 &    0 &    0 &    0 &    0 & 629564\\
\hline
-8 &    0 &    0 &    0 &    0 &    0\\
-7 &    0 &    0 &    0 &    0 &    0\\
-6 &    0 &    0 &    0 &    0 &    0\\
-5 &    0 &    0 &    0 &    0 &    0\\
-4 &    0 &    0 &    0 &    0 &    0\\
-3 &    0 &    0 &    0 &    0 &    0\\
-2 &    0 &    0 &    0 &    0 &    0\\
-1 &    0 &    0 &    0 &    0 &    0\\
0 &    0 &    0 &    0 &    0 &    0\\
1 & 2520 & -98280 & -80640 & -40320 & -241920\\
2 &    0 & 35280 & -63000 & -73080 & -168840\\
3 &    0 &    0 & 118440 & 35280 & 171360\\
4 &    0 &    0 &    0 & 229320 & 171360\\
5 &    0 &    0 &    0 &    0 & 216720\\
\hline
\eta_{i,p+1} & 0.03535 & 0.05198 & 0.03743 & 0.03425 & 0.03217 \\
\end{array}
$$
</div>
<h2>5. Numerical results<a id=numericalresults></a></h2>
<p>We will now use various formulas and conduct more than 5000 numerical tests.
Before implementing new formulas in a variable step size and variable order computer code
with convergence tests, nonlinear equation solver, interpolation, dozens of heuristics, type-insensitive switching logic, etc., we want to ascertain that the formulas work as intended.
Creating such a computer code is a substantial software development effort.</p>
<p>The first parameterized differential equation tests the resilience against stiffness.
The second differential equations tests for accuracy in the presence of large modulus of the higher derivatives.</p>
<p><strong>19. Dahlquist's equation.</strong> We tested the BDF, <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler's formulas</a>, new Tendler-like formulas, and <a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Tischer's formulas</a> on the classical test equation</p>
<div class=math>
$$
    \dot y(t) = \lambda\, y(t) \in \mathbb{C}, \quad y(t_0) = e^{\lambda t_0}, \quad t\in[t_0, t_\text{end}].
$$
</div>
<p>We used</p>
<div class=math>
$$
    \lambda = r e^{i \varphi}, \quad t_0=0, \quad t_\text{end}=-40, \quad h\lt 0.
$$
</div>
<p>The radius is fixed to $r=100$, and $\varphi$ varies from 5° to 90° in steps of 5°.
$\varphi$ directly tests the Widlund-wedge angle of the formula.</p>
<p>The step size $h$ for each formula is chosen as $h=-0.1$, then $h=-0.01$, finally $h=-0.001$.</p>
<p>The above differential equation is now solved with the following formulas:</p>
<ol>
<li>BDF of order 1–6</li>
<li>Original Tendler formulas of order 3–7. Note: Tendler's formulas of order 1 and 2 are just the BDF1 and BDF2.</li>
<li>New <a href="https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas">Tendler-like formulas</a> of order 3–9</li>
<li>Tischer's formulas of order 2–8 using $s=0$, see <a href="https://doi.org/10.1137/0904051">Tischer/Sacks-Davis (1983)</a> for the meaning of $s$</li>
</ol>
<p>This creates 1350 data points.
Multiplying by two hardware architectures and two precisions yields 5400 records.</p>
<p><strong>20. Global error.</strong> We report the <em>summed global error</em> computed as</p>
<div class=math>
$$
    g_\text{err} = \sum_{i=0}^n |y(t_i) - y_i|, \quad n = \frac{t_\text{end}-t_0}{h}.
$$
</div>
<p>Computations were done in double precision (<code>double complex</code> in the C programming language).</p>
<p>Results are <a href="https://eklausmeier.goip.de/blog/2025/12-17-comparing-bdf-vs-tendler-vs-tischer">here</a>.</p>
<p>As the global error $|y(t_i) - y_i|$ per step varies wildly between $10^{-324}$ and $10^{+304}$, we computed</p>
<div class=math>
$$
    \hat g_\text{err} = \begin{cases}
        5, & \text{if } g_\text{err} \gt  30 \text{ or NaN}\\
        \log_{10} g_\text{err}, & \text{else}
    \end{cases}
$$
</div>
<p>Less is better.
That is what is shown in the second figure.</p>
<p><img src="https://eklausmeier.goip.de/img/BDFvsTendlervsTischer.jpg" alt="" title="Accuracy of BDF vs. Tendler vs. New vs. Tischer"></p>
<p>One can clearly see that the higher-order methods quickly lose precision when a higher Widlund-wedge angle is required.
This is the reason why <em>none</em> of the computer codes GEAR, <a href="https://www.netlib.org/ode/epsode.f">EPISODE</a>, <a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a> and <a href="https://github.com/LLNL/sundials/releases/download/v7.5.0/cvode-7.5.0.tar.gz">CVODE</a> use BDF6.
However, in reality, this is mainly a problem for the step size and order control segment to properly switch order.</p>
<p>The second figure also demonstrates that the Tischer formulas produce larger global errors.
This is to be attributed to the error constants being an order of magnitude larger than the error constants of the Tendler formulas.
That explains why the program ODIOUS, which uses the Tischer formulas, needs a smaller step size, and therefore needs more steps.
This is reflected in the results in <a href="https://dl.acm.org/doi/10.1145/214408.214417">Tischer/Gupta (1985)</a>.</p>
<p>Since <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a> noted a sensitivity regarding the chosen precision, especially in <a href="https://doi.org/10.1145/356502.356495">STINT</a>, which implements Tendler's formulas,
we repeated the above tests in single precision (<code>float complex</code> in the C language) and on two CPU architectures (AMD Ryzen 5700 and ARM Cortex A77).
The qualitative results did not differ in any way.
We henceforth conclude that the discontinuity and sensitivity of the step size and order control segment are the reason for the observed behavior
in line with the remarks in <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a>.</p>
<p><strong>21. Runge's equation.</strong>
The test equation is</p>
<div class=math>
$$
    \dot y(t) = \frac{-2 t}{(1+t^2)^2} \in \mathbb{R}, \quad
    y(t_0) = \frac{1}{1+t_0^2}, \quad t\in[t_0, t_\text{end}], \quad t_0=-5, t_\text{end}=5.
$$
</div>
<p>It has the exact solution $y(t) = 1/(1+t^2)$.</p>
<p>This is a numerical quadrature problem and not really a differential equation.
This is Runge's function showcasing <a href="https://en.wikipedia.org/wiki/Runge%27s_phenomenon">Runge's phenomenon</a>.</p>
<p>For the numerical solution we used the step sizes $h=0.1$, $h=0.01$, and $h=0.001$.</p>
<p>Running the same formulas from above creates 75 data points.
Multiplying by two precisions gives 150 records.</p>
<p>All formulas produce accurate results and the error is always considerably smaller than one.
We therefore show</p>
<div class=math>
$$
    \hat g_\text{err} = -\log_{10} g_\text{err}.
$$
</div>
<p>Higher is better.
The third image shows the results for quadruple precision (<code>long double</code>).</p>
<p><img src="https://eklausmeier.goip.de/img/BDFvsTendlervsTischerRunge.jpg" alt="" title="Runge: Accuracy of BDF vs. Tendler vs. New vs. Tischer"></p>
<p>From an accuracy point of view the formulas eTendler6-9 are outperformed by BDF6 and Tendler7 for the step size $h=0.001$.
For $h=0.01$ eTendler8 shows the best accuracy.</p>
<p>The Tischer formulas again fall short of expectations and produce larger errors than all the other methods.
This is to be explained by their larger error constants multiplied by the large magnitude of the higher derivatives of the Runge function.
This is in line with the results reported in <a href="https://dl.acm.org/doi/10.1145/214408.214417">Tischer/Gupta (1985)</a> where the ODIOUS program
on average needs 50%-100% more steps and function evaluations than LSODE (based on BDF) excluding problem B5.</p>
<h2>6. Summary and conclusions<a id=summary></a></h2>
<p>We have given a convergence proof for general linear methods in the setting of matrix polynomials.
Matrix polynomials are a versatile medium to analyze cyclic linear multistep methods.</p>
<p>We have extended the work of Tendler and found new cyclic linear multistep formulas with enhanced Widlund-wedge angle and Widlund-distance.
It is conjectured that by lifting restriction R3 we might find even more enhanced formulas.</p>
<p>By comparing the error constants we explain why the Tischer formulas produce larger global errors.</p>
<p><strong>Conflict of interest:</strong> There is no conflict of interest.</p>
<h2>7. References<a id=references></a></h2>
<ol>
<li>Akrivis, G., Katsoprinakis, E.: <a href="https://doi.org/10.1007/s10543-019-00768-1">Maximum angles of $A(\vartheta)$-stability of backward difference formulae</a>.
BIT Numer. Math. <strong>60</strong>, 93–99 (2020), <a href="https://doi.org/10.1007/s10543-019-00768-1">https://doi.org/10.1007/s10543-019-00768-1</a></li>
<li>Albrecht, P.: <a href="https://doi.org/10.1007/BF02252202">Explicit, optimal stability functionals and their application to cyclic discretization methods</a>.
Computing <strong>19</strong>, 233–249 (1978), <a href="https://doi.org/10.1007/BF02252202">https://doi.org/10.1007/BF02252202</a></li>
<li>Albrecht, P.: <a href="https://doi.org/10.1007/BF01389876">Numerical treatment of O.D.Es.: The theory of A-methods</a>. Numer. Math. <strong>47</strong>, 59–87 (1985), <a href="https://doi.org/10.1007/BF01389876">https://doi.org/10.1007/BF01389876</a></li>
<li>Bickart, T.A., Picel, Z.: <a href="https://doi.org/10.1007/BF01951938">High order stiffly stable composite multistep methods for numerical integration of stiff differential equations</a>. BIT Numer. Math. <strong>13</strong>, 272–286 (1973), <a href="https://doi.org/10.1007/BF01951938">https://doi.org/10.1007/BF01951938</a></li>
<li>Butcher, J.C.: <a href="https://doi.org/10.1002/9781119121534">Numerical Methods for Ordinary Differential Equations</a>.
John Wiley &amp; Sons, Chichester (2016), <a href="https://doi.org/10.1002/9781119121534">https://doi.org/10.1002/9781119121534</a></li>
<li>Gaffney, P.: <a href="https://doi.org/10.1145/356068.356073">A Performance Evaluation of Some FORTRAN Subroutines for the Solution of Stiff Oscillatory Ordinary Differential Equations</a>. ACM Trans. Math. Softw. <strong>10</strong>(1), 58–72 (1984), <a href="https://doi.org/10.1145/356068.356073">https://doi.org/10.1145/356068.356073</a></li>
<li>Gohberg, I., Lancaster, P., Rodman, L.: <a href="https://doi.org/10.1016/0024-3795%2878%2990026-5">Spectral Analysis of Matrix Polynomials — I. Canonical Forms and Divisors</a>.
Linear Algebra Its Appl. <strong>20</strong>, 1–44 (1978),
https://doi.org/10.1016/0024-3795%2878%2990026-5</li>
<li>Gohberg, I., Lancaster, P., Rodman, L.: <a href="https://doi.org/10.1137/1.9780898719024">Matrix Polynomials</a>. Society for Industrial and Applied Mathematics (2009), <a href="https://doi.org/10.1137/1.9780898719024">https://doi.org/10.1137/1.9780898719024</a></li>
<li>Gupta, G.: <a href="https://doi.org/10.1137/0906063">Description and Evaluation of a Stiff ODE Code DSTIFF</a>.
SIAM J. Sci. Comput <strong>6</strong>(4), 939–950 (1985), <a href="https://doi.org/10.1137/0906063">https://doi.org/10.1137/0906063</a></li>
<li>Hairer, E., Wanner, G., Nørsett, S.: <a href="https://doi.org/10.1007/978-3-540-78862-1">Solving Ordinary Differential Equations I – Nonstiff Problems</a>.
Springer Berlin, Heidelberg (2008), <a href="https://doi.org/10.1007/978-3-540-78862-1">https://doi.org/10.1007/978-3-540-78862-1</a></li>
<li>Hairer, E., Wanner, G.: <a href="https://doi.org/10.1007/978-3-642-05221-7">Solving Ordinary Differential Equations II – Stiff and Differential-Algebraic Problems</a>.
Springer Berlin, Heidelberg (2010), <a href="https://doi.org/10.1007/978-3-642-05221-7">https://doi.org/10.1007/978-3-642-05221-7</a></li>
<li>Mihelcic, M., Wingerath, K.: <a href="https://doi.org/10.1002/zamm.19810610609">$A(\alpha)$-Stable Cyclic Composite Multistep Methods of Orders 6 and 7 for Numerical Integration of Stiff Ordinary Differential Equations</a>.
ZAMM <strong>61</strong>, 261–264 (1981), <a href="https://doi.org/10.1002/zamm.19810610609">https://doi.org/10.1002/zamm.19810610609</a></li>
<li>Montenbruck, O., Gill, E.: <a href="https://doi.org/10.1007/978-3-642-58351-3">Satellite Orbits</a>.
Springer Berlin, Heidelberg (2000), <a href="https://doi.org/10.1007/978-3-642-58351-3">https://doi.org/10.1007/978-3-642-58351-3</a></li>
<li>Nørsett, S., Thomsen, P.G.: <a href="https://doi.org/10.1007/BF01933714">Switching between modified Newton and fix-point iteration for implicit ode-solvers</a>.
BIT Numer. Math. <strong>26</strong>, 339–348 (1986), <a href="https://doi.org/10.1007/BF01933714">https://doi.org/10.1007/BF01933714</a></li>
<li>Petzold, L.: <a href="https://doi.org/10.1137/0904010">Automatic Selection of Methods for Solving Stiff and Nonstiff Systems of Ordinary Differential Equations</a>.
SIAM J. Sci. Comput. <strong>4</strong>(1), 136–148 (1983), <a href="https://doi.org/10.1137/0904010">https://doi.org/10.1137/0904010</a></li>
<li>Shampine, L.F.: <a href="https://doi.org/10.2307/2007622">Type-sensitive ODE codes based on implicit $A(\alpha)$-stable formulas</a>.
Math. Comput. <strong>39</strong>(159), 109–123 (1982), <a href="https://doi.org/10.2307/2007622">https://doi.org/10.2307/2007622</a></li>
<li>Skeel, R.: <a href="https://doi.org/10.1137/0713055">Analysis of Fixed-Stepsize Methods</a>.
SIAM J. Numer. Anal. <strong>13</strong>(5), 664–685 (1976), <a href="https://doi.org/10.1137/0713055">https://doi.org/10.1137/0713055</a></li>
<li>Städter, P., Schälte, Y., Schmiester, L., Hasenauer, J., Stapor, P.L.: <a href="https://doi.org/10.1038/s41598-021-82196-2">Benchmarking of numerical integration methods for ODE models of biological systems</a>.
Scientific Reports 11, 2696 (2021), <a href="https://doi.org/10.1038/s41598-021-82196-2">https://doi.org/10.1038/s41598-021-82196-2</a></li>
<li>Tendler, J.M.: <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">A Stiffly Stable Integration Process Using Cyclic Composite Methods</a>.
Ph.D. thesis, Syracuse University, Syracuse, New York (1973)</li>
<li>Tendler, J.M., Bickart, T.A., Picel, Z.:
STINT: STiff ordinary differential equations INTegrator.  Program and User Manual.
Electrical and Computer Engineering Department, Syracuse University,
Syracuse, New York 13210, USA, and Department of Electrical Engineering,
Delft University of Technology, Delft, The Netherlands,
Technical Report TR-76-12 (1976)</li>
<li>Tendler, J.M., Bickart, T.A., Picel, Z.: <a href="https://doi.org/10.1145/356502.356495">A Stiffly Stable Integration Process Using Cyclic Composite Methods</a>.
ACM Trans. Math. Softw. <strong>4</strong>(4), 339–368 (1978), <a href="https://doi.org/10.1145/356502.356495">https://doi.org/10.1145/356502.356495</a></li>
<li>Tischer, P.: The Cyclic Use of Linear Multistep Formulas for the Solution of Stiff Differential Equations.
Ph.D. thesis, Department of Computer Science, Monash University, Clayton, Victoria, Australia (1983)</li>
<li>Tischer, P., Sacks-Davis, R.: <a href="https://doi.org/10.1137/0904051">A New Class of Cyclic Multistep Formulae for Stiff Systems</a>.
SIAM J. Sci. Comput. <strong>4</strong>(4), 733–747 (1983), <a href="https://doi.org/10.1137/0904051">https://doi.org/10.1137/0904051</a></li>
<li>Tischer, P., Gupta, G.:
<a href="https://dl.acm.org/doi/10.1145/214408.214417">An evaluation of some new cyclic linear multistep formulas for stiff ODEs</a>.
ACM Trans. Math. Softw. <strong>11</strong>(3), 263–270 (1985), <a href="https://doi.org/10.1145/214408.214417">https://doi.org/10.1145/214408.214417</a></li>
<li>Werner, H., Arndt, H.: <a href="https://doi.org/10.1007/978-3-642-70338-6">Gewöhnliche Differentialgleichungen</a>.
Springer Berlin, Heidelberg (1986), <a href="https://doi.org/10.1007/978-3-642-70338-6">https://doi.org/10.1007/978-3-642-70338-6</a></li>
</ol>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/01-19-computing-error-constants-in-high-precision</link>
		<guid>https://eklausmeier.goip.de/blog/2026/01-19-computing-error-constants-in-high-precision</guid>
		<title>Computing Error Constants in High Precision</title>
		<category>mathematics</category>
		<category>programming</category>
		<pubDate>Mon, 19 Jan 2026 17:10:00 +0100</pubDate>
		<description><![CDATA[
<p>In <a href="https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas">Searching for Tendler-like formulas</a> we presented new Tendler-like cyclic linear multistep formulas for the solution of stiff differential equations.
Assume the cyclic linear multistep methods of the form</p>
<div class=math>
$$
    \sum_{j=-k+1}^\ell \left[ \alpha_{ij} y_{m\ell+j} - h \beta_{ij} \dot y_{m\ell+j} \right] = 0, \quad i=1,\ldots,\ell.
$$
</div>
<p>When testing these formulas numerically, we are particularly interested in the unscaled error constant</p>
<div class=math>
$$
    c_{p+1} = \frac{1}{(p+1)!} \sum_{i=0}^k\bigl(\alpha_ii^{p+1}-(p+1)\beta_ii^p\bigr).
$$
</div>
<p>The scaled error constant is</p>
<div class=math>
$$
    \eta_{i,p+1} = \frac{1}{(p+1)!} \frac{1}{\alpha_{ii}} c_{i,p+1}
$$
</div>
<p><del>Unfortunately, for the new formulas eTendler8 and eTendler9 of order 8 and 9 the computation in double precision (<code>double</code> in the C programming language) gives downright wrong answers.</del>
Integer computation must be done in <code>long</code>, not just in <code>int</code>.</p>
<p>However, the standard Unix tool <a href="https://man.archlinux.org/man/bc.1"><code>bc</code></a> allows computation with arbitrary precision and is usually installed anyways.</p>
<p>Order 8.</p>
<div class=math>
$$
\begin{array}{r|rrrr}
p=8 & 1 & 2 & 3 & 4\\
\hline
-7 &  105 &    0 &    0 &    0\\
-6 & -960 & 10560 &    0 &    0\\
-5 & 3920 & -96740 & 4350 &    0\\
-4 & -9408 & 396116 & -40060 & 11580\\
-3 & 14700 & -954618 & 165256 & -106094\\
-2 & -15680 & 1501850 & -402822 & 434406\\
-1 & 11760 & -1623860 & 646450 & -1046346\\
0 & -6720 & 1267140 & -731500 & 1640450\\
1 & 2283 & -701166 & 591360 & -1801730\\
2 &    0 & 200718 & -290706 & 1438794\\
3 &    0 &    0 & 57672 & -782406\\
4 &    0 &    0 &    0 & 211346\\
\hline
-7 &    0 &    0 &    0 &    0\\
-6 &    0 &    0 &    0 &    0\\
-5 &    0 &    0 &    0 &    0\\
-4 &    0 &    0 &    0 &    0\\
-3 &    0 &    0 &    0 &    0\\
-2 &    0 &    0 &    0 &    0\\
-1 &    0 &    0 &    0 &    0\\
0 &    0 &    0 &    0 &    0\\
1 &  840 & -56280 & 25200 & 21000\\
2 &    0 & 76440 & -64680 & 2520\\
3 &    0 &    0 & 24360 & -81480\\
4 &    0 &    0 &    0 & 81480\\
\end{array}
$$
</div>
<p>To compute the unscaled and the scaled error constant we used below <code>bc</code> script:</p>
<pre class="line-numbers"><code class="language-C">a1[0]=105
a1[1]=-960
a1[2]=3920
a1[3]=-9408
a1[4]=14700
a1[5]=-15680
a1[6]=11760
a1[7]=-6720
a1[8]=2283
b1[0]=0
b1[1]=0
b1[2]=0
b1[3]=0
b1[4]=0
b1[5]=0
b1[6]=0
b1[7]=0
b1[8]=840

a4[0]=11580
a4[1]=-106094
a4[2]=434406
a4[3]=-1046346
a4[4]=1640450
a4[5]=-1801730
a4[6]=1438794
a4[7]=-782406
a4[8]=211346
b4[0]=0
b4[1]=0
b4[2]=0
b4[3]=0
b4[4]=0
b4[5]=21000
b4[6]=2520
b4[7]=-81480
b4[8]=81480
</code></pre>
<p>With these constants in place we then ran below <code>for</code>-loop for the various columns:</p>
<pre class="line-numbers"><code class="language-C">scale=10
f=1
for (q=1; q&lt;=9; ++q) {
    f *= q + 1;
    r=0
    for (k=0; k&lt;=8; ++k)
        r += k^q * a4[k] - q * k^(q-1) * b4[k]
    r
    r / f / a4[8]
}
</code></pre>
<p>Order 9.</p>
<div class=math>
$$
\begin{array}{r|rrrrr}
p=9 & 1 & 2 & 3 & 4 & 5\\
\hline
-8 & -280 &    0 &    0 &    0 &    0\\
-7 & 2835 & -5285 &    0 &    0 &    0\\
-6 & -12960 & 53730 & -13715 &    0 &    0\\
-5 & 35280 & -246960 & 138885 & -24780 &    0\\
-4 & -63504 & 677376 & -634992 & 250764 & -22331\\
-3 & 79380 & -1233036 & 1728720 & -1145544 & 225768\\
-2 & -70560 & 1569960 & -3111108 & 3115434 & -1029642\\
-1 & 45360 & -1446480 & 3883740 & -5600364 & 2789808\\
0 & -22680 & 1028160 & -3422160 & 6991530 & -4946214\\
1 & 7129 & -486351 & 2295792 & -6110664 & 6531756\\
2 &    0 & 88886 & -1194345 & 3889494 & -5933718\\
3 &    0 &    0 & 329183 & -2019384 & 3364992\\
4 &    0 &    0 &    0 & 653514 & -1609983\\
5 &    0 &    0 &    0 &    0 & 629564\\
\hline
-8 &    0 &    0 &    0 &    0 &    0\\
-7 &    0 &    0 &    0 &    0 &    0\\
-6 &    0 &    0 &    0 &    0 &    0\\
-5 &    0 &    0 &    0 &    0 &    0\\
-4 &    0 &    0 &    0 &    0 &    0\\
-3 &    0 &    0 &    0 &    0 &    0\\
-2 &    0 &    0 &    0 &    0 &    0\\
-1 &    0 &    0 &    0 &    0 &    0\\
0 &    0 &    0 &    0 &    0 &    0\\
1 & 2520 & -98280 & -80640 & -40320 & -241920\\
2 &    0 & 35280 & -63000 & -73080 & -168840\\
3 &    0 &    0 & 118440 & 35280 & 171360\\
4 &    0 &    0 &    0 & 229320 & 171360\\
5 &    0 &    0 &    0 &    0 & 216720\\
\end{array}
$$
</div>
<p>Setting the constants in <code>bc</code>:</p>
<pre class="line-numbers"><code class="language-C">a1[0]=-280
a1[1]=2835
a1[2]=-12960
a1[3]=35280
a1[4]=-63504
a1[5]=79380
a1[6]=-70560
a1[7]=45360
a1[8]=-22680
a1[9]=7129
b1[0]=0
b1[1]=0
b1[2]=0
b1[3]=0
b1[4]=0
b1[5]=0
b1[6]=0
b1[7]=0
b1[8]=0
b1[9]=2520

a2[0]=-5285
a2[1]=53730
a2[2]=-246960
a2[3]=677376
a2[4]=-1233036
a2[5]=1569960
a2[6]=-1446480
a2[7]=1028160
a2[8]=-486351
a2[9]=88886
b2[0]=0
b2[1]=0
b2[2]=0
b2[3]=0
b2[4]=0
b2[5]=0
b2[6]=0
b2[7]=0
b2[8]=-98280
b2[9]=35280

a3[0]=-13715
a3[1]=138885
a3[2]=-634992
a3[3]=1728720
a3[4]=-3111108
a3[5]=3883740
a3[6]=-3422160
a3[7]=2295792
a3[8]=-1194345
a3[9]=329183
b3[0]=0
b3[1]=0
b3[2]=0
b3[3]=0
b3[4]=0
b3[5]=0
b3[6]=0
b3[7]=-80640
b3[8]=-63000
b3[9]=118440

a4[0]=-24780
a4[1]=250764
a4[2]=-1145544
a4[3]=3115434
a4[4]=-5600364
a4[5]=6991530
a4[6]=-6110664
a4[7]=3889494
a4[8]=-2019384
a4[9]=653514
b4[0]=0
b4[1]=0
b4[2]=0
b4[3]=0
b4[4]=0
b4[5]=0
b4[6]=-40320
b4[7]=-73080
b4[8]=35280
b4[9]=229320

a5[0]=-22331
a5[1]=225768
a5[2]=-1029642
a5[3]=2789808
a5[4]=-4946214
a5[5]=6531756
a5[6]=-5933718
a5[7]=3364992
a5[8]=-1609983
a5[9]=629564
b5[0]=0
b5[1]=0
b5[2]=0
b5[3]=0
b5[4]=0
b5[5]=-241920
b5[6]=-168840
b5[7]=171360
b5[8]=171360
b5[9]=216720
</code></pre>
<p>Now run below <code>for</code>-loop for the five columns.</p>
<pre class="line-numbers"><code class="language-C">scale=30
f=1
for (q=1; q&lt;=10; ++q) {
    f *= q;
    r=0
    for (k=0; k&lt;=9; ++k)
        r += k^q * a5[k] - q * k^(q-1) * b5[k]
    r
    r / f / a5[9]
}
</code></pre>
<p>These are the scaled error constants given in <a href="https://eklausmeier.goip.de/blog/2026/01-20-tendler-like-formulas-for-stiff-odes">Tendler-like Formulas for Stiff ODEs</a>.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/01-18-converting-markdown-to-springer-nature-latex-format</link>
		<guid>https://eklausmeier.goip.de/blog/2026/01-18-converting-markdown-to-springer-nature-latex-format</guid>
		<title>Converting Markdown to Springer Nature LaTeX Format</title>
		<category>mathematics</category>
		<category>programming</category>
		<pubDate>Sun, 18 Jan 2026 22:00:00 +0100</pubDate>
		<description><![CDATA[
<p>Blog posts on this very blog are created in Markdown with MathJax, i.e., LaTeX formulas, sprinkled in.
The static site generator <a href="https://eklausmeier.goip.de/blog/2021/10-31-simplified-saaze"><em>Simplified Saaze</em></a> then converts this into HTML.
Obviously, I didn't want to create <em>two</em> documents, i.e., one for the blog, and another for the journal.
Also, the journal might reject the submission.
In that case I would at least retain the blog post.</p>
<p>The solution is to use a small Perl script <code>blog2springer</code> to automatically convert the Markdown from the blog to the LaTeX required for the journal.</p>
<p>I had done the reverse thing here: <a href="https://eklausmeier.goip.de/blog/2023/10-02-converting-journal-article-from-latex-to-markdown">Converting Journal Article from LaTeX to Markdown</a>, i.e., take LaTeX as input and produce a blog post in Markdown format.</p>
<h2>1. Perl script <code>blog2springer</code></h2>
<p>Here we run down the Perl script called <code>blog2springer</code>.</p>
<p>Bibliographic references in a blog post are done using <code>[reftext](hyperlink)</code>, while the journal LaTeX format is still very oldstyle and uses numbers.
I use a hash to convert <code>reftext</code> to numbers.</p>
<pre class="line-numbers"><code class="language-Perl">#!/bin/perl -W
# Reformat Markdown with MathJax to Springer Nature LaTeX format
# Elmar Klausmeier, 31-Dec-2025

use strict;
my ($skip,$summary,$ref,$refcnt,$sec,$eq,$ineq,$cnt,$enum,$itemize) = (0,0,0,0,0,0,0,0,0,0);
my %L = (
    'Akrivis/Katsoprinakis (2020)' =&gt; 1,
    'Albrecht (1978)' =&gt; 2,
    'Albrecht (1985)' =&gt; 3,
    'Bickart/Picel (1973)' =&gt; 4,
    'Butcher (2016)' =&gt; 5,
    'Gaffney (1984)' =&gt; 6,
    'Gohberg/Lancaster/Rodman (1978)' =&gt; 7,
    'Gohberg/Lancaster/Rodman (2009)' =&gt; 8,
    'Gupta (1985)' =&gt; 9,
    'Hairer/Wanner/Nørsett (2008)' =&gt; 10,
    'Hairer/Wanner (2010)' =&gt; 11,
    'Mihelcic/Wingerath (1981)' =&gt; 12,
    'Montenbruck/Gill (2000)' =&gt; 13,
    'Norsett/Thomsen (1986)' =&gt; 14,
    'Petzold (1983)' =&gt; 15,
    'Rubin (1973)' =&gt; 99,
    'Shampine (1982)' =&gt; 16,
    'Skeel (1976)' =&gt; 17,
    'St\&quot;adter et al (2021)' =&gt; 18,
    'Tendler (1973)' =&gt; 19,
    'Tendler/Bickart/Picel (1976)' =&gt; 20,
    'Tendler/Bickart/Picel (1978)' =&gt; 21,
    'Tischer (1983)' =&gt; 22,
    'Tischer/Sacks-Davis (1983)' =&gt; 23,
    'Tischer/Gupta (1985)' =&gt; 24,
    'Werner/Arndt (1986)' =&gt; 25,
);
</code></pre>
<p>Springer Nature preloads a number of LaTeX packages.
It seems that it has difficulties with <code>\usepackage{algorithmicx}</code>, although I didn't follow through this.
The script has some values hardcoded, which are specific to the article, like author, etc.</p>
<pre class="line-numbers"><code class="language-Perl">print &lt;&lt; &quot;EOF&quot;;
\\documentclass[pdflatex,sn-mathphys-num]{sn-jnl}% Math and Physical Sciences Numbered Reference Style

\\usepackage{graphicx}%
\\usepackage{multirow}%
\\usepackage{amsmath,amssymb,amsfonts}%
\\usepackage{amsthm}%
\\usepackage{mathdots}%
\\usepackage{mathrsfs}%
\\usepackage[title]{appendix}%
\\usepackage{xcolor}%
\\usepackage{textcomp}%
\\usepackage{manyfoot}%
\\usepackage{booktabs}%
\\usepackage{algorithm}%
\\usepackage{algpseudocode}%
\\usepackage{listings}%


\\theoremstyle{thmstylethree}%
\\newtheorem{definition}{Definition}%

\\raggedbottom
\\graphicspath{ {./} }
\\setcounter{MaxMatrixCols}{15}
\\renewcommand{\\thesection}{\\arabic{section}.}


\\newcommand{\\dcol}{\\operatorname*{col}}
\\newcommand{\\drow}{\\operatorname*{row}}
\\newcommand{\\diag}{\\operatorname*{diag}}
\\newcommand{\\bov}[2]{\\overline{\\mathbf #1}_{#2}} % boldface and overlined
\\newcommand{\\bopo}{\\bov P1}
\\newcommand{\\boro}{\\bov R1}
\\newcommand{\\bfR}{{\\mathbf{R}}}
\\newcommand{\\bovy}[1]{\\bov Y{\\!#1}}
\\newcommand{\\ovbf}[1]{\\overline{\\mathbf{#1}}}

\\author{\\fnm{Elmar} \\sur{Klausmeier}}
\\email{Elmar.Klausmeier\@gmail.com}

\\date{\\today}

\\begin{document}

\\keywords{cyclic linear multistep methods, matrix polynomials, stiff differential equations, convergence analysis, Widlund-wedge}
\\pacs[Mathematics Subject Classification]{65L04 65L06}
\\pacs[CR]{G.1.7}

EOF
</code></pre>
<p>The loop reads each line of the blog post and reformats it.</p>
<ol>
<li>The journal wants German Umlaute to be escaped with LaTeX codes</li>
<li>HTML codes are converted to LaTeX codes</li>
<li>Numbering of paragraphs and theorems is converted from PHP to fixed numbers.</li>
<li>Enumerations are converted to the respective format in LaTeX</li>
</ol>
<p>The Markdown contains some PHP code like so:</p>
<pre class="line-numbers"><code class="language-PHP">__&lt;?=++$c?&gt;.__ Consider the multistep method
</code></pre>
<p>That is converted using the <code>$cnt</code> variable.</p>
<p>For tables I entered them two times: once for Markdown, and once for LaTeX and used an <code>if</code>-statement:</p>
<pre class="line-numbers"><code class="language-PHP">&lt;?php if ($c === 0) { ?&gt;
\begin{table}[htbp]
\caption{Widlund-wedge angle for Tendler and Tischer formulas}
\begin{tabular}{@{}lllll|ll@{}}
\toprule
$p$ &amp; $\ell$ &amp; abs(root)   &amp; $\alpha$(Tendler) &amp; $\delta$(Tendler) &amp; $\alpha$(Tischer) &amp; $\delta$(Tischer) \\
\midrule
. . . 
\end{table}
&lt;?php } else { ?&gt;
$p$ | $\ell$ | abs(root)   | $\alpha$(Tendler)| $\delta$(Tendler) | | $\alpha$(Tischer) | $\delta$(Tischer)
----|-----|-------------|----------------|-------------------|-|------------------|------------------
1   | 3   | 0           | 90&amp;deg;        | 0                 | | 90&amp;deg;          | 0
. . .
&lt;?php } ?&gt;
</code></pre>
<p>The script is.</p>
<pre class="line-numbers" data-line=23-26,79-80><code class="language-Perl">while (&lt;&gt;) {
    s/_Proof:_/\\begin{proof}/;
    s/&amp;nbsp; &amp;nbsp; &amp;#9744;/\\end{proof}/;

    s/&amp;deg;/\\textdegree{}/g;
    s/&amp;ldquo;/``/g;
    s/&amp;rdquo;/''/g;
    s/&amp;ndash;/--/g;
    s/&amp;mdash;/---/g;
    s/&amp;nbsp;/~/g;
    s/&amp;amp;/\\&amp;/g;
    s/\\unicode\{x22F0\}/\\iddots/g;
    s/Ä/\\&quot;A/g;
    s/Ö/\\&quot;O/g;
    s/Ü/\\&quot;U/g;
    s/ä/\\&quot;a/g;
    s/ö/\\&quot;o/g;
    s/ü/\\&quot;u/g;
    s/ß/\\ss{}/g;

    if (/&lt;\?php if \(false\) \{ \?&gt;/) { $skip = 1; next; }
    if (/&lt;\?php \} \?&gt;/) { $skip = 0; next; }
    if (/&lt;\?php if \(\$c === 0\) \{ \?&gt;/) { $skip = 0; next; }
    if (/&lt;\?php \} else \{ \?&gt;/) { $skip = 1; next; }
    next if ($skip == 1);
    next if (/&lt;\?php \$c=0; \?&gt;/);

    print &quot;\\title[$1]{$1}\n\n&quot; if (/^title: &quot;([^&quot;]+)&quot;/);

    if (/^__Abstract.__/) { $summary = 1; print &quot;\\abstract{&quot;; next; }
    if ($summary == 1) {
        if (length($_) &lt; 2) { $summary = 2; print &quot;}\n\\maketitle\n\n&quot;; next; }
        print;
        next;
    }
    next if ($summary != 2);
    next if (/^\\def\\/);

    if (/^## \d\. References&lt;a id/) { $ref=1; print &quot;\n\n\\begin{thebibliography}{90}\n\n&quot;; next; }
    if ($ref == 1) {
        if ( $refcnt &gt; 1 &amp;&amp; length($_) &lt; 2) { $ref = 0; print &quot;\n\\end{thebibliography}\n\n&quot;; next; }
        s/\[([^\]]+?)\]\([^\)]+?\)/$1/g;
        if (/^1\. /) {
            s/^1\. //;
            printf(&quot;\n\\bibitem{b%d}\n&quot;,++$refcnt);
        }
    }

    if (/^## (\d)\. ([^&lt;]+)&lt;a id/) { $sec=1; print &quot;\n\n\\section{$2}\\label{sec$1}\n\n&quot;; next; }
    next if ($sec != 1);

    if (/^\$\$/) {
        if ($eq % 2 == 0) { $ineq = 1; print &quot;\\begin{align*}\n&quot;; }
        else { $ineq = 0; print &quot;\\end{align*}\n&quot;; }
        ++$eq;
        next;
    }
    s/__(\d+)__/\\textbf{$1}/;
    s/__(\w+ \w+ \w+:)__/\\textbf{$1}/;
    s/__\((\d+)\)__/\\textbf{($1)}/;
    s/`(\w+ \w+)`/\\texttt{$1}/g;
    if ($ineq == 0) {
        s/ _(\w+)_( |\+)/ \\emph{$1}$2/g;
        s/ _(\w+ \w+)_( |\.)/ \\emph{$1}$2/g;
        s/ _(\w+ \w+ \w+)_( |\.)/ \\emph{$1}$2/g;
    }

    if (/!\[\]\(\*&lt;\?=\$rbase\?&gt;\*\/img\/([-\w]+)\.jpg &quot;([^&quot;]+?)&quot;\)/) {
        print &quot;\\begin{figure}[H]\n\\begin{center}\n\\includegraphics[scale=0.4]{$1}\n\\caption{$2}\n\\end{center}\\end{figure}\n&quot;;
        next;
    }

    foreach my $l (keys %L) {
        s/\[\Q$l\E\]\([^\)]*?\)/\[$L{$l}]/g;
    }
    s/\[([^\]]+?)\]\(\*&lt;\?=\$rbase\?&gt;[^\)]+?\)/$1/g;
    s/\[([^\]]+?)\]\([^\)]+?\)/$1/g;

    if (/__&lt;\?=\+\+\$c\?&gt;\.__/) { my $t = sprintf(&quot;\\textbf{%d.}&quot;,++$cnt); s/__&lt;\?=\+\+\$c\?&gt;\.__/${t}/; }
    if (/__&lt;\?=\+\+\$c\?&gt;\. (\w+|['\w]+ \w+)(\.|:)__/) {
        my $t = sprintf(&quot;\\textbf{%d. %s%s}&quot;,++$cnt,$1,$2);
        s/__&lt;\?=\+\+\$c\?&gt;\. (\w+|['\w]+ \w+)(\.|:)__/${t}/;
    }

    if (/^1\. /) {
        if ($enum == 0) { $enum = 1; print &quot;\\begin{enumerate}\n&quot;; }
        s/^1\. /\\item /;
    } elsif ($enum == 1 &amp;&amp; length($_) &lt; 2) { $enum = 0; print &quot;\\end{enumerate}\n\n&quot;; }
    if (/^\* /) {
        if ($itemize == 0) { $itemize = 1; print &quot;\\begin{itemize}\n&quot;; }
        s/^\* /\\item /;
    } elsif ($itemize == 1 &amp;&amp; length($_) &lt; 2) { $itemize = 0; print &quot;\\end{itemize}\n\n&quot;; }

    print;
}
</code></pre>
<p>Finally we add the footer.</p>
<pre class="line-numbers"><code class="language-Perl">print &quot;\\end{document}\n\n&quot;;
</code></pre>
<h2>2. Usage</h2>
<p>I downloaded the <a href="https://www.springernature.com/gp/authors/campaigns/latex-author-support">journal article template</a>.
That zip-file contains the following:</p>
<pre class="line-numbers" data-line=21><code class="language-bash">$ unzip -l &quot;Download+the+journal+article+template+package+(December+2024+version).zip&quot;
Archive:  Download+the+journal+article+template+package+(December+2024+version).zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2024-12-13 05:44   sn-article-template/
        0  2024-12-13 05:01   sn-article-template/bst/
   151345  2024-12-13 05:01   sn-article-template/bst/sn-apacite.bst
    29828  2024-12-13 05:01   sn-article-template/bst/sn-aps.bst
    35515  2024-12-13 05:19   sn-article-template/bst/sn-basic.bst
    33968  2024-12-13 05:01   sn-article-template/bst/sn-chicago.bst
    64023  2024-12-13 05:01   sn-article-template/bst/sn-mathphys-ay.bst
    64164  2024-12-13 05:01   sn-article-template/bst/sn-mathphys-num.bst
    39056  2024-12-13 05:01   sn-article-template/bst/sn-nature.bst
    39951  2024-12-13 05:01   sn-article-template/bst/sn-vancouver-ay.bst
    40758  2024-12-13 05:01   sn-article-template/bst/sn-vancouver-num.bst
     2890  2024-12-13 05:01   sn-article-template/empty.eps
    91593  2024-12-13 05:01   sn-article-template/fig.eps
   421391  2024-12-13 05:20   sn-article-template/sn-article.pdf
    34686  2024-12-13 05:45   sn-article-template/sn-article.tex
     5123  2024-12-13 05:01   sn-article-template/sn-bibliography.bib
    55857  2024-12-13 05:01   sn-article-template/sn-jnl.cls
   418495  2024-12-13 05:01   sn-article-template/user-manual.pdf
---------                     -------
  1528643                     18 files
</code></pre>
<p>For my article I only needed <code>sn-jnl.cls</code>.
I did not use <a href="https://en.wikipedia.org/wiki/BibTeX">BibTeX</a> as the blog post points to external references via HTML links, while the journal just uses numbers for citations.</p>
<p>Converting the blog post goes like this:</p>
<pre class="line-numbers"><code class="language-bash">blog2springer ~/php/sndsaaze/content/blog/2026/01-20-tendler-like-formulas-for-stiff-odes.md &gt; tendler-like-formulas-for-stiff-odes.tex
</code></pre>
<p>Copy the three images:</p>
<pre class="line-numbers"><code class="language-bash">cp -p /srv/http/img/BDFvsTendlervsTischer.jpg .
cp -p /srv/http/img/BDFvsTendlervsTischerRunge.jpg .
cp -p /srv/http/img/eTendler3-StabilityMountain.jpg .
</code></pre>
<p>Then compile with LaTeX:</p>
<pre class="line-numbers"><code class="language-bash">pdflatex tendler-like-formulas-for-stiff-odes.tex
</code></pre>
<p>Then view the result:</p>
<pre class="line-numbers"><code class="language-bash">mupdf tendler-like-formulas-for-stiff-odes.pdf
</code></pre>
<p>I use <a href="https://man.archlinux.org/man/mupdf.1">mupdf</a> for viewing PDFs.</p>
<p>The final result is here: <a href="https://eklausmeier.goip.de/pdf/tendler-like-formulas-for-stiff-odes-submitted.pdf">tendler-like-formulas-for-stiff-odes-submitted.pdf</a>.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2026/01-11-comparing-bdf-vs-tendler-vs-tischer-p2</link>
		<guid>https://eklausmeier.goip.de/blog/2026/01-11-comparing-bdf-vs-tendler-vs-tischer-p2</guid>
		<title>Comparing BDF vs. Tendler vs. Tischer formulas, #2</title>
		<category>mathematics</category>
		<pubDate>Sun, 11 Jan 2026 20:00:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#test_eq">1. Runge's function</a></li>
<li><a href="#double_prec">2. Negative logarithmic error in double precision</a></li>
<li><a href="#quad_prec">3. Negative logarithmic error in quadruple precision</a></li>
<li><a href="#results">4. Raw results</a></li>
<li><a href="#scripts">5. Scripts to generate results</a></li>
</ul>
<p>In <a href="https://eklausmeier.goip.de/blog/2025/12-17-comparing-bdf-vs-tendler-vs-tischer">Comparing BDF vs. Tendler vs. Tischer formulas</a>
we already compared BDF, Tendler's formulas and Tischer's formulas.
There we used the classical Dahlquist test equation $y'=\lambda y$.</p>
<p>We repeat the test but with another differential equation.</p>
<h2>1. Runge's function<a id=test_eq></a></h2>
<p>The test equation is</p>
<div class=math>
$$
    y´(t) = {-2 t\over (1+t^2)^2} \in \mathbb{R}, \quad y(t_0) = {1\over 1+t_0^2}, \quad t\in[t_0, t_1], \quad t_0=-5, t_1=5.
$$
</div>
<p>It has the exact solution $y(t) = 1/(1+t^2)$.</p>
<p>This is a numerical quadrature problem and not really a differential equation.
This is Runge's function showcasing <a href="https://en.wikipedia.org/wiki/Runge%27s_phenomenon">Runge's phenomenon</a>.</p>
<p>For the numerical solution we used the step sizes $h=0.1$, $h=0.01$, and $h=0.001$.</p>
<p>Above differential equation is now solved with the following formulas:</p>
<ol>
<li>BDF order 1–6</li>
<li><a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler's formulas</a> order 3–7</li>
<li>new <a href="https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas">Tendler-like formulas</a> order 3–9</li>
<li>Tischer's formulas of order 2–8 using $S=0$</li>
</ol>
<p>This creates 75 data points.
Multiply by two precisions, gives 150 records.</p>
<p>Again, we report the <em>summed global error</em> computed as</p>
<div class=math>
$$
    g_\hbox{err} = \sum_{i=0}^n |y(t_i) - y_i|, \quad n={t_1-t_0\over h}.
$$
</div>
<p>All formulas produce accurate results and the error is alway way below one.
We therefore show</p>
<div class=math>
$$
    \hat g_\hbox{err} = -\log_{10} g_\hbox{err}.
$$
</div>
<p>Higher is better.
That's what is shown in below graphics.</p>
<h2>2. Negative logarithmic error in double precision<a id=double_prec></a></h2>
<p>Below 3D chart can be rotated and zoomed in or out.
Clicking on any entry shows the log global error $\hat g_\hbox{err}$.
Double precision on AMD Ryzen.</p>
<div id="container_Runge_double" class=chartareaBig></div>
<p>For $h=0.001$ Tendler5 gives the best accuracy closely followed by BDF5 and BDF6.
For $h=0.01$ eTendler8 achieves the best accuracy.
For $h=0.1$ BDF6 is best, closely followed by eTendler6.</p>
<h2>3. Negative logarithmic error in quadruple precision<a id=quad_prec></a></h2>
<p>Below 3D chart can be rotated and zoomed in or out.
Clicking on any entry shows the negative log global error $\hat g_\hbox{err}$.
Quadruple precision on AMD Ryzen.
It is striking that the accurary has increased by two orders of magnitude.</p>
<div id="container_Runge_quad" class=chartareaBig></div>
<p>From an accuracy point of view the formulas eTendler6-9 are outperformed by BDF6 and Tendler7 for the step size $h=0.001$.
For $h=0.01$ eTendler8 shows the best accuracy.</p>
<h2>4. Raw results<a id=results></a></h2>
<p>Computations were done in double precision (<code>double</code>) and quadruple precision (<code>long double</code>).</p>
<p>The script.</p>
<pre class="line-numbers"><code class="language-bash">#!/bin/bash
# Run stabregion2 with precision $1 and various various step sizes $2 for Runge's problem

echo BDF1-6
for i in 1 2 3 4 5 6; do stabregion2 -f BDF$i -u$1:-5:5:$2 | tail -1; done
echo Tendler3-7
for i in 3 4 5 6 7; do stabregion2 -f Tendler$i -u$1:-5:5:$2 | tail -1; done
echo eTendler3-9
for i in 3 4 5 6 7 8 9; do stabregion2 -f eTendler$i -u$1:-5:5:$2 | tail -1; done
echo Tischer2-8
for i in 2 3 4 5 6 7 8 ; do stabregion2 -f Tischer$i -u$1:-5:5:$2 | tail -1; done
</code></pre>
<p>The results. First <a href="https://eklausmeier.goip.de/pdf/stabregion2-runge-55-0.1-0.001.txt">double precision</a>.</p>
<pre class="line-numbers"><code class="language-bash">$ for h in 0.1 0.01 0.001; do echo h=$h; stabregion2-batchRunge 2 $h; done | tee stabregion2-runge-55-0.1-0.001.txt

h=0.1
BDF1-6
      101        5.00000000       0.036982249      0.0014792899        0.96301775      0.0095348292
      101        5.00000000       0.038461624     8.5615576e-08       0.081866559     0.00081055999
      101        5.00000000       0.038457995     3.5430565e-06       0.014724693     0.00014578904
      101        5.00000000       0.038461536     2.5370797e-09      0.0039593414       3.92014e-05
      101        5.00000000        0.03846151      2.814651e-08      0.0014265072     1.4123834e-05
      101        5.00000000        0.03846154     1.5475533e-09     0.00064442835     6.3804787e-06
Tendler3-7
      102        5.10000000       0.036999342     2.3982797e-05       0.044467626     0.00043595711
      103        5.20000000       0.035663316     2.2332109e-08      0.0067510688     6.5544358e-05
      101        5.00000000       0.038470049     8.5102832e-06      0.0037145982       3.67782e-05
      102        5.10000000       0.037021167     2.1578698e-06      0.0051242663     5.0237905e-05
      103        5.20000000       0.035647113     1.6224676e-05      0.0037800996     3.6699997e-05
eTendler3-9
      102        5.10000000       0.036969106     5.4218914e-05       0.055089196     0.00054009016
      103        5.20000000       0.035663776     4.3751847e-07       0.038297457     0.00037181997
      101        5.00000000       0.038460826     7.1258628e-07        0.01320941     0.00013078623
      102        5.10000000       0.037027163     3.8384301e-06       0.006025627     5.9074774e-05
      103        5.20000000       0.035654912     8.4256313e-06      0.0015834431     1.5373234e-05
      104        5.30000000       0.034339883     3.6191523e-05      0.0023867322     2.2949348e-05
      104        5.30000000       0.032928864      0.0014472107       0.070966298     0.00068236825
Tischer2-8
      102        5.10000000       0.037021558     1.7662689e-06       0.034696237     0.00034015918
      101        5.00000000       0.038464072     2.5330643e-06       0.073964887     0.00073232561
      102        5.10000000       0.037021992       1.33266e-06       0.080142047     0.00078570635
      101        5.00000000       0.038462774     1.2360023e-06       0.069495329     0.00068807256
      102        5.10000000       0.037023224     1.0045479e-07       0.052946899     0.00051908725
      101        5.00000000         0.0384616     6.1856937e-08       0.049366255      0.0004887748
      102        5.10000000       0.037023314     1.0531468e-08       0.052023547     0.00051003477
h=0.01
BDF1-6
     1001        5.00000000       0.038313609     0.00014792899        0.96168639     0.00096072566
     1001        5.00000000       0.038461538     7.3774736e-12      0.0083432045     8.3348697e-06
     1001        5.00000000       0.038461535     3.1877376e-09     0.00014955862     1.4940921e-07
     1001        5.00000000       0.038461538     2.7346181e-14     4.0610376e-06     4.0569806e-09
     1001        5.00000000       0.038461538     2.2077479e-13     1.4989554e-07     1.4974579e-10
     1001        5.00000000       0.038461538     6.9388939e-16     6.9781085e-09     6.9711374e-12
Tendler3-7
     1002        5.01000000       0.038314013     1.6181477e-08     0.00073858905     7.3711482e-07
     1003        5.02000000       0.038167356     4.7892246e-14     9.5453879e-06     9.5168374e-09
     1001        5.00000000       0.038461538     5.7392285e-13     3.7829891e-07     3.7792099e-10
     1002        5.01000000       0.038314029     4.7829796e-14     1.9396052e-08     1.9357337e-11
     1003        5.02000000       0.038167356     5.9369176e-14     5.2200313e-10      5.204418e-13
eTendler3-9
     1002        5.01000000          0.038314     2.9506259e-08      0.0012932428     1.2906615e-06
     1003        5.02000000       0.038167356     3.0298264e-12     6.3388015e-05      6.319842e-08
     1001        5.00000000       0.038461538     6.0814687e-12     4.1263006e-06     4.1221784e-09
     1002        5.01000000       0.038314029      4.422851e-14     4.3091486e-08     4.3005475e-11
     1003        5.02000000       0.038167356     7.7771123e-14     2.2565377e-09     2.2497884e-12
     1004        5.03000000       0.038021513     1.4530044e-14     3.6280652e-11     3.6136108e-14
     1004        5.03000000       0.038021513     5.5994792e-13     3.0639519e-10     3.0517449e-13
Tischer2-8
     1002        5.01000000       0.038314028     1.7507024e-09      0.0034396059     3.4327405e-06
     1001        5.00000000        0.03846154     1.1967474e-09     9.2690537e-05     9.2597939e-08
     1002        5.01000000       0.038314029     1.1046185e-11     5.5457648e-05     5.5346954e-08
     1001        5.00000000       0.038461538     8.1363527e-12     5.3013635e-06     5.2960674e-09
     1002        5.01000000       0.038314029     8.0717377e-13     3.6786879e-07     3.6713452e-10
     1001        5.00000000       0.038461538     5.1623913e-12     3.5959124e-08     3.5923201e-11
     1002        5.01000000       0.038314029     5.6720066e-11     2.8704729e-08     2.8647434e-11
h=0.001
BDF1-6
    10001        5.00000000       0.038446746     1.4792899e-05        0.96160315       9.61507e-05
    10001        5.00000000       0.038461538     1.9914626e-15     0.00083457957     8.3449612e-08
    10001        5.00000000       0.038461538     3.1587094e-12     1.4958062e-06     1.4956566e-10
    10001        5.00000000       0.038461538     1.1116108e-14     4.0607305e-09     4.0603244e-13
    10001        5.00000000       0.038461538     4.4686477e-15     1.4817043e-10     1.4815561e-14
    10001        5.00000000       0.038461538     2.5673907e-15     1.6705484e-10     1.6703814e-14
Tendler3-7
    10002        5.00100000        0.03844675     1.5780807e-11     7.4778939e-06     7.4763986e-10
    10003        5.00200000       0.038431969     1.9900748e-14     9.5641657e-09     9.5612973e-13
    10001        5.00000000       0.038461538     4.4547699e-15     1.0163375e-10     1.0162359e-14
    10002        5.00100000        0.03844675     1.2902179e-13     8.1554464e-10     8.1538156e-14
    10003        5.00200000       0.038431969     2.7894353e-15     2.0495767e-10      2.048962e-14
eTendler3-9
    10002        5.00100000        0.03844675      2.841187e-11     1.3385142e-05     1.3382465e-09
    10003        5.00200000       0.038431969     1.8706564e-13     6.4299091e-08     6.4279807e-12
    10001        5.00000000       0.038461538     4.1720793e-13     2.2926937e-09     2.2924645e-13
    10002        5.00100000        0.03844675     1.3358065e-13      6.842014e-10     6.8406459e-14
    10003        5.00200000       0.038431969     3.1815522e-13     1.8802301e-09     1.8796662e-13
    10004        5.00300000       0.038417198     4.1347481e-13     2.0963204e-09     2.0954822e-13
    10004        5.00300000       0.038417198     3.6944822e-12     1.9619003e-08     1.9611158e-12
Tischer2-8
    10002        5.00100000        0.03844675     1.5202076e-12     0.00034400271     3.4393392e-08
    10001        5.00000000       0.038461538     2.3973878e-13     5.2563173e-07     5.2557918e-11
    10002        5.00100000        0.03844675      5.957318e-12     7.4183894e-08      7.416906e-12
    10001        5.00000000       0.038461538     3.9987597e-12     2.0334518e-08     2.0332484e-12
    10002        5.00100000        0.03844675     8.7370874e-12     4.3888124e-08     4.3879348e-12
    10001        5.00000000       0.038461538     5.0558134e-11     2.5322124e-07     2.5319592e-11
    10002        5.00100000       0.038446749     5.5987329e-10     2.7971488e-06     2.7965895e-10
</code></pre>
<p>Second <a href="https://eklausmeier.goip.de/pdf/stabregion2-rungeQuad-55-0.1-0.001.txt">quadruple precision</a>.</p>
<pre class="line-numbers"><code class="language-bash">$ for h in 0.1 0.01 0.001; do echo h=$h; stabregion2-batchRunge 3 $h; done | tee stabregion2-rungeQuad-55-0.1-0.001.txt

h=0.1
BDF1-6
      101        5.00000000       0.036982249      0.0014792899        0.96301775      0.0095348292
      101        5.00000000       0.038461624     8.5615576e-08       0.081866559     0.00081055999
      101        5.00000000       0.038457995     3.5430565e-06       0.014724693     0.00014578904
      101        5.00000000       0.038461536     2.5370787e-09      0.0039593414       3.92014e-05
      101        5.00000000        0.03846151     2.8146511e-08      0.0014265072     1.4123834e-05
      101        5.00000000        0.03846154     1.5475522e-09     0.00064442835     6.3804787e-06
Tendler3-7
      102        5.10000000       0.036999342     2.3982797e-05       0.044467626     0.00043595711
      103        5.20000000       0.035663316     2.2332109e-08      0.0067510688     6.5544358e-05
      101        5.00000000       0.038470049     8.5102832e-06      0.0037145982       3.67782e-05
      102        5.10000000       0.037021167     2.1578698e-06      0.0051242663     5.0237905e-05
      103        5.20000000       0.035647113     1.6224676e-05      0.0037800996     3.6699997e-05
eTendler3-9
      102        5.10000000       0.036969106     5.4218914e-05       0.055089196     0.00054009016
      103        5.20000000       0.035663776     4.3751846e-07       0.038297457     0.00037181997
      101        5.00000000       0.038460826      7.125863e-07        0.01320941     0.00013078623
      102        5.10000000       0.037027163     3.8384301e-06       0.006025627     5.9074774e-05
      103        5.20000000       0.035654912     8.4256313e-06      0.0015834431     1.5373234e-05
      104        5.30000000       0.034339883     3.6191523e-05      0.0023867322     2.2949348e-05
      104        5.30000000       0.032928864      0.0014472107       0.070966298     0.00068236825
Tischer2-8
      102        5.10000000       0.037021558     1.7662689e-06       0.034696237     0.00034015918
      101        5.00000000       0.038464072     2.5330643e-06       0.073964887     0.00073232561
      102        5.10000000       0.037021992       1.33266e-06       0.080142047     0.00078570635
      101        5.00000000       0.038462774     1.2360024e-06       0.069495329     0.00068807256
      102        5.10000000       0.037023224     1.0045488e-07       0.052946899     0.00051908725
      101        5.00000000         0.0384616      6.185701e-08       0.049366255      0.0004887748
      102        5.10000000       0.037023314     1.0532163e-08       0.052023547     0.00051003477
h=0.01
BDF1-6
     1001        5.00000000       0.038313609     0.00014792899        0.96168639     0.00096072566
     1001        5.00000000       0.038461538     7.3765577e-12      0.0083432045     8.3348697e-06
     1001        5.00000000       0.038461535      3.187737e-09     0.00014955862     1.4940921e-07
     1001        5.00000000       0.038461538      2.147895e-14     4.0610386e-06     4.0569816e-09
     1001        5.00000000       0.038461538     2.1682157e-13     1.4989475e-07       1.49745e-10
     1001        5.00000000       0.038461538     6.2646557e-18     6.9781307e-09     6.9711595e-12
Tendler3-7
     1002        5.01000000       0.038314013     1.6181463e-08     0.00073858904     7.3711481e-07
     1003        5.02000000       0.038167356     4.0604977e-14     9.5453891e-06     9.5168385e-09
     1001        5.00000000       0.038461538     5.5436381e-13     3.7829409e-07     3.7791617e-10
     1002        5.01000000       0.038314029     2.9131157e-17     1.9395319e-08     1.9356606e-11
     1003        5.02000000       0.038167356     6.7644051e-17     5.0508569e-10     5.0357496e-13
eTendler3-9
     1002        5.01000000          0.038314     2.9506202e-08      0.0012932428     1.2906615e-06
     1003        5.02000000       0.038167356     3.0223516e-12     6.3388013e-05     6.3198418e-08
     1001        5.00000000       0.038461538     6.3271927e-12     4.1263626e-06     4.1222404e-09
     1002        5.01000000       0.038314029     1.1011428e-16     4.3085019e-08     4.2999021e-11
     1003        5.02000000       0.038167356      2.327511e-16     2.2366291e-09     2.2299393e-12
     1004        5.03000000       0.038021513     1.8458542e-17     3.0512026e-11     3.0390464e-14
     1004        5.03000000       0.038021513     6.2485959e-16     3.0717034e-11     3.0594655e-14
Tischer2-8
     1002        5.01000000       0.038314028     1.7507017e-09      0.0034396059     3.4327405e-06
     1001        5.00000000        0.03846154     1.1967538e-09     9.2690539e-05     9.2597941e-08
     1002        5.01000000       0.038314029     1.1051463e-11      5.545765e-05     5.5346956e-08
     1001        5.00000000       0.038461538     8.1216551e-12     5.3013609e-06     5.2960649e-09
     1002        5.01000000       0.038314029     8.7515273e-13     3.6787568e-07      3.671414e-10
     1001        5.00000000       0.038461538     4.9692183e-12      3.588457e-08     3.5848722e-11
     1002        5.01000000       0.038314029     5.5859137e-11     2.8294333e-08     2.8237858e-11
h=0.001
BDF1-6
    10001        5.00000000       0.038446746     1.4792899e-05        0.96160315       9.61507e-05
    10001        5.00000000       0.038461538     7.2802821e-16     0.00083457955      8.344961e-08
    10001        5.00000000       0.038461538     3.1547856e-12     1.4957932e-06     1.4956437e-10
    10001        5.00000000       0.038461538     5.8275867e-19     4.0623438e-09     4.0619376e-13
    10001        5.00000000       0.038461538     4.1165801e-18     1.5002423e-11     1.5000923e-15
    10001        5.00000000       0.038461538     6.0173221e-18     8.9236344e-14     8.9227421e-18
Tendler3-7
    10002        5.00100000        0.03844675     1.5796532e-11     7.4779562e-06     7.4764609e-10
    10003        5.00200000       0.038431969     9.5172622e-18     9.6078734e-09     9.6049919e-13
    10001        5.00000000       0.038461538     2.8257019e-18     3.8083017e-11     3.8079209e-15
    10002        5.00100000        0.03844675     3.1136931e-18       2.23309e-13     2.2326435e-17
    10003        5.00200000       0.038431969     4.9839419e-18     4.6430436e-14     4.6416511e-18
eTendler3-9
    10002        5.00100000        0.03844675     2.8328214e-11     1.3384847e-05      1.338217e-09
    10003        5.00200000       0.038431969     4.4140581e-17     6.3839164e-08     6.3820018e-12
    10001        5.00000000       0.038461538     2.7400838e-16     4.2245435e-10      4.224121e-14
    10002        5.00100000        0.03844675     8.9378917e-18     4.7191011e-13     4.7181575e-17
    10003        5.00200000       0.038431969      1.836774e-16     1.2240796e-12     1.2237125e-16
    10004        5.00300000       0.038417198     9.6151792e-17     5.4300267e-13     5.4278556e-17
    10004        5.00300000       0.038417198     1.0707377e-15     5.4988138e-12     5.4966152e-16
Tischer2-8
    10002        5.00100000        0.03844675     1.5206948e-12     0.00034400268      3.439339e-08
    10001        5.00000000       0.038461538     2.4026387e-13     5.2563446e-07      5.255819e-11
    10002        5.00100000        0.03844675     5.9445514e-12     7.4128733e-08      7.411391e-12
    10001        5.00000000       0.038461538     3.8125509e-12     1.9176384e-08     1.9174467e-12
    10002        5.00100000        0.03844675     8.8178837e-12     4.4083648e-08     4.4074833e-12
    10001        5.00000000       0.038461538     4.9772535e-11     2.4826219e-07     2.4823737e-11
    10002        5.00100000       0.038446749     5.5929763e-10     2.7944458e-06      2.793887e-10
</code></pre>
<h2>5. Scripts to generate results<a id=scripts></a></h2>
<p>We used the C program <a href="https://github.com/eklausme/c/blob/master/stabregion2.c"><code>stabregion2.c</code></a> to generate above results.
Below shell script <code>stabregion2-batchRunge</code> was once run with $1=2<code>(double precision) and once with</code>$1=3` (quadruple precision).</p>
<pre class="line-numbers"><code class="language-bash">#!/bin/bash
# Run stabregion2 with precision $1 and various various step sizes $2 for Runge's problem

echo BDF1-6
for i in 1 2 3 4 5 6; do stabregion2 -f BDF$i -u$1:-5:5:$2 | tail -1; done
echo Tendler3-7
for i in 3 4 5 6 7; do stabregion2 -f Tendler$i -u$1:-5:5:$2 | tail -1; done
echo eTendler3-9
for i in 3 4 5 6 7 8 9; do stabregion2 -f eTendler$i -u$1:-5:5:$2 | tail -1; done
echo Tischer2-8
for i in 2 3 4 5 6 7 8 ; do stabregion2 -f Tischer$i -u$1:-5:5:$2 | tail -1; done
</code></pre>
<p>The output of above script was then processed with below Perl script to generate JSON for <a href="https://echarts.apache.org/en/">Apache ECharts</a>:</p>
<pre class="line-numbers"><code class="language-Perl">#!/bin/perl -W
# Generate JSON + ECharts commands from stabregion2-runge-55-0.1-0.001.txt
# That file was generated via
#    for h in 0.1 0.01 0.001; do echo h=$h; stabregion2-batchRunge 2 $h; done

use strict;
my ($log10,$h,$formula,$p,$gerr,@F) = (log(10),0,&quot;&quot;,0,0,());

print &quot;[\n\t[\&quot;formula\&quot;, \&quot;h\&quot;, \&quot;gerr\&quot;],\n&quot;;
while (&lt;&gt;) {
    if (/^h=(\d+\.\d+)/) { $h = $1; next; }
    if (/^(BDF|Tendler|eTendler|Tischer)(\d)-(\d)/) { $formula = $1; $p = $2 - 1; next; }
    if (/^\s*\d+\s+\d+\.\d+/) {
        @F = split(/\s+/);
        $gerr = $F[5];
        $p += 1;
        if ($gerr =~ /(-nan|nan)/ || $gerr &gt; 30) { $gerr = 5; }
        else { $gerr = -log($gerr) / $log10; }
    }
    printf(&quot;\t[ \&quot;%s%d\&quot;, \&quot;%g\&quot;, %g],\n&quot;,$formula,$p,$h,$gerr);
}
print &quot;];\n&quot;;
</code></pre>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler9</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler9</guid>
		<title>Stability Mountain for eTendler9</title>
		<category>mathematics</category>
		<pubDate>Mon, 29 Dec 2025 12:09:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas">Stability Regions for eTendler Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f eTendler9 -o3 -r800
</code></pre>
<p>eTendler9:</p>
<div id="container_eTendler9" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler8</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler8</guid>
		<title>Stability Mountain for eTendler8</title>
		<category>mathematics</category>
		<pubDate>Mon, 29 Dec 2025 12:08:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas">Stability Regions for eTendler Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f eTendler8 -o3 -r800
</code></pre>
<p>eTendler8:</p>
<div id="container_eTendler8" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler7</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler7</guid>
		<title>Stability Mountain for eTendler7</title>
		<category>mathematics</category>
		<pubDate>Mon, 29 Dec 2025 12:07:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas">Stability Regions for eTendler Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f eTendler7 -o3 -r800
</code></pre>
<p>eTendler7:</p>
<div id="container_eTendler7" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler6</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler6</guid>
		<title>Stability Mountain for eTendler6</title>
		<category>mathematics</category>
		<pubDate>Mon, 29 Dec 2025 12:06:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas">Stability Regions for eTendler Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f eTendler6 -o3 -r600
</code></pre>
<p>eTendler6:</p>
<div id="container_eTendler6" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler5</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler5</guid>
		<title>Stability Mountain for eTendler5</title>
		<category>mathematics</category>
		<pubDate>Mon, 29 Dec 2025 12:05:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas">Stability Regions for eTendler Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f eTendler5 -o3 -r600
</code></pre>
<p>eTendler5:</p>
<div id="container_eTendler5" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler4</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler4</guid>
		<title>Stability Mountain for eTendler4</title>
		<category>mathematics</category>
		<pubDate>Mon, 29 Dec 2025 12:04:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas">Stability Regions for eTendler Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f eTendler4 -o3 -r600
</code></pre>
<p>eTendler4:</p>
<div id="container_eTendler4" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler3</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-29-stability-mountain-for-etendler3</guid>
		<title>Stability Mountain for eTendler3</title>
		<category>mathematics</category>
		<pubDate>Mon, 29 Dec 2025 12:03:00 +0100</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas">Stability Regions for eTendler Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion2 -f eTendler3 -o3 -r600
</code></pre>
<p>eTendler3:</p>
<div id="container_eTendler3" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-28-stability-regions-for-etendler-formulas</guid>
		<title>Stability Regions for eTendler Formulas</title>
		<category>mathematics</category>
		<category>C / C++</category>
		<pubDate>Sun, 28 Dec 2025 13:30:00 +0100</pubDate>
		<description><![CDATA[
<p>In <a href="https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas">Searching for Tendler-like formulas</a> we developed new cyclic linear multistep formulas for the numerical solution of ordinary differential equations.
These cyclic formulas are similar to <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler's formulas</a>.
Order by order they improve on Widlund wedge angle and Widlund distance.</p>
<p>In <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">Die verwendeten zyklischen Formeln im Programm TENDLER</a> we listed the Widlund wedge α and Widlund distance δ for the seven formulas of Joel Tendler, which he developed during his <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">PhD thesis</a> in 1973.</p>
<p>We compute these values by using the <a href="https://de.wikipedia.org/wiki/QZ-Algorithmus">QZ algorithm</a>.
Also see <a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a>.</p>
<p>Compare <a href="https://eklausmeier.goip.de/blog/2013/08-11-design-notes-on-system-for-the-analysis-of-order-and-stepsize-changes-for-cyclic-composite-multistep-methods">Design Notes on System for the Analysis of Order- and Stepsize Changes for Cyclic Composite Multistep Methods</a>.
Many stability regions have been plotted here <a href="https://www.researchgate.net/publication/318252350_Regions_of_Absolute_Stability">Sand/Osterby (1979)</a>.</p>
<p>The graphs were generated by using the C program <a href="https://github.com/eklausme/c/blob/master/stabregion2.c">stabregion2.c</a>.
The number of records, command line flag <code>-r</code>, was chosen to be sufficiently small to not generate too many data points but at the same time show enough details of the stability region.</p>
<pre><code class="language-bash">stabregion2 -f eTendler3 -oj -r400
stabregion2 -f eTendler4 -oj -r400
stabregion2 -f eTendler5 -oj -r500
stabregion2 -f eTendler6 -oj -r500
stabregion2 -f eTendler7 -oj -r500
stabregion2 -f eTendler8 -oj -r500
stabregion2 -f eTendler9 -oj -r500
</code></pre>
<div id="container_eTendler3" class="chartarea"></div>
<div id="container_eTendler4" class="chartarea"></div>
<div id="container_eTendler5" class="chartarea"></div>
<div id="container_eTendler6" class="chartarea"></div>
<div id="container_eTendler7" class="chartarea"></div>
<div id="container_eTendler8" class="chartarea"></div>
<div id="container_eTendler9" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-20-welche-anwendungsfelder-gibt-es-fuer-kuenstliche-intelligenz-in-der-oeffentlichen-verwaltung</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-20-welche-anwendungsfelder-gibt-es-fuer-kuenstliche-intelligenz-in-der-oeffentlichen-verwaltung</guid>
		<title>Welche Anwendungsfelder gibt es für Künstliche Intelligenz in der öffentlichen Verwaltung?</title>
		<category>Organization</category>
		<pubDate>Sat, 20 Dec 2025 07:00:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#Einleit">1. Einleitung</a><ul>
<li><a href="#Problemstellung">1.1 Problemstellung und gesellschaftliche Relevanz</a></li>
<li><a href="#Zielsetzung">1.2 Zielsetzung und Aufbau der Arbeit</a></li>
<li><a href="#Methodik">1.3 Methodisches Vorgehen</a></li>
<li><a href="#ThematischeAbgr">1.4 Thematische Abgrenzungen</a></li>
</ul>
</li>
<li><a href="#Theoret">2. Theoretischer Rahmen und Grundannahmen</a><ul>
<li><a href="#Begriff_und_Zielsetzung">2.1 Begriff und Zielsetzung des Einsatzes von KI in der Verwaltung</a></li>
<li><a href="#Digital">2.2. Digitale Infrastrukturen und Datenräume als Grundlage</a></li>
<li><a href="#InstitutionelleEinbettung">2.3 Institutionelle Einbettung und Governance von KI</a></li>
</ul>
</li>
<li><a href="#Anwendungsbereiche">3. Anwendungsbereiche der KI in der öffentlichen Verwaltung</a><ul>
<li><a href="#Buergerservice">3.1 Bürgerservice</a><ul>
<li><a href="#Chatbot">3.1.1 Chatbots und persönliche Sprachassistenten</a></li>
<li><a href="#ServiceRoboter">3.1.2 Service-Roboter</a></li>
<li><a href="#DigitaleId">3.1.3 Digitale Identität und Zugangslösungen</a></li>
<li><a href="#IntelligenteAss">3.1.4 Intelligente Assistenz und Antragsunterstützung</a></li>
</ul>
</li>
<li><a href="#InterneVerwaltung">3.2 Interne Verwaltung</a><ul>
<li><a href="#Datenanalyse">3.2.1 Datenanalyse</a></li>
<li><a href="#Automatisierung">3.2.2 Automatisierung von Entscheidungsprozessen</a></li>
<li><a href="#Entscheidungsunterst">3.2.3 Entscheidungsunterstützung</a></li>
<li><a href="#Wissens">3.2.4 Wissensmanagement</a></li>
<li><a href="#TextFormulierung">3.2.5 Text- und Formulierungshilfe</a></li>
<li><a href="#DiagnoseRoboter">3.2.6 Diagnose-Roboter</a></li>
</ul>
</li>
<li><a href="#Kurze_Einordnung">3.3 Kurze Einordnung der Anwendungsbereiche</a></li>
</ul>
</li>
<li><a href="#Forschungsstand">4. Forschungsstand und Evidenzlücken</a></li>
<li><a href="#Schluss">5. Schlussfolgerung</a></li>
<li><a href="#Literat">Literaturverzeichnis</a></li>
</ul>
<h2>1. Einleitung<a id=Einleit></a></h2>
<h3>1.1 Problemstellung und gesellschaftliche Relevanz<a id=Problemstellung></a></h3>
<p>Die öffentliche Verwaltung steht in Deutschland vor tiefgreifenden strukturellen Herausforderungen.
Der demografische Wandel, begrenzte finanzielle Ressourcen und ein zunehmender Mangel an
qualifizierten Fachkräften führen dazu, dass Verwaltungen ihre Aufgaben unter immer anspruchsvolleren Rahmenbedingungen erfüllen müssen. Gleichzeitig steigen die Erwartungen der Bürgerinnen und Bürger an eine moderne, effiziente und serviceorientierte Verwaltung. Diese Entwicklungen
verdeutlichen den Handlungsdruck, bestehende Prozesse zu modernisieren und innovative Technologien einzusetzen, um die Leistungsfähigkeit langfristig zu sichern.</p>
<p>Künstliche Intelligenz (KI) ist in diesem Zusammenhang als Schlüsseltechnologie zu verstehen, die
das Potenzial besitzt, Verwaltungsprozesse zu optimieren, Entscheidungsabläufe zu unterstützen
und bürgernahe Dienstleistungen zu verbessern. Durch den gezielten Einsatz von KI können Routineaufgaben automatisiert, Arbeitsabläufe beschleunigt und Daten effizienter genutzt werden.
Dadurch entsteht die Möglichkeit, Verwaltungsleistungen qualitativ zu verbessern und personelle
Ressourcen gezielter einzusetzen.</p>
<p>Gleichzeitig gilt es zu betonen, dass sich nicht alle Aufgabenbereiche für den Einsatz von KI eignen.
Viele Tätigkeiten werden – etwa aufgrund rechtlicher Vorgaben oder ihres Ermessenscharakters –
weiterhin von Verwaltungsmitarbeitenden ausgeführt werden müssen. Umso wichtiger ist es, zu untersuchen, welche Aufgaben potenziell durch KI unterstützt oder übernommen werden können, um
auf dieser Grundlage eine fundierte Bewertung möglicher Einsatzfelder innerhalb unterschiedlicher
Behörden oder Verwaltungsebenen vorzunehmen.</p>
<h3>1.2 Zielsetzung und Aufbau der Arbeit<a id=Zielsetzung></a></h3>
<p>Ziel dieser Arbeit ist es, theoretisch fundiert zu analysieren, welche Anwendungsfelder für Künstliche
Intelligenz in der öffentlichen Verwaltung in der wissenschaftlichen Literatur beschrieben werden.
Die Arbeit soll einen systematischen Überblick über die Fähigkeiten und Einsatzmöglichkeiten von
KI im öffentlichen Sektor bieten und damit Entscheidungsträgerinnen und Entscheidungsträgern
eine Orientierung ermöglichen, in welchen Aufgabenfeldern sich eine Investition in KI besonders
lohnen kann.</p>
<p>Um dieses Ziel zu erreichen, werden zunächst die grundlegenden Annahmen und theoretischen
Prämissen des Einsatzes von KI im Verwaltungskontext dargestellt (Kapitel 2). Darauf aufbauend
werden zentrale Anwendungsbereiche herausgearbeitet, in denen KI nach der Literaturrecherche
zur Modernisierung der Verwaltung beitragen kann (Kapitel 3). Dabei werden zunächst Einsatzmöglichkeiten im Bürgerservice betrachtet, bevor anschließend Potenziale in der internen Verwaltung
analysiert werden. Abschließend werden der Forschungsstand kritisch beleuchtet (Kapitel 4), bevor
die zentralen Erkenntnisse im Fazit und Ausblick zusammengeführt werden (Kapitel 5).</p>
<h3>1.3 Methodisches Vorgehen<a id=Methodik></a></h3>
<p>Die Analyse basiert auf einer systematischen Literaturrecherche und einer theoretischen Auseinandersetzung mit dem Thema. Dazu wurden einschlägige wissenschaftliche Fachbücher, Artikel aus
Journals sowie aktuelle Studien herangezogen. Die Recherche erfolgte unter anderem über akademische Datenbanken wie EBSCOhost, ScienceDirect, SpringerLink sowie Google Scholar.</p>
<p>Im Fokus stand die Identifikation relevanter theoretischer Konzepte sowie empirischer Studien, die
Anwendungsfelder von KI in der öffentlichen Verwaltung adressieren. Die gesammelte Literatur
wurde im Hinblick auf Forschungsfragen, Methodik und Ergebnisse kritisch analysiert, um eine Einordnung des Forschungsstandes zu ermöglichen.</p>
<h3>1.4 Thematische Abgrenzungen<a id=ThematischeAbgr></a></h3>
<p>Diese Arbeit befasst sich ausschließlich mit den Anwendungsfeldern Künstlicher Intelligenz in der
öffentlichen Verwaltung in Deutschland. Nicht Gegenstand sind Prozesse der politischen Willensbildung oder Entscheidungsfindung. Ebenso werden privatwirtschaftliche Kontexte sowie internationale Vergleiche ausgeklammert. Darüber hinaus verzichtet die Arbeit bewusst auf Umsetzungsfragen – einschließlich detaillierter rechtlicher Prüfungen, organisatorischer Einführungsstrategien oder
technischer Implementierungsaspekte. Spezifische Sektorenanwendungen, etwa im Bildungs-, Gesundheits- oder Verkehrsbereich, werden nicht vertieft behandelt, da der Fokus auf verwaltungsübergreifenden Einsatzfeldern liegt. Im Mittelpunkt steht stattdessen eine systematische Bestandsaufnahme und Strukturierung potenzieller Einsatzbereiche von KI, ohne deren konkrete Realisierung
im Verwaltungsvollzug im Detail zu behandeln. Ziel ist es, den gegenwärtigen Stand wissenschaftlicher Erkenntnisse zu erfassen und einzuordnen. Zukunftsszenarien oder spekulative Prognosen
über künftige Entwicklungen werden ebenfalls nicht betrachtet; der Fokus liegt auf gegenwärtig identifizierbaren, bereits erforschten oder konzeptionell beschriebenen Anwendungsfeldern.</p>
<h2>2. Theoretischer Rahmen und Grundannahmen<a id=Theoret></a></h2>
<h3>2.1 Begriff und Zielsetzung des Einsatzes von KI in der Verwaltung<a id=Begriff_und_Zielsetzung></a></h3>
<p>KI ist ein vielschichtiger Begriff, der in der wissenschaftlichen Diskussion nicht einheitlich definiert
ist. Grundsätzlich bezieht er sich auf informationsverarbeitende Systeme, die Aufgaben übernehmen
können, für die bislang menschliche Denk-, Lern- oder Entscheidungsprozesse erforderlich waren.
Im weiteren Sinne beschreibt KI die Fähigkeit technischer Systeme, komplexe Ziele selbstständig
zu verfolgen und hierfür geeignete Handlungen abzuleiten. Diese Definition umfasst mehrere kognitive Funktionen wie Wahrnehmung, Lernen, Problemlösung und Entscheidungsfindung. Praktisch
bedeutet dies, dass ein System als „intelligent“ gilt, wenn es seine Umgebung – etwa durch Sensoren oder Datenanalyse – erfassen, diese Informationen verarbeiten und darauf basierend zielgerichtet und rational handeln kann. KI zielt somit darauf ab, menschliche Intelligenz in ausgewählten Bereichen technisch nachzubilden oder zu ergänzen (Ertel, 2025, S. 1f; Djeffal, 2018, S. 6-8; Heine et
al., 2023, S. 3f).</p>
<p>Ziel des Einsatzes von KI in der Verwaltung ist es, bestehende Prozesse zu unterstützen, zu beschleunigen und qualitativ zu verbessern. KI soll Verwaltungsmitarbeitende entlasten, indem sie repetitive oder regelbasierte Tätigkeiten automatisiert und dadurch Raum für komplexere Aufgaben
schafft. Der Nutzen von KI liegt dabei weniger in der vollständigen Ersetzung menschlicher Arbeit,
sondern in der Erweiterung menschlicher Handlungsmöglichkeiten. So kann KI beispielsweise helfen, große Datenmengen zu strukturieren, Prognosen zu erstellen oder Muster in Verwaltungsakten
zu erkennen, die für den Menschen nur schwer erfassbar wären (Djeffal, 2018, S. 10; Wangler &amp;
Botthof, 2019, S.132f; Heine et al., 2023, S. 3f).</p>
<p>Im Unterschied zu privatwirtschaftlichen Anwendungsfeldern ist der KI-Begriff in der Verwaltung eng
an rechtliche, ethische und gesellschaftliche Anforderungen gebunden. Verwaltungshandeln ist
durch Prinzipien wie Rechtsstaatlichkeit, Transparenz, Gleichbehandlung und Nachvollziehbarkeit
geprägt. Daher ist der Einsatz von KI hier stets normativ eingebettet: Entscheidungen müssen überprüfbar, Ermessensspielräume klar geregelt und Datenschutzanforderungen gewahrt bleiben
(Djeffal, 2018, S. 13, 18; Hill, 2018, S. 290; Etscheid et al., 2020, S. 12ff).</p>
<h3>2.2. Digitale Infrastrukturen und Datenräume als Grundlage<a id=Digital></a></h3>
<p>Damit KI in der öffentlichen Verwaltung wirkungsvoll eingesetzt werden kann, sind geeignete technische Infrastrukturen erforderlich, die den Zugriff auf qualitativ hochwertige, verknüpfbare und sicher verwaltete Daten ermöglichen. KI-Systeme benötigen große Mengen strukturierter und unstrukturierter Daten, um Muster zu erkennen, Prognosen zu erstellen und Entscheidungsprozesse zu
unterstützen. Diese Daten entstehen zunehmend in digitalisierten Verwaltungsabläufen, aber auch
durch Sensoren, smarte Objekte und cyberphysische Systeme, die physische Prozesse digital abbilden und steuern. Sie bilden die Grundlage für eine datengetriebene Verwaltung, in der maschinelles Lernen und automatisierte Entscheidungsfindung überhaupt erst möglich werden (Etscheid et
al., 2020, S. 18ff).</p>
<p>Von zentraler Bedeutung ist die Etablierung von Datenplattformen und Datenräumen, die als technologische Basis einer KI-gestützten Verwaltung dienen. Datenplattformen bündeln Informationen
aus heterogenen Quellen, standardisieren sie und stellen sie über Schnittstellen für weiterführende
Systeme bereit. Sie fungieren damit als Vermittlungs- und Integrationsschicht zwischen Fachverfahren, externen Datenlieferanten und KI-Anwendungen. Aufbauend darauf ermöglichen Datenräume
einen dezentralen und zugleich sicheren Datenaustausch zwischen verschiedenen Verwaltungseinheiten und externen Akteuren. Sie beruhen auf gemeinsamen technischen Standards, definieren
Zugriffsrechte und sichern Datensouveränität sowie Nachvollziehbarkeit der Nutzung. Damit schaffen sie die infrastrukturelle Grundlage für eine vertrauenswürdige Nutzung von Daten in der öffentlichen Verwaltung (Etscheid et al., 2020, S. 20f).</p>
<p>Erst wenn diese technischen Voraussetzungen erfüllt sind – also leistungsfähige IT-Infrastrukturen,
interoperable Datenplattformen und rechtssichere Datenräume bestehen – kann KI ihr Potenzial in
der Verwaltung entfalten. Die Gestaltung dieser digitalen Basis bestimmt zugleich, in welchem Maße
der Einsatz von KI effizient, transparent und verantwortungsvoll erfolgen kann. Auf dieser technischen Grundlage baut der folgende Abschnitt auf, der die organisatorischen, rechtlichen und gesellschaftlichen Rahmenbedingungen – insbesondere Governance, Regulierung und Akzeptanz – als
weitere Voraussetzungen für den KI-Einsatz behandelt.</p>
<h3>2.3 Institutionelle Einbettung und Governance von KI<a id=InstitutionelleEinbettung></a></h3>
<p>Der Einsatz von Künstlicher Intelligenz in der öffentlichen Verwaltung setzt neben technischen Infrastrukturen auch klare organisatorische und rechtliche Rahmenbedingungen voraus. Verwaltungshandeln unterliegt dem Prinzip der Rechtsstaatlichkeit und ist an Normen wie Transparenz, Gleichbehandlung und Nachvollziehbarkeit gebunden. Daher muss der Einsatz von KI-Systemen in bestehende Verwaltungsprozesse so eingebettet werden, dass diese Grundprinzipien gewahrt bleiben.
KI ist dabei nicht als autonomer Akteur, sondern als Werkzeug zur Unterstützung menschlicher Entscheidungen zu verstehen, das der behördlichen Verantwortung und Kontrolle unterliegt (Djeffal,
2018, S. 15f; Hill, 2018, S. 290).</p>
<p>Ein zentrales Element der Governance von KI ist die institutionelle Steuerung und Kontrolle ihres
Einsatzes. Führungskräfte in Behörden tragen die Verantwortung dafür, dass technologische Lösungen zweckmäßig, rechtssicher und ethisch vertretbar implementiert werden. Dazu gehört insbesondere die Prüfung, in welchen Verfahren der Einsatz von KI tatsächlich einen Mehrwert bietet und
welche Grenzen durch Datenschutz, Gleichbehandlungsgrundsatz oder Ermessensentscheidungen
bestehen. Leitlinien und ethische Kodizes können hier Orientierung geben, ersetzen jedoch nicht die
fallbezogene Abwägung im konkreten Verwaltungskontext (Hill, 2018, S. 292).</p>
<p>Neben rechtlicher und organisatorischer Steuerung ist die Akzeptanz innerhalb der Verwaltung ein
entscheidender Erfolgsfaktor. Die Einführung von KI verändert Arbeitsabläufe, Entscheidungsstrukturen und Kompetenzanforderungen. Ein großer Teil des verwaltungsspezifischen Wissens über Abläufe, Zuständigkeiten und Entscheidungslogiken ist implizit und an die Erfahrung der Beschäftigten
gebunden. Damit dieses Wissen erhalten bleibt und in die Entwicklung von KI-Systemen einfließt,
müssen Mitarbeitende aktiv in Gestaltungsprozesse einbezogen werden. Gleichzeitig sind umfassende Qualifizierungs- und Weiterbildungsmaßnahmen erforderlich, um den sicheren und souveränen Umgang mit neuen Technologien zu fördern (Djeffal, 2018, S. 16; Hill, 2018, S. 291; Etscheid
et al., 2020, S. 51). Ziel einer verantwortungsvollen KI-Governance ist es, technologische und organisatorische Kompetenz schrittweise innerhalb der Verwaltung aufzubauen, um Abhängigkeiten von
externen Anbietern zu vermeiden. Nur wenn Verwaltung und Technologieentwicklung gemeinsam
Wissen generieren, kann ein rechtssicherer, transparenter und gesellschaftlich akzeptierter Einsatz
von Künstlicher Intelligenz gelingen. Die Governance von KI ist somit als kontinuierlicher Lern- und
Anpassungsprozess zu verstehen, der rechtliche, organisatorische und kulturelle Dimensionen miteinander verbindet (Hill, 2018, S. 291f; Etscheid et al., 2020, S. 51).</p>
<h2>3. Anwendungsbereiche der KI in der öffentlichen Verwaltung<a id=Anwendungsbereiche></a></h2>
<p>Nachdem im vorhergehenden Kapitel die begrifflichen Grundlagen sowie die technischen und institutionellen Voraussetzungen für den Einsatz von Künstlicher Intelligenz in der Verwaltung dargestellt
wurden, soll nun der Blick auf die konkreten Anwendungsfelder gerichtet werden. Da die wissenschaftliche Literatur keine einheitliche Systematik zur Kategorisierung der Einsatzfelder vorgibt, bietet sich eine strukturierende Einteilung nach dem Handlungsfokus der Verwaltung an. In dieser Arbeit wird daher zwischen Anwendungsfeldern im Bürgerservice (Tz. 3.1) und Anwendungsfeldern in
den internen Verwaltungsprozessen (Tz. 3.2) unterschieden. Im Folgenden werden diese beiden
Hauptbereiche systematisch dargestellt und anhand der einschlägigen Forschungsliteratur erläutert.</p>
<h3>3.1 Bürgerservice<a id=Buergerservice></a></h3>
<p>Die Interaktion zwischen Verwaltung und Bürgerinnen bzw. Bürgern bildet einen zentralen Ansatzpunkt der digitalen Verwaltungsmodernisierung. Verbesserungen in diesem Bereich sind unmittelbar
erlebbar und stärken das Vertrauen in staatliche Institutionen. Ein digitaler Zugang zur Verwaltung
gilt als sichtbarer Ausdruck moderner, serviceorientierter Staatlichkeit und erhöht zugleich die Legitimation öffentlicher Investitionen in Digitalisierungsprojekte. Das Leitmotiv der Bürgerorientierung
überträgt Prinzipien der Kundenorientierung aus der Privatwirtschaft auf den öffentlichen Sektor. Ziel
ist es, Verwaltungsleistungen konsequent an den Bedürfnissen der Bevölkerung auszurichten und
den Zugang zu Informationen und Services orts- und zeitunabhängig zu gestalten. In der Praxis
erfüllen viele Verwaltungsportale bislang jedoch überwiegend Informationsfunktionen, während interaktive und personalisierte Angebote selten sind. Hier setzt der Einsatz von Künstlicher Intelligenz
an. Sie kann Kommunikations- und Auskunftsprozesse automatisiert unterstützen und damit die Interaktion zwischen Bürgern und Verwaltung erleichtern. KI-basierte Systeme beantworten häufige
Anfragen, schlagen passende Dienstleistungen vor oder übernehmen einfache Transaktionen eigenständig. Dadurch verändert sich die Rolle der Verwaltung: Routinetätigkeiten werden technologische Systeme übernehmen können, während Mitarbeitende sich verstärkt auf beratende und fallbezogene Aufgaben konzentrieren (Etscheid et al., 2020, S. 22; Möltgen &amp; Lorig, 2009, S. 225 ff;
Derungs &amp; Wellinger, 2023, S. 43).</p>
<p>Im Folgenden werden zentrale Anwendungsformen des KI-Einsatzes im Bürgerservice vorgestellt.
Diese lassen sich in zwei Gruppen einteilen: kommunikationsorientierte Anwendungen, die auf den
direkten Austausch mit Bürgerinnen und Bürgern abzielen (Chatbots, Sprachassistenten und Service-Roboter), sowie transaktionsorientierte Anwendungen, die den Zugang und die Nutzung von
Verwaltungsleistungen unterstützen (digitale Identität und Antragsassistenz) (Heine et al., 2023, S.
4; Derungs &amp; Wellinger, 2023, S. 43).</p>
<p>Abbildung 1 Anwendungsbereiche im Bürgerservice<a id=Abbildu></a></p>
<p><img src="https://eklausmeier.goip.de/img/VeraAnwendungsbereicheImBuergerservice.webp" alt="Photo"></p>
<p>(Eigene Darstellung)</p>
<h4>3.1.1 Chatbots und persönliche Sprachassistenten<a id=Chatbot></a></h4>
<p>Sprachassistenten und Chatbots dienen als Schnittstellen für natürliche Mensch-Maschine-Interaktion und grenzen sich von Telefonleitsystemen oder klickbasierten Menüführungen ab, weil sie Eingaben in natürlicher Sprache verstehen und verarbeiten. Chatbots lassen sich in zwei Typen unterscheiden: regelbasierte Systeme, die auf vordefinierte Stichwörter reagieren, und lernende Systeme,
die mithilfe von Ontologien, Thesauri und Verfahren des maschinellen Lernens kontextbezogene
und qualitativ hochwertige Antworten erzeugen. Lernfähige Chatbots passen den Dialog dynamisch
an den Nutzerkontext an und steigern damit den Mehrwert, während einfache, regelbasierte Systeme häufig begrenzt bleiben. Im Verwaltungskontext werden Chatbots derzeit vor allem zur Informationsvermittlung eingesetzt, etwa zu Verfahren, Fristen oder Formularen. Persönliche Sprachassistenten bilden eine sprachzentrierte Weiterentwicklung und sind häufig in Smartphones oder
smarte Lautsprecher integriert und nutzen im Hintergrund erweiterbare KI-Dienste. Ihre intuitive Bedienbarkeit eröffnet insbesondere für barrierefreie Verwaltungsangebote großes Potenzial (Heine et
al., 2022, S. 1–4; Etscheid et al., 2020, S. 23 f; Hill, 2018, S. 289 f; Derungs &amp; Wellinger, 2023, S.
43 f)</p>
<h4>3.1.2 Service-Roboter<a id=ServiceRoboter></a></h4>
<p>Während Chatbots und Sprachassistenten den digitalen Dialog unterstützen, erweitern Service-Roboter diesen Ansatz um eine physische Dimension. Sie agieren im direkten Kontaktbereich zwischen
Verwaltung und Bürgerinnen bzw. Bürgern und übernehmen einfache Interaktions- oder Orientierungsaufgaben. Ausgestattet mit Sprach- und Bilderkennungsfunktionen können Service-Roboter
Anfragen verstehen, Informationen bereitstellen und Besucher zu den zuständigen Stellen leiten.
Ihre Funktion ähnelt der einer digitalen Rezeption: Sie geben Orientierung, prüfen bei Bedarf Unterlagen und können Wartezeiten oder Abläufe koordinieren. Technisch handelt es sich um KI-basierte
Interaktionssysteme, die Chatbots um sensorische und motorische Komponenten erweitern. Durch
ihre Integration in Empfangs- oder Servicebereiche können sie den Ablauf vor Ort unterstützen, Informationen vorerfassen und Mitarbeitende im Publikumsverkehr entlasten. Der persönliche Kontakt
bleibt dabei bestehen, wird jedoch durch technologische Unterstützung ergänzt. Service-Roboter
verdeutlichen damit, wie KI in physischer Form zu einer modernen, reaktionsfähigen Verwaltung
beitragen kann (Etscheid et al., 2020, S. 24 f; Derungs &amp; Wellinger, 2023, S. 43 f; Heine et al., 2023,
S. 4).</p>
<h4>3.1.3 Digitale Identität und Zugangslösungen<a id=DigitaleId></a></h4>
<p>Ein zentraler Erfolgsfaktor digitaler Verwaltungsangebote ist ein einheitlicher und sicherer Zugang.
Aktuell sind viele Systeme durch unterschiedliche Registrierungs- und Authentifizierungsverfahren
geprägt, was die Nutzung erschwert und die Zahl aktiver Nutzerinnen und Nutzer begrenzt. Eine
übergreifende, datenschutzkonforme digitale Identität, die verschiedene Verwaltungsverfahren abdeckt, befindet sich in Deutschland noch im Aufbau. Ziel ist es, die wiederholte Eingabe gleicher
Daten zu vermeiden und stattdessen eine einheitliche Identität bereitzustellen, über die Bürgerinnen
und Bürger mit einer Anmeldung auf alle relevanten Leistungen zugreifen können. Mit Zustimmung
der Nutzenden könnten personenbezogene Daten künftig einmalig hinterlegt und für unterschiedliche Verfahren automatisiert bereitgestellt werden. Dadurch ließe sich der Aufwand für Identifikation
und Datenpflege deutlich reduzieren, während zugleich Datenqualität und Sicherheit steigen würden. KI kann diesen Prozess unterstützen, indem sie Identitätsdaten validiert, Mehrfachregistrierungen erkennt und Authentifizierungsverfahren an Nutzungskontexte anpasst. Damit bildet die digitale
Identität die technische Grundlage für eine medienbruchfreie, vernetzte Verwaltungsinteraktion (Etscheid et al., 2020, S. 25; Heine et al., 2023, S. 4).</p>
<h4>3.1.4 Intelligente Assistenz und Antragsunterstützung<a id=IntelligenteAss></a></h4>
<p>Ein großer Teil der Interaktionen zwischen Bürgerinnen und Bürgern und der Verwaltung entfällt auf
Antragsprozesse, die häufig komplex, formularbasiert und wenig intuitiv gestaltet sind. KI bietet hier
das Potenzial, diese Verfahren zu strukturieren und nutzerorientierter zu gestalten. Durch die Verarbeitung natürlicher Sprache können Anliegen frei formuliert werden, ohne dass Antragstellende
die exakten Verwaltungsbegriffe kennen müssen. Das System erkennt relevante Informationen,
überträgt sie automatisiert in digitale Formulare und prüft die Eingaben auf Vollständigkeit und Plausibilität. Fehlende Daten können durch gezielte Rückfragen ergänzt werden. Darüber hinaus ermöglichen KI-Systeme eine proaktive Unterstützung: Auf Grundlage vorhandener Informationen lassen
sich passende Leistungen, Fördermöglichkeiten oder Fristen identifizieren und Vorschläge anzeigen. So wird die Antragstellung nicht nur vereinfacht, sondern auch stärker auf individuelle Lebenssituationen abgestimmt. Für die Verwaltung entsteht dadurch eine strukturierte Datenbasis, die die
Bearbeitung beschleunigt und Medienbrüche reduziert. Die Verantwortung für die inhaltliche Prüfung
bleibt dabei beim Menschen. Insgesamt fördern intelligente Assistenzsysteme eine transparente und
nachvollziehbare Kommunikation zwischen Bürgern und Verwaltung (Etscheid et al., 2020, S. 26;
Hill, 2018, S. 288).</p>
<h3>3.2 Interne Verwaltung<a id=InterneVerwaltung></a></h3>
<p>Nachdem im vorherigen Abschnitt Anwendungen von Künstlicher Intelligenz vorgestellt wurden, die
auf die direkte Interaktion mit Bürgerinnen und Bürgern ausgerichtet sind, richtet sich der Blick nun
auf den internen Verwaltungsbereich.</p>
<p>In großen Organisationen steigt mit der Zahl an Aufgaben und Zuständigkeiten auch der Aufwand
für interne Abläufe, die der eigentlichen Leistungserbringung vor- oder nachgelagert sind. Diese
Prozesse erzeugen zwar keinen unmittelbaren Mehrwert nach außen, bilden jedoch die Grundlage
für ein rechtskonformes und funktionierendes Verwaltungshandeln. Gerade in der öffentlichen Verwaltung, die ein breites Spektrum an Themen und Fachaufgaben abdeckt, beanspruchen solche
Tätigkeiten erhebliche personelle und zeitliche Ressourcen. Vor diesem Hintergrund gewinnt der
Einsatz digitaler Technologien, insbesondere von Künstlicher Intelligenz, an Bedeutung. Ziel ist es,
wiederkehrende und standardisierbare Aufgaben zu unterstützen, zu strukturieren oder – wo rechtlich möglich – zu automatisieren. Neben der Prozessautomatisierung findet KI Anwendung in der
Datenanalyse, im Wissensmanagement, bei der Text- und Formulierungshilfe sowie in robotischen
Systemen zur Zustandsdiagnose. Diese Ansätze sollen interne Abläufe vereinfachen, Entscheidungsgrundlagen verbessern und Beschäftigte bei der Bearbeitung komplexer Aufgaben entlasten
(Etscheid et al., 2020, S. 28; Hill, 2018, S. 291; Heine et al., 2023, S. 3 f).</p>
<p>Abbildung 2 Anwendungsbereiche in der internen Verwaltung</p>
<p><img src="https://eklausmeier.goip.de/img/VeraAnwendungsbereicheInterneVerwaltung.webp" alt="Photo"></p>
<p>(Eigene Darstellung)</p>
<h4>3.2.1 Datenanalyse<a id=Datenanalyse></a></h4>
<p>Datenanalyse soll Entscheidungen in der Verwaltung fundieren, indem sie umfangreiche Informationsbestände systematisch strukturiert, Zusammenhänge sichtbar macht, Hypothesen prüft und Anomalien erkennt. Künstliche Intelligenz erweitert klassische Analyseansätze, weil lernende Modelle
heterogene Quellen verknüpfen, verborgene Muster erkennen und Ergebnisse verdichten. Durch
automatisierte Aufbereitung sowie die kompakte Darstellung der Resultate werden große Datenmengen nutzbar gemacht und die Bewertung komplexer Sachverhalte datenfundierter gestaltet
(Heine et al., 2023, S. 3 f; Mergel, 2018, S. 76; Microsoft, 2023).</p>
<p>Die zugrunde liegende Datenbasis liegt vor allem in administrativ erzeugten Beständen wie Registern, Meldesystemen und amtlichen Erhebungen. Diese standardisierten Datensätze enthalten demografische und sozioökonomische Merkmale und eignen sich zur Analyse von Entwicklungen und
Mustern in unterschiedlichen Verwaltungsbereichen. Ergänzend fallen strukturierte und unstrukturierte Daten in hoher Frequenz an. In der Kombination entsteht ein Informationsfundament, das KIgestützte Analysen wirksam macht und die Ableitung tragfähiger Handlungsempfehlungen ermöglicht. So werden Informationsbestände effizient erschlossen und konsistent für operative Entscheidungen sowie strategische Steuerungszwecke bereitgestellt (Mergel, 2018, S. 76; Heine et al., 2023,
S. 3 f; Microsoft, 2023).</p>
<h4>3.2.2 Automatisierung von Entscheidungsprozessen<a id=Automatisierung></a></h4>
<p>Die Automatisierung von Verwaltungsentscheidungen stellt einen zentralen Entwicklungsschritt im
Einsatz von Künstlicher Intelligenz dar. Sie dient dazu, standardisierte Verfahren zu beschleunigen
und die Bearbeitung wiederkehrender Fälle zu vereinheitlichen – insbesondere dort, wo klare rechtliche Tatbestände und eindeutige Entscheidungsregeln bestehen. Einfache Formen der Automatisierung beruhen auf regelbasierten Systemen, die Entscheidungen anhand vordefinierter WennDann-Bedingungen treffen. Diese lassen sich transparent abbilden und werden bereits in Prüf- und
Genehmigungsverfahren eingesetzt. Komplexer sind lernende Systeme, die anhand früherer Entscheidungen Muster ableiten und daraus Vorschläge für vergleichbare Fälle generieren. KI-gestützte
Risikomanagementsysteme können Vorgänge automatisiert bewerten und selektieren, indem sie
unauffällige Fälle freigeben und potenziell risikobehaftete zur weiteren Prüfung kennzeichnen.
Dadurch werden personelle Ressourcen gezielter eingesetzt und Bearbeitungszeiten verkürzt. Der
angestrebte Nutzen liegt in konsistenteren Entscheidungen und einer Verringerung subjektiver Verzerrungen. Gleichwohl bleibt die vollständige Automatisierung rechtlich und ethisch umstritten, da
Transparenz, Kontrolle und Verantwortlichkeit stets gewährleistet sein müssen. Den höchsten Grad
erreichen autonome Systeme, die innerhalb klarer Parameter ganze Prozesse eigenständig steuern.
Solche Ansätze befinden sich bislang überwiegend im Pilotstadium, da Fragen der Nachvollziehbarkeit und Aufsicht noch offen sind (Thapa &amp; Parycek, 2018, S. 61–63; Etscheid et al., 2020, S. 28–
30). Unabhängig vom Automatisierungsgrad gilt: Systeme müssen regelmäßig überprüft und angepasst werden. Zudem sollten föderale und kommunale Gestaltungsspielräume gewahrt bleiben, um
Eigenverantwortung und Kontrolle der Verwaltung sicherzustellen (Hill, 2018, S. 292–293; Djeffal,
2018, S. 19–21).</p>
<h4>3.2.3 Entscheidungsunterstützung<a id=Entscheidungsunterst></a></h4>
<p>Künstliche Intelligenz kann auch ohne Automatisierung einen erheblichen Beitrag zur Verbesserung
administrativer Entscheidungsprozesse leisten. Ziel ist eine datenbasierte, evidenzorientierte Entscheidungsfindung, bei der Mensch und Maschine komplementär zusammenwirken: Die KI übernimmt die Analyse großer Datenbestände und erkennt Muster, während die abschließende Bewertung in menschlicher Verantwortung verbleibt. Zentrale Instrumente dieser Systeme sind Dashboards und Analyse-Cockpits, die Daten aus unterschiedlichen Quellen zusammenführen und visuell aufbereiten. Dadurch lassen sich Entwicklungen verfolgen, Szenarien simulieren und Handlungsoptionen vergleichend bewerten. KI-basierte Vorschlags- und Bewertungssysteme schaffen
somit eine strukturierte Informationsgrundlage für strategische Entscheidungen. Ergänzend ermöglichen prognostische Anwendungen – etwa in der Einsatzplanung oder Wartung – eine vorausschauende Steuerung von Ressourcen. Trotz dieser Potenziale müssen Ermessensentscheidungen beim
Menschen verbleiben, da sie rechtliche und gesellschaftliche Bewertungen erfordern. Transparenz,
Nachvollziehbarkeit und Qualitätssicherung sind daher unverzichtbare Voraussetzungen für den
Einsatz solcher Systeme (Etscheid et al., 2020, S. 33–35; Mergel, 2018, S. 80 ff; Hill, 2018, S. 291–
293; Heine et al., 2023, S. 3 f).</p>
<h4>3.2.4 Wissensmanagement<a id=Wissens></a></h4>
<p>Der Zugriff auf interne Informationen, Vorschriften oder Prozessbeschreibungen gestaltet sich häufig
komplex und zeitaufwändig. KI-gestützte Such- und Dialogsysteme können Abhilfe schaffen, indem
sie eine intuitive Interaktion mit Intranets und Wissensdatenbanken ermöglichen. Mitarbeitende können Informationen in natürlicher Sprache abfragen und erhalten präzise, kontextbezogene Antworten. Diese automatisierte Informationsbereitstellung erleichtert insbesondere die Einarbeitung neuer
Beschäftigter und fördert die bereichsübergreifende Zusammenarbeit. Informationen, die bislang in
getrennten organisatorischen Einheiten gespeichert waren, werden leichter auffindbar und gemeinsam nutzbar. Zugleich verringert sich der Aufwand für Routineaufgaben, da relevante Dokumente
oder Anweisungen schneller identifiziert werden können. Langfristig stärkt ein solches Wissensmanagement den institutionellen Wissenstransfer und reduziert Informationsverluste. Dadurch verbessern sich Abstimmung, Transparenz und Produktivität innerhalb der Verwaltung (Riedel, 2018, S.
39–41; Microsoft, 2023).</p>
<h4>3.2.5 Text- und Formulierungshilfe<a id=TextFormulierung></a></h4>
<p>Textgenerierende Systeme eröffnen der Verwaltung vielfältige Einsatzmöglichkeiten. Sie können sowohl die interne Kommunikation als auch den formellen Schriftverkehr unterstützen, indem sie Textentwürfe, Zusammenfassungen oder Redebeiträge auf Basis kurzer Eingaben erstellen. Darüber
hinaus lassen sich komplexe Dokumente wie Anträge, Anhörungen oder Gutachten durch generative KI analysieren und strukturiert aufbereiten. Diese Werkzeuge dienen nicht der automatischen
Veröffentlichung, sondern als kreative und strukturierende Unterstützung im Schreibprozess. Sie</p>
<p>helfen, Routineaufgaben zu beschleunigen und Schreibprozesse zu vereinfachen, während die fachliche und rechtliche Kontrolle weiterhin beim Menschen verbleibt. So trägt die Formulierungsunterstützung durch generative KI dazu bei, die Textarbeit in der Verwaltung präziser, konsistenter und
ressourcenschonender zu gestalten (Schröder, 2025, S. 230 f; Microsoft, 2023).</p>
<h4>3.2.6 Diagnose-Roboter<a id=DiagnoseRoboter></a></h4>
<p>Ein weiteres Anwendungsfeld betrifft KI-gestützte Diagnose-Roboter, die Zustände von Objekten,
Infrastrukturen oder Umgebungen eigenständig erfassen und analysieren. Sie kombinieren sensorische Technologien, bildgebende Verfahren und datenbasierte Auswertungen, um Veränderungen
oder Risiken zu erkennen. Ihr Einsatz eignet sich besonders in Bereichen, die eine kontinuierliche
Zustandsüberwachung erfordern oder für Menschen schwer zugänglich sind. Durch automatisierte
Datenerhebung und KI-gestützte Interpretation können Schäden oder Störungen frühzeitig erkannt
und präventive Maßnahmen eingeleitet werden. Diagnose-Roboter verdeutlichen damit die Verbindung von datenverarbeitenden und physisch agierenden KI-Systemen, die Sicherheit, Verfügbarkeit
und Nachhaltigkeit von Infrastrukturen unterstützen (Heine et al., 2023, S. 3 f).</p>
<h3>3.3 Kurze Einordnung der Anwendungsbereiche<a id=Kurze_Einordnung></a></h3>
<p>Die dargestellten Anwendungsfelder verdeutlichen, dass sich der Einsatz von Künstlicher Intelligenz
in der öffentlichen Verwaltung in zwei komplementären Dimensionen entfaltet. Im Bürgerservice liegt
der Schwerpunkt auf der Vereinfachung der Interaktion zwischen Verwaltung und Bevölkerung. KISysteme übernehmen hier vor allem strukturierende und vermittelnde Funktionen: Sie automatisieren Kommunikations- und Informationsprozesse, reduzieren Komplexität und schaffen barrierearme
Zugänge zu Verwaltungsleistungen. Dadurch wird die Verwaltung nach außen responsiver, transparenter und serviceorientierter.</p>
<p>In der internen Verwaltung hingegen tritt KI als analytisches und organisatorisches Werkzeug auf.
Sie dient der Aufbereitung, Verknüpfung und Bewertung großer Informationsbestände, unterstützt
Routineabläufe und ermöglicht datenbasierte Entscheidungsprozesse. Lernende Systeme tragen
dazu bei, Informationsflüsse zu standardisieren, Redundanzen abzubauen und die Bearbeitung
fachlich komplexer Vorgänge zu strukturieren. So stärkt KI die operative Effizienz und fördert eine
konsistente, wissensbasierte Verwaltungssteuerung.</p>
<p>In der Gesamtschau erfüllen KI-Systeme damit zwei zentrale Rollen: Nach außen agieren sie als
intermediäre Schnittstellen zwischen Staat und Gesellschaft, die Kommunikation und Zugang vereinfachen. Nach innen fungieren sie als Instrumente der Analyse, Automatisierung und Wissensnutzung, die Entscheidungs- und Verwaltungsprozesse rationalisieren. Diese doppelte Wirkrichtung
macht deutlich, dass der Mehrwert von KI nicht in der Ersetzung menschlicher Entscheidungen liegt,
sondern in deren Ergänzung durch datengetriebene Unterstützungssysteme.
Diese Einordnung bildet die Grundlage für die folgende Betrachtung des Forschungsstandes.</p>
<h2>4. Forschungsstand und Evidenzlücken<a id=Forschungsstand></a></h2>
<p>Der Wissenschaft kommt im Kontext der digitalen Transformation der öffentlichen Verwaltung eine
zentrale Orientierungsfunktion zu. Während sich die Forschung bislang überwiegend mit theoretischen und technischen Grundlagen sowie mit Anwendungen von Künstlicher Intelligenz in der Privatwirtschaft befasst hat, ist die wissenschaftliche Auseinandersetzung mit dem Einsatz von KI in
der öffentlichen Verwaltung – insbesondere im deutschen Kontext – noch vergleichsweise gering
ausgeprägt. Zwar liegen einzelne fundierte Beiträge vor, doch bleibt das Forschungsfeld insgesamt
fragmentiert. Die vorhandene Literatur konzentriert sich meist auf konzeptionelle oder sektorspezifische Analysen, während systematische, empirisch gestützte und vergleichende Untersuchungen zu
Anwendungsfeldern bisher selten sind.</p>
<p>Häufig stehen dabei Teilaspekte im Vordergrund, etwa rechtliche Fragen wie Datenschutz und Haftung, ethische Implikationen oder der Einsatz von KI in einzelnen Verwaltungsdomänen wie Revision, Bildung oder Verkehr. Eine übergreifende, integrative Betrachtung der Wirkungszusammenhänge innerhalb der Verwaltung fehlt hingegen weitgehend.</p>
<p>Als zentrale Referenzen gelten die Arbeiten von Etscheid und von Lucke (2020) sowie Heine et al.
(2023), die erstmals eine strukturierte Systematisierung von Anwendungsfeldern und Einsatzszenarien vorgenommen haben. Diese Beiträge schaffen eine konzeptionelle Grundlage für die Einordnung der vielfältigen Potenziale von KI in der Verwaltung und markieren damit einen wesentlichen
Ausgangspunkt für die weitere Forschung. Insgesamt zeigt der aktuelle Forschungsstand, dass das
Wissen über Möglichkeiten und Strukturen des KI-Einsatzes vorhanden ist, die praktische Umsetzung in der Verwaltungsrealität jedoch noch deutlich hinter den theoretischen Erkenntnissen zurückbleibt.</p>
<h2>5. Schlussfolgerung<a id=Schluss></a></h2>
<p>Ausgehend vom Reformdruck durch demografischen Wandel, knappe Ressourcen und Fachkräftemangel zeigt die Analyse, dass Künstliche Intelligenz die Leistungsfähigkeit der Verwaltung erhöhen
kann, ohne menschliche Verantwortung zu ersetzen. Ziel war eine systematische Ordnung der Anwendungsfelder sowie eine Orientierung für investitionsrelevante Entscheidungen. Der Kern liegt in
der Unterscheidung zwischen bürgernahen und internen Einsatzbereichen sowie in den gemeinsamen Mustern über Anwendungsfälle hinweg. Nach außen stehen nutzerzentrierte Zugänge und
strukturierte Kommunikationsprozesse im Vordergrund, nach innen datengetriebene Analyse, Standardisierung und Automatisierung in Bereichen mit klaren rechtlichen Tatbeständen. Voraussetzungen dafür sind leistungsfähige IT-Infrastrukturen, interoperable Datenplattformen und rechtssichere,
vertrauenswürdige Datenräume sowie eine Governance, die Transparenz, Nachvollziehbarkeit und
Qualifizierung dauerhaft verankert.</p>
<p>Für die Einführung von KI sollte eine Priorisierung vorgenommen werden. Vorrangig sollten Aufgaben mit hohem Volumen, geringer Ermessensdichte und stabilen Entscheidungsregeln berücksichtigt werden. Ergänzend eignen sich bürgernahe Kontaktpunkte mit häufigen Standardanfragen sowie interne Funktionen wie Wissensmanagement, datenbasierte Entscheidungsunterstützung und
qualitätssichernde Textarbeit. So können Bearbeitungszeiten gesenkt, Konsistenz erhöht und personelle Ressourcen auf komplexe Fälle konzentriert werden. Da belastbare Wirkungsnachweise im
deutschen Verwaltungskontext noch begrenzt sind, sollte ein schrittweises Vorgehen mit klar definierten Anwendungsfällen, überprüfbaren Qualitätskriterien und begleitender Evaluation gewählt
werden. Auf dieser Basis kann KI gezielt dort eingesetzt werden, wo sie den größten Beitrag zur
Modernisierung leistet und die intendierte Orientierung für Entscheidungen praktisch wirksam wird.</p>
<p>Die Einführung und der Ausbau von KI müssen dabei ganzheitlich gedacht werden. Neben Investitionen in KI selbst sind leistungsfähige IT-Infrastrukturen, interoperable Datenplattformen, rechtssichere Datenräume sowie eine rechtliche und organisatorische Steuerung und die Förderung von
Akzeptanz innerhalb der Verwaltung entscheidend. Da KI Arbeitsabläufe, Entscheidungsstrukturen
und Kompetenzanforderungen verändert, sollten Mitarbeitende aktiv in Gestaltungsprozesse einbezogen werden, um den Wandel nachhaltig voranzutreiben.</p>
<p>KI wird nicht alle Herausforderungen der öffentlichen Verwaltung lösen können, doch sie kann zu
einem entscheidenden Pfeiler ihrer Zukunftsfähigkeit werden. Damit dieser Wandel gelingt, braucht
es Mut, neue Technologien verantwortungsvoll zu erproben, Klarheit in rechtlichen, organisatorischen und ethischen Fragen sowie Verlässlichkeit gegenüber den Mitarbeitenden und Bürgerinnen
und Bürgern, die den Erfolg dieser Transformation letztlich tragen. KI ist kein Selbstzweck, sondern
ein Werkzeug, das – richtig eingesetzt – die Verwaltung nicht ersetzt, sondern stärkt.</p>
<h2>Literaturverzeichnis<a id=Literat></a></h2>
<ol>
<li>Derungs, C., &amp; Wellinger, D. (2024). KI bei Bürgerdienstleistungen von Gemeinden. Marketing Review St. Gallen, (4), 40–47.</li>
<li>Djeffal, C. (2018). Künstliche Intelligenz in der öffentlichen Verwaltung. Berichte des Nationalen EGovernment Kompetenzzentrums, (3), 1-32.</li>
<li>Ertel, W. (2025). Grundkurs Künstliche Intelligenz (6. Aufl.). Springer Fachmedien Wiesbaden.
<a href="https://doi.org/10.1007/978-3-658-44955-1_1">https://doi.org/10.1007/978-3-658-44955-1_1</a></li>
<li>Etscheid, J., von Lucke, J., &amp; Stroh, F. (2020). Künstliche Intelligenz in der öffentlichen Verwaltung:
Anwendungsfelder und Szenarien. Fraunhofer-Institut für Arbeitswirtschaft und Organisation.
<a href="http://publica.fraunhofer.de/dokumente/N-577708.html">http://publica.fraunhofer.de/dokumente/N-577708.html</a></li>
<li>Heine, M. (2023). Einleitung. In M. Heine, A.-K. Dhungel, T. Schrills &amp; D. Wessel (Hrsg.), Künstliche
Intelligenz in öffentlichen Verwaltungen: Grundlagen, Herausforderungen, Chancen und Einsatzszenarien (S. 1–5). Springer Fachmedien Wiesbaden. <a href="https://doi.org/10.1007/978-3-658-40101-6_1">https://doi.org/10.1007/978-3-658-40101-6_1</a></li>
<li>Hill, H. (2018). Was bedeutet Künstliche Intelligenz für die öffentliche Verwaltung? Verwaltung und Management, 24(6), 287–294.</li>
<li>Mergel, I. (2018). <a href="https://nbn-resolving.org/urn:nbn:de:0168-ssoar-57518-2">Big Data und Data-Science-Ansätze in der öffentlichen Verwaltung</a>. In R. Mohabbat Kar, B. E. P. Thapa &amp; P. Parycek (Hrsg.), (Un)berechenbar? Algorithmen und Automatisierung in Staat und Gesellschaft (S. 76–85). Fraunhofer-Institut für Offene Kommunikationssysteme FOKUS,
Kompetenzzentrum Öffentliche IT (ÖFIT).</li>
<li>Microsoft. (2023). Generative AI and Public Sector. Microsoft Public Sector Blog. <a href="https://wwps.microsoft.com/blog/ai-public-sector">https://wwps.microsoft.com/blog/ai-public-sector</a></li>
<li>Möltgen, K., &amp; Lorig, W. H. (2009). Die kundenorientierte Verwaltung – zu den Facetten eines Leitbildes der Verwaltungsmodernisierung. In E. Czerwick, W. H. Lorig &amp; E. Treutner (Hrsg.), Die öffentliche Verwaltung in der Demokratie der Bundesrepublik Deutschland (S. 225–240). VS Verlag für Sozialwissenschaften. <a href="https://doi.org/10.1007/978-3-531-92115-0_11">https://doi.org/10.1007/978-3-531-92115-0_11</a></li>
<li>Riedel, H. (2018). <a href="https://www.springerprofessional.de/den-virtuellen-beamten-wird-es-nicht-geben/15438940">Den virtuellen Beamten wird es nicht geben</a>. Innovative Verwaltung, 40(1), 39–41. <a href="https://doi.org/10.1007/s35114-017-0150-z">https://doi.org/10.1007/s35114-017-0150-z</a></li>
<li>Schröder, S. (2025). Textgenerierende KI im Verwaltungsverfahren – Politische Ziele, Regulierung
und Verwaltungspraxis im Spannungsfeld. In S. Schröder (Hrsg.), Schreibende KI – ein interdisziplinärer Diskurs: Perspektiven über den Sinn oder Unsinn von schreibender KI (S. 229–247). Springer Fachmedien Wiesbaden.</li>
<li>Thapa, B. E. P.&amp; Parycek, P. (2018). <a href="https://www.ssoar.info/ssoar/bitstream/handle/document/57531/ssoar-2018-thapa_et_al-Data_Analytics_in_Politik_und.pdf?sequence=1&amp;isAllowed=y&amp;lnkname=ssoar-2018-thapa_et_al-Data_Analytics_in_Politik_und.pdf">Data Analytics in Politik und Verwaltung</a>.
In R. Mohabbat Kar, B. E. P. Thapa &amp; P. Parycek (Hrsg.), (Un)berechenbar? Algorithmen und Automatisierung in
Staat und Gesellschaft (S. 40–75). Fraunhofer-Institut für Offene Kommunikationssysteme FOKUS, Kompetenzzentrum Öffentliche IT (ÖFIT).  https://nbn-resolving.org/urn:nbn:de:0168-ssoar-57518-2</li>
<li>Wangler, L., &amp; Botthof, A. (2019). E-Governance: Digitalisierung und KI in der öffentlichen Verwaltung. In V. Wittpahl (Hrsg.), Künstliche Intelligenz (S. 115–132). Springer Vieweg.  <a href="https://doi.org/10.1007/978-3-662-58042-4_8">https://doi.org/10.1007/978-3-662-58042-4_8</a></li>
</ol>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-17-comparing-bdf-vs-tendler-vs-tischer</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-17-comparing-bdf-vs-tendler-vs-tischer</guid>
		<title>Comparing BDF vs. Tendler vs. Tischer formulas</title>
		<category>mathematics</category>
		<pubDate>Wed, 17 Dec 2025 19:00:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#test_eq">1. Dahlquist's test equation</a></li>
<li><a href="#double_prec">2. Logarithmic error in double precision</a></li>
<li><a href="#single">3. Logarithmic error in single precision and other machines</a></li>
<li><a href="#scripts">4. Scripts to generate results</a></li>
</ul>
<h2>1. Dahlquist's test equation<a id=test_eq></a></h2>
<p>We tested the BDF, <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler's formulas</a>, new Tendler-like formulas, and <a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Tischer's formulas</a> on the classical test equation</p>
<div class=math>
$$
    y´(t) = \lambda y(t) \in \mathbb{C}, \quad y(t_0) = e^{\lambda t_0}, \quad t\in[t_0, t_1].
$$
</div>
<p>We used</p>
<div class=math>
$$
    \lambda = r e^{i \varphi}, \quad t_0=0, \quad t_1=-40, \quad h\lt 0.
$$
</div>
<p>The radius is fixed to $r=100$, and $\varphi$ varies from 5° to 90° in steps of 5°.
$\varphi$ directly tests the Widlund wedge angle of the formula.</p>
<p>The stepsize $h$ of each formula is varied repeatedly from -0.1, -0.01, and -0.001.</p>
<p>Above differential equation is now solved with the following formulas:</p>
<ol>
<li>BDF order 1–6</li>
<li>Tendler order 3–7</li>
<li>new Tendler-like formulas order 3–9, see <a href="https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas">Tendler-like formulas</a></li>
<li>Tischer's formulas of order 2–8 using $S=0$</li>
</ol>
<p>This creates 1350 data points.
Multiply by 2 machines, and two precisions, gives 5400 records.</p>
<p>We report the <em>summed global error</em> computed as</p>
<div class=math>
$$
    g_\hbox{err} = \sum_{i=0}^n |y(t_i) - y_i|, \quad n={t_1-t_0\over h}.
$$
</div>
<p>Computations were done in double precision (<code>double complex</code>).
Results are <a href="https://eklausmeier.goip.de/pdf/stabregion2-test-5-90-0.1-0.001.txt">here</a>.
As the global error $|y(t_i) - y_i|$ per step varies wildly between $10^{-324}$ to $10^{+304}$, we computed</p>
<div class=math>
$$
    \hat g_\hbox{err} = \begin{cases}
        5, & \hbox{if } g_\hbox{err} \gt  30 \hbox{ or NaN}\\
        \log_{10} g_\hbox{err}, & \hbox{else}
    \end{cases}
$$
</div>
<p>Smaller is better.
That's what is shown in below graphic.</p>
<p>Computations were done on below machine.</p>
<table>
<thead>
<tr>
<th>Hard- and software</th>
<th>Machine 1</th>
<th>Machine 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>CPU</td>
<td>AMD Ryzen 7 5700G with Radeon Graphics</td>
<td>ARM Cortex-A77</td>
</tr>
<tr>
<td>CPU max MHz</td>
<td>4673.8232</td>
<td>3187.2000</td>
</tr>
<tr>
<td>C compiler</td>
<td>gcc version 15.2.1 20251112 (GCC)</td>
<td>clang version 21.1.7</td>
</tr>
<tr>
<td>Floating point arithmetic</td>
<td>IEEE-754 standard compliant floating-point operator (with only minor documented deviations)</td>
<td>IEEE 754 standard</td>
</tr>
</tbody>
</table>
<h2>2. Logarithmic error in double precision<a id=double_prec></a></h2>
<p>Below 3D chart can be rotated and zoomed in or out.
Clicking on any entry shows the log global error $\hat g_\hbox{err}$.
Double precision on AMD Ryzen.</p>
<div id="container_AMD_double" class=chartareaBig></div>
<p>One can clearly see that the higher order methods quickly lose precision when a higher Widlund wedge angle is required.
This is the reason why GEAR, <a href="https://www.netlib.org/ode/epsode.f">EPISODE</a>, <a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a> and <a href="https://github.com/LLNL/sundials/releases/download/v7.5.0/cvode-7.5.0.tar.gz">CVODE</a> all do <em>not</em> use BDF6.
However, in reality, this is mainly a problem for the stepsize and order control segment to properly switch order.</p>
<p>For the <a href="https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas">new Tendler-like</a> formulas we intend to use even the higher order methods of order 8 and 9, as we aim to provide a type-insensitive code, which just switches between fixed point iteration and modified Newton method.
It is well known, see <a href="https://doi.org/10.1007/978-3-642-58351-3">Montenbruck/Gill (2000)</a> §4.1.6, that higher order methods are indeed required for certain precisions.</p>
<h2>3. Logarithmic error in single precision and other machines<a id=single></a></h2>
<p>As <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a> noted a sensitivity regarding the used precision, we repeated above test in single precision (<code>float complex</code>) and on another machine.
The qualitative results didn't differ in any way.
Results are <a href="https://eklausmeier.goip.de/pdf/stabregion2-testfloat-5-90-0.1-0.001.txt">here</a>.</p>
<p><strong>1.</strong> Single precision on AMD Ryzen. Results are <a href="https://eklausmeier.goip.de/pdf/stabregion2-testfloat-5-90-0.1-0.001.txt">here</a>.</p>
<div id="container_AMD_single" class=chartarea></div>
<p><strong>2.</strong> Double precision on ARM Cortex. Results are <a href="https://eklausmeier.goip.de/pdf/stabregion2-Cortex-test-5-90-0.1-0.001.txt">here</a>.</p>
<div id="container_ARM_double" class=chartarea></div>
<p><strong>3.</strong> Single precision on ARM Cortex. Results are <a href="https://eklausmeier.goip.de/pdf/stabregion2-Cortex-testfloat-5-90-0.1-0.001.txt">here</a>.</p>
<div id="container_ARM_single" class=chartarea></div>
<h2>4. Scripts to generate results<a id=scripts></a></h2>
<p>We used the C program <a href="https://github.com/eklausme/c/blob/master/stabregion2.c"><code>stabregion2.c</code></a> to generate above results.
Below shell script <code>stabregion2-batch</code>  was once run with <code>F=t</code> (lower case) and once with <code>F=T</code> (capital), while varying $\varphi$ and $h$.</p>
<pre class="line-numbers"><code class="language-bash">#!/bin/bash
# Run stabregion2 with various parameters for multiple formulas

F=T

echo BDF1-6
for i in 1 2 3 4 5 6; do stabregion2 -f BDF$i -${F}100:$1:0:-40:$2 | tail -1; done
echo Tendler3-7
for i in 3 4 5 6 7; do stabregion2 -f Tendler$i -${F}100:$1:0:-40:$2 | tail -1; done
echo eTendler3-9
for i in 3 4 5 6 7 8 9; do stabregion2 -f eTendler$i -${F}100:$1:0:-40:$2 | tail -1; done
echo Tischer2-8
for i in 2 3 4 5 6 7 8 ; do stabregion2 -f Tischer$i -${F}100:$1:0:-40:$2 | tail -1; done
</code></pre>
<p>Above script was called like so:</p>
<pre class="line-numbers"><code class="language-bash">for phi in `seq 5 5 90`; do echo phi=$phi; for h in -0.1 -0.01 -0.001; do echo h=$h; stabregion2-batch $phi $h; done; done
</code></pre>
<p>The output of above script was then processed with below Perl script to generate JSON for <a href="https://echarts.apache.org/en/">Apache ECharts</a>:</p>
<pre class="line-numbers"><code class="language-Perl">#!/bin/perl -W
# Generate JSON + ECharts commands from stabregion2-test-phi1-phi2-h1-h2.txt
# That file was generated via
#    for phi in `seq 5 5 90`; do echo phi=$phi; for h in -0.1 -0.01 -0.001; do echo h=$h; stabregion2-batch $phi $h; done; done

use strict;
my ($log10,$phi,$h,$formula,$p,$gerr,@F) = (log(10),0,0,&quot;&quot;,0,0,());

print &quot;[\n\t[\&quot;formula\&quot;, \&quot;h_phi\&quot;, \&quot;gerr\&quot;],\n&quot;;
while (&lt;&gt;) {
    if (/^phi=(\d+)/) { $phi = $1; next; }
    if (/^h=([+-]\d+\.\d+)/) { $h = $1; next; }
    if (/^(BDF|Tendler|eTendler|Tischer)(\d)-(\d)/) { $formula = $1; $p = $2 - 1; next; }
    if (/^\s*\d+\s+[+-]\d+\.\d+/) {
        @F = split(/\s+/);
        $gerr = $F[6];
        $p += 1;
        if ($gerr =~ /(-nan|nan)/ || $gerr &gt; 30) { $gerr = 5; }
        else { $gerr = log($gerr) / $log10; }
    }
    #printf(&quot;phi=%d, h=%g, formula=%s, p=%d, gerr=%g\n&quot;,$phi,$h,$formula,$p,$gerr);
    printf(&quot;\t[ \&quot;%s%d\&quot;, \&quot;%g/%g\&quot;, %g],\n&quot;,$formula,$p,$h,$phi,$gerr);
}
print &quot;];\n&quot;;
</code></pre>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-14-searching-for-tendler-like-formulas</guid>
		<title>Searching for Tendler-like formulas</title>
		<category>mathematics</category>
		<pubDate>Sun, 14 Dec 2025 18:10:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#baseline">1. Baseline</a></li>
<li><a href="#new">2. Specific new formulas</a></li>
<li><a href="#search_grid">3. Searching across grids</a></li>
<li><a href="#various_formulas">4. Various new formulas</a></li>
<li><a href="#stabregion2">5. stabregion2.c</a></li>
</ul>
<h2>1. Baseline<a id=baseline></a></h2>
<p>The formulas from <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler from 1973</a> are our baseline.
Clearly, we want to improve them.
So here we summarize their characteristics:</p>
<ul>
<li><em>p</em> is the <a href="https://eklausmeier.goip.de/blog/2024/06-11-konvergenzresultate-fuer-feste-schrittweiten">order</a></li>
<li><em>l</em> is the <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">cycle length</a></li>
<li>α is the <a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Widlund wedge angle</a></li>
<li>δ is the Widlund distance</li>
</ul>
<table>
<thead>
<tr>
<th><em>p</em></th>
<th><em>l</em></th>
<th>abs(root)</th>
<th>α(Tendler)</th>
<th>δ(Tendler)</th>
<th></th>
<th>α(Tischer)</th>
<th>δ(Tischer)</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>3</td>
<td>0</td>
<td>90°</td>
<td>0</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>0.333333333</td>
<td>90°</td>
<td>0</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td>0.55371901</td>
<td>89.427°</td>
<td>0.004776</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>0.35406989</td>
<td>80.882047°</td>
<td>0.244157</td>
<td></td>
<td>90°</td>
<td>0</td>
</tr>
<tr>
<td>5</td>
<td>4</td>
<td>0.42931855</td>
<td>77.477315°</td>
<td>1.421472</td>
<td></td>
<td>86.649352°</td>
<td>0.040844</td>
</tr>
<tr>
<td>6</td>
<td>4</td>
<td>0.52827598</td>
<td>63.245842°</td>
<td>2.933167</td>
<td></td>
<td>76.311756°</td>
<td>0.280752</td>
</tr>
<tr>
<td>7</td>
<td>4</td>
<td>0.66669430</td>
<td>33.531759°</td>
<td>10.179501</td>
<td></td>
<td>57.663061°</td>
<td>0.959187</td>
</tr>
<tr>
<td>8</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td></td>
<td>22.149242°</td>
<td>2.534082</td>
</tr>
</tbody>
</table>
<p><a href="https://eklausmeier.goip.de/blog/2025/01-07-praktische-gewinnung-zyklischer-steif-stabiler-verfahren#Basisformeln">Linear combinations</a> for Tendler's formulas.</p>
<table>
<thead>
<tr>
<th><em>p</em>=3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
</tr>
</thead>
<tbody>
<tr>
<td>1<br>1 0<br>1 -2 -2</td>
<td>1<br>1 0<br>4 -4 -5</td>
<td>1<br>1 0<br>10 0 -1<br>20 -51 -62 1</td>
<td>1<br>20 -1<br>20 -1 7<br>20 -78 -68 3</td>
<td>1<br>1 0<br>20 -31 -10<br>10 -20 -5 2</td>
</tr>
</tbody>
</table>
<h2>2. Specific new formulas<a id=new></a></h2>
<p>In light of all the options, given below, it is quite difficult to choose from all those.
Here we focus on Widlund wedge angle and root magnitude.</p>
<table>
<thead>
<tr>
<th><em>p</em></th>
<th><em>l</em></th>
<th>abs(root)</th>
<th>α(new)</th>
<th>δ(new)</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>3</td>
<td>3</td>
<td>0.70756795</td>
<td>89.72423°</td>
<td>-0.00164</td>
<td>worse root modulus, better α, better δ</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>0.28351644</td>
<td>84.91216°</td>
<td>-0.07106</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>5</td>
<td><strong>3</strong></td>
<td>0.48870093</td>
<td>77.81321°</td>
<td>-0.42370</td>
<td>shorter cycle length, better δ</td>
</tr>
<tr>
<td>6</td>
<td>4</td>
<td>0.29026688</td>
<td>71.63806°</td>
<td>-1.03854</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>7</td>
<td>4</td>
<td>0.57300425</td>
<td>55.13529°</td>
<td>-3.87902</td>
<td>better modulus, better α, better δ</td>
</tr>
<tr>
<td>8</td>
<td>4</td>
<td>0.61600197</td>
<td>none</td>
<td>-15.05503</td>
<td>no other formula with α&gt;0.1 found</td>
</tr>
<tr>
<td>9</td>
<td><strong>5</strong></td>
<td>0.76270334</td>
<td>none</td>
<td>-38.22753</td>
<td>cycle length &gt; 4 seems to be required</td>
</tr>
</tbody>
</table>
<p>Linear combinations for specific new formulas.</p>
<table>
<thead>
<tr>
<th><em>p</em>=3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th>9</th>
</tr>
</thead>
<tbody>
<tr>
<td>1<br> 56 -41<br>44 -63 -64</td>
<td>1<br>3 -7<br>2 -5 4<br></td>
<td>1<br>3 -10<br>4 -9 9</td>
<td>1<br>3 -4<br>12 -10 5<br>3 -10 -4 5</td>
<td>1<br>3 -10<br>3 -7 5<br>6 -7 8 -4</td>
<td>1<br>91 -67<br>29 -77 30<br>97 -97 3 25</td>
<td>1<br>14 -39<br>47 -25 -32<br>91 14 -29 -16<br>86 68 68 -67 -96</td>
</tr>
</tbody>
</table>
<p>In the C program <a href="https://github.com/eklausme/c/blob/master/stabregion2.c"><code>stabregion2.c</code></a> these formulas are defined as below.</p>
<pre class="line-numbers" data-line=4,21,40,61,86,113,142><code class="language-C">formula_t F[] = {
    . . .
    {
        &quot;eTendler3&quot;, 3, 3, 3,	// name, p, k, l
        (double[]){
          -2,	   0,	   0,
           9,	-153,	   0,
         -18,	 750,	 -23,
          11,	-1131,	 966,
           0,	 534,	-1365,
           0,	   0,	 422,
        // -------------------
           0,	   0,	   0,
           0,	   0,	   0,
           0,	   0,	   0,
           6,	-246,	-384,
           0,	 336,	-378,
           0,	   0,	 264 }
    },
    {
        &quot;eTendler4&quot;, 4, 4, 3,	// name, p, k, l
        (double[]){
           3,	   0,	   0,
         -16,	  16,	   0,
          36,	 -90,	  15,
         -48,	 234,	 -94,
          25,	-214,	 162,
           0,	  54,	-114,
           0,	   0,	  31,
        // ------------------
           0,	   0,	   0,
           0,	   0,	   0,
           0,	   0,	   0,
           0,	   0,	   0,
          12,	 -84,	  48,
           0,	  36,	 -60,
           0,	   0,	  24 }
    },
    {
        &quot;eTendler5&quot;, 5, 5, 3,	// name, p, k, l
        (double[]){
         -12,	   0,	   0,
          75,	 -66,	   0,
        -200,	 425,	 -93,
         300,	-1200,	 615,
        -300,	2100,	-1880,
         137,	-1550,	2460,
           0,	 291,	-1515,
           0,	   0,	 413,
        // -------------------
           0,	   0,	   0,
           0,	   0,	   0,
           0,	   0,	   0,
           0,	   0,	   0,
           0,	   0,	   0,
          60,	-600,	 540,
           0,	 180,	-540,
           0,	   0,	 240 }
    },
    {
        &quot;eTendler6&quot;, 6, 6, 4,	// name, p, k, l
        (double[]){
          10,	   0,	   0,	   0,
         -72,	  38,	   0,	   0,
         225,	-276,	 145,	   0,
        -400,	 875,	-1054,	  41,
         450,	-1600,	3350,	-289,
        -360,	1950,	-6200,	 830,
         147,	-1388,	7075,	-1880,
           0,	 401,	-4970,	2935,
           0,	   0,	1654,	-1991,
           0,	   0,	   0,	 354,
        // ---------------------------
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
          60,	-240,	 300,	 300,
           0,	 180,	-600,	-240,
           0,	   0,	 720,	-600,
           0,	   0,	   0,	 180 }
    },
    {
        &quot;eTendler7&quot;, 7, 7, 4,	// name, p, k, l
        (double[]){
         -60,	   0,	   0,	   0,
         490,	-280,	   0,	   0,
        -1764,	2310,	-270,	   0,
        3675,	-8442,	2233,	-474,
        -4900,	18025,	-8197,	3920,
        4410,	-25200,	17675,	-14413,
        -2940,	25830,	-25550,	31430,
        1089,	-14910,	23695,	-42770,
           0,	2667,	-12383,	36904,
           0,	   0,	2797,	-20615,
           0,	   0,	   0,	6018,
        // ---------------------------
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
         420,	-4200,	2100,	-1680,
           0,	1260,	-2940,	3360,
           0,	   0,	1260,	-2940,
           0,	   0,	   0,	2520 }
    },
    {
        &quot;eTendler8&quot;, 8, 8, 4,	// name, p, k, l
        (double[]){
         105,	   0,	   0,	   0,
        -960,	10560,	   0,	   0,
        3920,	-96740,	4350,	   0,
        -9408,	396116,	-40060,	11580,
        14700,	-954618,	165256,	-106094,
        -15680,	1501850,	-402822,	434406,
        11760,	-1623860,	646450,	-1046346,
        -6720,	1267140,	-731500,	1640450,
        2283,	-701166,	591360,	-1801730,
           0,	200718,	-290706,	1438794,
           0,	   0,	57672,	-782406,
           0,	   0,	   0,	211346,
        // -------------------------------------
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,
         840,	-56280,	25200,	21000,
           0,	76440,	-64680,	2520,
           0,	   0,	24360,	-81480,
           0,	   0,	   0,	81480 }
    },
    {
        &quot;eTendler9&quot;, 9, 9, 5,	// name, p, k, l
        (double[]){
        -280,	   0,	   0,	   0,	   0,
        2835,	-5285,	   0,	   0,	   0,
        -12960,	53730,	-13715,	   0,	   0,
        35280,	-246960,	138885,	-24780,	   0,
        -63504,	677376,	-634992,	250764,	-22331,
        79380,	-1233036,	1728720,	-1145544,	225768,
        -70560,	1569960,	-3111108,	3115434,	-1029642,
        45360,	-1446480,	3883740,	-5600364,	2789808,
        -22680,	1028160,	-3422160,	6991530,	-4946214,
        7129,	-486351,	2295792,	-6110664,	6531756,
           0,	88886,	-1194345,	3889494,	-5933718,
           0,	   0,	329183,	-2019384,	3364992,
           0,	   0,	   0,	653514,	-1609983,
           0,	   0,	   0,	   0,	629564,
        // ---------------------------------------------------------
           0,	   0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,	   0,
           0,	   0,	   0,	   0,	   0,
        2520,	-98280,	-80640,	-40320,	-241920,
           0,	35280,	-63000,	-73080,	-168840,
           0,	   0,	118440,	35280,	171360,
           0,	   0,	   0,	229320,	171360,
           0,	   0,	   0,	   0,	216720 }
    }
};
</code></pre>
<h2>3. Searching across grids<a id=search_grid></a></h2>
<p><strong>Order 3:</strong></p>
<pre class="line-numbers" data-line=5><code class="language-bash">$ stabregion2 -bBase3 -I3:-10:10:99500 -r600 -W89.7
W= 89.71433, xmin= -0.00148, parasitic=0.7271         1.000000      1.014789     -0.862211      3.382612     -6.186519     -2.667767            1
W= 89.72158, xmin= -0.00164, parasitic=0.7078         1.000000      7.147972     -4.843552      4.402910     -6.810172     -6.294276            2
W= 89.75083, xmin= -0.00138, parasitic=0.7295         1.000000      7.281818     -6.302012     -5.499220      7.713734      7.144969            3
W= 89.70637, xmin= -0.00179, parasitic=0.6956         1.000000      5.669366     -4.084860     -4.445988      6.326142      6.429647            4
W= 89.74108, xmin= -0.00145, parasitic=0.7320         1.000000     -6.943684      3.030275     -4.845535      9.701816      7.428335            5
W= 89.71300, xmin= -0.00176, parasitic=0.7200         1.000000     -4.329238      5.730175      6.691008     -5.083019     -8.718852            6
W= 89.74998, xmin= -0.00134, parasitic=0.7373         1.000000     -5.493899      6.535201      7.225032     -8.391933     -7.634557            7
W= 89.72105, xmin= -0.00166, parasitic=0.7250         1.000000     -6.606269      8.847401     -4.787458      3.865795      5.918802            8
W= 89.70360, xmin= -0.00186, parasitic=0.7016         1.000000     -5.828525      6.328744      6.625133     -6.116368     -9.324740            9
W= 89.70019, xmin= -0.00171, parasitic=0.7020         1.000000     -2.899801      2.550235      6.601982     -9.871467     -7.061955            10
W= 89.77457, xmin= -0.00123, parasitic=0.7466         1.000000      9.380576     -5.098564      5.465408     -9.779463     -8.651397            11
W= 89.71456, xmin= -0.00172, parasitic=0.7018         1.000000      7.267734     -6.059593      4.815367     -6.221483     -6.753425            12
W= 89.72979, xmin= -0.00152, parasitic=0.7339         1.000000     -9.724850      3.321305     -2.928986      6.448823      4.544496            13
W= 89.73788, xmin= -0.00126, parasitic=0.7428         1.000000     -5.691011      7.230664     -2.726001      4.042016      1.481291            14
W= 89.73339, xmin= -0.00157, parasitic=0.7217         1.000000      7.884026     -8.786478     -5.021069      5.073325      6.621230            15
W= 89.76737, xmin= -0.00125, parasitic=0.7423         1.000000      6.167498     -5.282941      2.274352     -3.341372     -2.900454            16
W= 89.71597, xmin= -0.00178, parasitic=0.6976         1.000000      1.478147     -0.672833      4.995894     -8.158646     -9.015963            17
W= 89.71418, xmin= -0.00181, parasitic=0.6992         1.000000     -8.179874      2.592054      4.946106     -9.048167     -9.613549            18
W= 89.74502, xmin= -0.00139, parasitic=0.7499         1.000000     -5.142131      7.961104     -5.770687      4.643132      5.899515            19
W= 89.73222, xmin= -0.00155, parasitic=0.7190         1.000000      7.320413     -3.741168     -3.960796      7.161449      6.076927            20
W= 89.72708, xmin= -0.00157, parasitic=0.7298         1.000000      5.025061     -6.897571     -7.713340      6.601699      8.814953            21
W= 89.76083, xmin= -0.00121, parasitic=0.7479         1.000000      7.278887     -6.149731     -5.172102      8.858583      5.203890            22
W= 89.71201, xmin= -0.00175, parasitic=0.6985         1.000000     -9.549363      6.355211      5.531987     -8.161459     -8.346913            23
W= 89.70198, xmin= -0.00177, parasitic=0.6972         1.000000     -7.463809      5.325495      2.906285     -4.471238     -3.853365            24
W= 89.74603, xmin= -0.00129, parasitic=0.7432         1.000000     -6.293695      5.014876     -2.445970      4.481771      2.292100            25
W= 89.70520, xmin= -0.00145, parasitic=0.7370         1.000000     -3.900991      6.798960     -9.103732      9.830910      3.768878            26
W= 89.70724, xmin= -0.00170, parasitic=0.7161         1.000000      5.620052     -7.572185     -5.497718      5.080016      5.810091            27
W= 89.70072, xmin= -0.00169, parasitic=0.7047         1.000000     -9.218341      7.369757     -6.012441      9.770176      6.445294            28
W= 89.76968, xmin= -0.00129, parasitic=0.7379         1.000000     -9.958895      6.495552      4.953943     -7.660258     -7.920589            29
W= 89.72249, xmin= -0.00143, parasitic=0.7268         1.000000      4.756662     -5.504313      6.145669     -8.928870     -4.402545            30
W= 89.70722, xmin= -0.00144, parasitic=0.7381         1.000000     -3.321221      2.875147     -3.589631      7.244469      1.971108            31
W= 89.71331, xmin= -0.00180, parasitic=0.7323         1.000000     -1.778073      2.627731     -7.387278      4.307442      9.925928            32
W= 89.75530, xmin= -0.00139, parasitic=0.7298         1.000000     -2.599186      2.255055      5.764773     -7.500226     -8.206446            33
W= 89.73312, xmin= -0.00146, parasitic=0.7225         1.000000     -7.523940      7.031001      6.674883     -9.608448     -7.344268            34
W= 89.71894, xmin= -0.00162, parasitic=0.7248         1.000000      3.526626     -4.857279     -4.940031      4.345027      5.401786            35
W= 89.70496, xmin= -0.00194, parasitic=0.7083         1.000000     -6.147503      7.140553     -5.975592      4.322352      9.278829            36
W= 89.75080, xmin= -0.00134, parasitic=0.7339         1.000000     -9.228658      7.075027     -5.533824      9.012720      6.799435            37
</code></pre>
<p><strong>Order 4:</strong></p>
<pre class="line-numbers" data-line=15><code class="language-bash">echo 1  5 0  5 0 0 | stabregion2 -b Base4 -l- -i-4:4:2 -r500 -W80
W= 80.04684, xmin= -0.24413, parasitic=0.3323      1.000   1.000  -2.000   3.000  -2.000   0.000                1
W= 81.81252, xmin= -0.19378, parasitic=0.6228      1.000   1.000  -2.000   5.000  -4.000  -2.000                2
W= 81.87757, xmin= -0.19662, parasitic=0.6932      1.000   1.000   0.000   1.000  -2.000  -2.000                3
W= 80.97462, xmin= -0.23266, parasitic=0.4090      1.000   1.000   0.000   3.000  -4.000  -4.000                4
W= 83.14511, xmin= -0.15639, parasitic=0.7482      1.000   3.000  -4.000   3.000  -4.000  -2.000                5
W= 81.99847, xmin= -0.18558, parasitic=0.4194      1.000   3.000  -4.000   3.000  -4.000   0.000                6
W= 82.70187, xmin= -0.17225, parasitic=0.6961      1.000   3.000  -2.000   3.000  -4.000  -4.000                7
W= 81.52919, xmin= -0.20730, parasitic=0.4432      1.000   3.000  -2.000   3.000  -4.000  -2.000                8
W= 82.00772, xmin= -0.19780, parasitic=0.5314      1.000   3.000  -2.000   3.000  -2.000  -4.000                9
W= 80.63234, xmin= -0.24699, parasitic=0.3050      1.000   3.000  -2.000   3.000  -2.000  -2.000                10
W= 80.86939, xmin= -0.24514, parasitic=0.3967      1.000   3.000  -2.000   3.000   0.000  -4.000                11
W= 80.14505, xmin= -0.26250, parasitic=0.2417      1.000   3.000  -2.000   5.000  -4.000  -2.000                12
W= 81.87757, xmin= -0.19662, parasitic=0.6932      1.000   3.000   0.000   1.000  -2.000  -2.000                13
W= 81.04040, xmin= -0.24819, parasitic=0.3482      1.000   3.000   0.000   3.000  -2.000  -4.000                14
W= 81.90431, xmin= -0.19478, parasitic=0.4978      1.000   5.000  -4.000   3.000  -4.000  -2.000                15
W= 80.82624, xmin= -0.23705, parasitic=0.3353      1.000   5.000  -4.000   3.000  -2.000  -2.000                16
W= 81.37712, xmin= -0.21642, parasitic=0.4129      1.000   5.000  -4.000   5.000  -4.000  -4.000                17
W= 82.11563, xmin= -0.19145, parasitic=0.5729      1.000   5.000  -2.000   3.000  -4.000  -4.000                18
W= 80.66048, xmin= -0.23783, parasitic=0.3441      1.000   5.000  -2.000   3.000  -4.000  -2.000                19
W= 81.73483, xmin= -0.21116, parasitic=0.4539      1.000   5.000  -2.000   3.000  -2.000  -4.000                20
W= 80.11193, xmin= -0.27484, parasitic=0.2493      1.000   5.000  -2.000   3.000  -2.000  -2.000                21
W= 80.83151, xmin= -0.42500, parasitic=0.3546      1.000   5.000  -2.000   3.000   0.000  -4.000                22
W= 80.65907, xmin= -0.24934, parasitic=0.3071      1.000   5.000  -2.000   5.000  -4.000  -4.000                23
W= 80.06829, xmin= -0.28517, parasitic=0.2540      1.000   5.000  -2.000   5.000  -2.000  -4.000                24
W= 81.87757, xmin= -0.19662, parasitic=0.6932      1.000   5.000   0.000   1.000  -2.000  -2.000                25
W= 80.03662, xmin= -0.25657, parasitic=0.4627      1.000   5.000   2.000   1.000  -2.000  -2.000                26
</code></pre>
<p>Searching for order 4 on a wider grid.</p>
<pre class="line-numbers" data-line=3,17><code class="language-bash">$ echo 1 10 0 10 0 0 | stabregion2 -b Base4 -l- -i-10:10:1 -r500 -W80 &gt; stabregion2-base4-10101.txt
. . .
W= 84.91228, xmin= -0.07106, parasitic=0.2835      1.000   3.000  -7.000   2.000  -5.000   4.000                1783
W= 84.93410, xmin= -0.03582, parasitic=0.6720      1.000   2.000 -10.000   4.000  -6.000   9.000                585
W= 85.01008, xmin= -0.08115, parasitic=0.5897      1.000   1.000  -2.000   2.000  -5.000   3.000                70
W= 85.01008, xmin= -0.08115, parasitic=0.5897      1.000   1.000  -2.000   4.000 -10.000   6.000                84
W= 85.01008, xmin= -0.08115, parasitic=0.5897      1.000   2.000  -4.000   2.000  -5.000   3.000                788
W= 85.01008, xmin= -0.08115, parasitic=0.5897      1.000   3.000  -6.000   4.000 -10.000   6.000                1885
W= 85.01008, xmin= -0.08115, parasitic=0.5897      1.000   4.000  -8.000   2.000  -5.000   3.000                3461
W= 85.09335, xmin= -0.06884, parasitic=0.3658      1.000   3.000 -10.000   6.000 -10.000  10.000                1619
W= 85.09878, xmin= -0.07695, parasitic=0.6078      1.000   3.000 -10.000   6.000  -9.000   8.000                1620
. . .
W= 86.34152, xmin= -0.03875, parasitic=0.4773      1.000   2.000  -5.000   3.000  -9.000   8.000                698
W= 86.73807, xmin= -0.03074, parasitic=0.6250      1.000   2.000 -10.000   5.000  -7.000  10.000                586
W= 86.76246, xmin= -0.03807, parasitic=0.6497      1.000   3.000 -10.000   2.000  -4.000   4.000                1610
W= 86.76246, xmin= -0.03807, parasitic=0.6497      1.000   3.000 -10.000   3.000  -6.000   6.000                1613
W= 86.76647, xmin= -0.03296, parasitic=0.4816      1.000   1.000  -3.000   2.000  -5.000   5.000                25
W= 86.76647, xmin= -0.03296, parasitic=0.4816      1.000   1.000  -3.000   4.000 -10.000  10.000                29
W= 87.22705, xmin= -0.02278, parasitic=0.5960      1.000   1.000  -4.000   2.000  -4.000   5.000                4
W= 87.22705, xmin= -0.02278, parasitic=0.5960      1.000   2.000  -8.000   2.000  -4.000   5.000                600
W= 87.22705, xmin= -0.02278, parasitic=0.5960      1.000   2.000  -8.000   4.000  -8.000  10.000                602
</code></pre>
<p><strong>Order 5:</strong> Searching a order 5 method with cycle length 3:</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1 10 0 10 0 0 | stabregion2 -b Base5 -l- -i-10:10:3 -r300 -W70
W= 78.68142, xmin= -0.35173, parasitic=0.5851      1.000   3.000 -10.000   3.000  -7.000   8.000                1
W= 76.42265, xmin= -0.49321, parasitic=0.4927      1.000   3.000  -7.000   3.000 -10.000   8.000                2
W= 72.98742, xmin= -0.46278, parasitic=0.7403      1.000   3.000  -7.000   3.000 -10.000  11.000                3
W= 70.12967, xmin= -0.75292, parasitic=0.6413      1.000   6.000 -10.000   3.000 -10.000   5.000                4
W= 70.28984, xmin= -0.71158, parasitic=0.7206      1.000   6.000 -10.000   3.000  -7.000   2.000                5

$ echo 1 10 0 10 0 0 | stabregion2 -b Base5 -l- -i-10:10:2 -r300 -W70
W= 72.33897, xmin= -0.68035, parasitic=0.7201      1.000   2.000  -8.000   4.000  -6.000   6.000                1
W= 70.39636, xmin= -0.58691, parasitic=0.6383      1.000   2.000  -8.000   4.000  -6.000  10.000                2
W= 79.68307, xmin= -0.54250, parasitic=0.6281      1.000   2.000  -6.000   2.000  -6.000   6.000                3
W= 74.98124, xmin= -0.53677, parasitic=0.3954      1.000   2.000  -6.000   2.000  -4.000   4.000                4
W= 77.71542, xmin= -0.33596, parasitic=0.6514      1.000   2.000  -6.000   4.000 -10.000  12.000                5
W= 74.98124, xmin= -0.53677, parasitic=0.3954      1.000   2.000  -6.000   4.000  -8.000   8.000                6
W= 70.70604, xmin= -0.69569, parasitic=0.2687      1.000   2.000  -6.000   4.000  -6.000   6.000                7
W= 72.30615, xmin= -0.64015, parasitic=0.3087      1.000   2.000  -6.000   6.000 -10.000  10.000                8
W= 73.51722, xmin= -0.65303, parasitic=0.5149      1.000   2.000  -4.000   2.000  -8.000   6.000                9
W= 71.33672, xmin= -0.66564, parasitic=0.2951      1.000   2.000  -4.000   4.000 -10.000   8.000                10
W= 70.14594, xmin= -0.70882, parasitic=0.7294      1.000   2.000  -4.000   6.000 -10.000   2.000                11
W= 75.07268, xmin= -0.54117, parasitic=0.3784      1.000   4.000 -10.000   4.000 -10.000   8.000                12
W= 72.65486, xmin= -0.61600, parasitic=0.3577      1.000   4.000 -10.000   4.000  -8.000   8.000                13
W= 71.33672, xmin= -0.66564, parasitic=0.2951      1.000   4.000  -8.000   4.000 -10.000   8.000                14
W= 70.76203, xmin= -0.69721, parasitic=0.4510      1.000   4.000  -8.000   4.000  -8.000   4.000                15
W= 70.19851, xmin= -0.71794, parasitic=0.2348      1.000   4.000  -8.000   4.000  -8.000   6.000                16
</code></pre>
<p>In intervals of one:</p>
<pre class="line-numbers" data-line=3,14><code class="language-bash">$ echo 1 10 0 10 0 0 | stabregion2 -b Base5 -l- -i-10:10:1 -r120 -W70
. . .
W= 77.81402, xmin= -0.42360, parasitic=0.4887      1.000   3.000 -10.000   4.000  -9.000   9.000                184
W= 77.83497, xmin= -0.41206, parasitic=0.5767      1.000   2.000  -5.000   3.000 -10.000   9.000                135
W= 77.83497, xmin= -0.41206, parasitic=0.5767      1.000   4.000 -10.000   3.000 -10.000   9.000                296
W= 77.95536, xmin= -0.40394, parasitic=0.5161      1.000   1.000  -3.000   2.000  -5.000   5.000                19
W= 77.95536, xmin= -0.40394, parasitic=0.5161      1.000   3.000  -9.000   4.000 -10.000  10.000                203
W= 77.98148, xmin= -0.36473, parasitic=0.6923      1.000   2.000  -5.000   2.000  -7.000   7.000                130
W= 78.03001, xmin= -0.36923, parasitic=0.5794      1.000   2.000  -6.000   4.000 -10.000  11.000                116
W= 78.12242, xmin= -0.29649, parasitic=0.7324      1.000   2.000  -6.000   3.000  -8.000  10.000                108
W= 78.47928, xmin= -0.30160, parasitic=0.7461      1.000   1.000  -4.000   1.000  -2.000   3.000                4
W= 78.47928, xmin= -0.30160, parasitic=0.7461      1.000   1.000  -4.000   3.000  -6.000   9.000                7
W= 78.47928, xmin= -0.30160, parasitic=0.7461      1.000   2.000  -8.000   3.000  -6.000   9.000                71
W= 78.68359, xmin= -0.35172, parasitic=0.5851      1.000   3.000 -10.000   3.000  -7.000   8.000                179
W= 78.70712, xmin= -0.34502, parasitic=0.6422      1.000   2.000  -8.000   3.000  -6.000   8.000                70
W= 79.11288, xmin= -0.32809, parasitic=0.6703      1.000   3.000  -8.000   3.000 -10.000  10.000                225
W= 79.59837, xmin= -0.30917, parasitic=0.7056      1.000   3.000  -8.000   2.000  -7.000   7.000                221
W= 79.65979, xmin= -0.28701, parasitic=0.6690      1.000   3.000 -10.000   2.000  -5.000   6.000                176
W= 79.68307, xmin= -0.53978, parasitic=0.6281      1.000   1.000  -3.000   2.000  -6.000   6.000                18
W= 79.68307, xmin= -0.53978, parasitic=0.6281      1.000   1.000  -3.000   3.000  -9.000   9.000                24
W= 79.68307, xmin= -0.53978, parasitic=0.6281      1.000   2.000  -6.000   2.000  -6.000   6.000                103
W= 80.37267, xmin= -0.26824, parasitic=0.6803      1.000   2.000  -7.000   2.000  -5.000   6.000                84
W= 80.44412, xmin= -0.33195, parasitic=0.6620      1.000   3.000 -10.000   3.000  -8.000   9.000                178
</code></pre>
<p>Searching random for cycle length 3:</p>
<pre class="line-numbers" data-line=9><code class="language-bash">$ stabregion2 -bBase5 -I3:-20:20:99500 -r500 -W75
W= 77.94955, xmin= -0.33293, parasitic=0.7045         1.000000     -3.760775     15.031899      5.419764    -10.502505     15.452839            1
W= 75.95454, xmin= -0.42902, parasitic=0.6907         1.000000     -8.070655     19.002001      4.965984    -17.415622     17.529791            2
W= 79.18427, xmin= -0.33883, parasitic=0.6144         1.000000     -3.548929     13.668851      6.447070    -13.718679     16.890842            3
W= 75.31512, xmin= -0.53099, parasitic=0.3871         1.000000     -5.520428     14.051470     -5.100269     12.714603    -10.366682            4
W= 77.87613, xmin= -0.39038, parasitic=0.6025         1.000000     -7.235772     18.481448      5.738588    -18.413200     17.660706            5
W= 75.90191, xmin= -0.48294, parasitic=0.6256         1.000000     -6.314060     14.299655     -5.067656     18.516146    -16.911631            6
W= 78.54997, xmin= -0.32077, parasitic=0.7452         1.000000      1.801247     -4.684607     -5.274913     18.165317    -19.336120            7
W= 77.51294, xmin= -0.43919, parasitic=0.4782         1.000000     -1.582809      5.403277     -7.709742     16.677003    -16.787055            8
W= 77.97953, xmin= -0.41706, parasitic=0.5671         1.000000      2.471351    -10.277907     -5.605553     10.665238    -13.191398            9
W= 75.45818, xmin= -0.46437, parasitic=0.5298         1.000000     -6.404706     18.826354      6.310424    -13.455846     15.748183            10
</code></pre>
<p><strong>Order 6:</strong> Searching for cycle length 5 methods.</p>
<pre class="line-numbers"><code class="language-bash">. . .
W= 63.86917, xmin= -1.67741, parasitic=0.4163      1.000   7.000 -10.000   7.000 -10.000   4.000   7.000 -10.000   4.000   4.000   7.000 -10.000 -10.000  11.000  -3.000                2045
W= 63.89942, xmin= -1.92062, parasitic=0.3161      1.000   7.000 -10.000  14.000 -10.000  -3.000   7.000 -10.000  -3.000  11.000   7.000 -10.000  -3.000  11.000 -10.000                4689
W= 64.15015, xmin= -5.10995, parasitic=0.2626      1.000   7.000 -10.000   7.000 -10.000 -10.000  14.000 -10.000   4.000  11.000  14.000  -3.000 -10.000  11.000  -3.000                264
W= 64.18964, xmin= -5.04406, parasitic=0.3019      1.000  14.000  -3.000  14.000 -10.000  -3.000   7.000 -10.000  -3.000   4.000   7.000 -10.000  -3.000  11.000 -10.000                16767
W= 64.23779, xmin= -3.73262, parasitic=0.3314      1.000  14.000  -3.000   7.000 -10.000 -10.000   7.000 -10.000  -3.000  11.000   7.000 -10.000   4.000  11.000 -10.000                14849
W= 64.38508, xmin= -3.89165, parasitic=0.2881      1.000  14.000 -10.000   7.000 -10.000 -10.000   7.000 -10.000   4.000  11.000  14.000 -10.000 -10.000  11.000  -3.000                11010
W= 64.73986, xmin= -3.85047, parasitic=0.2923      1.000   7.000 -10.000   7.000 -10.000 -10.000  14.000 -10.000   4.000  11.000   7.000  -3.000  -3.000   4.000  -3.000                245
W= 65.03750, xmin= -3.62875, parasitic=0.2820      1.000   7.000 -10.000   7.000 -10.000 -10.000  14.000  -3.000 -10.000  11.000   7.000 -10.000  -3.000  11.000  -3.000                356
W= 65.06248, xmin= -2.36716, parasitic=0.2628      1.000  14.000  -3.000   7.000 -10.000 -10.000   7.000 -10.000   4.000  11.000   7.000 -10.000  -3.000   4.000  -3.000                14893
W= 65.08957, xmin= -1.95196, parasitic=0.3167      1.000   7.000 -10.000   7.000 -10.000 -10.000  14.000 -10.000  -3.000  11.000   7.000 -10.000  -3.000  11.000   4.000                182
W= 65.20361, xmin= -2.95019, parasitic=0.1769      1.000   7.000  -3.000   7.000 -10.000  -3.000   7.000 -10.000  -3.000  11.000   7.000 -10.000   4.000  11.000 -10.000                6813
W= 65.22085, xmin= -4.36243, parasitic=0.2452      1.000  14.000   4.000   7.000 -10.000 -10.000   7.000 -10.000   4.000  11.000   7.000 -10.000  -3.000   4.000 -10.000                17607
W= 65.37364, xmin= -3.74950, parasitic=0.2284      1.000   7.000   4.000   7.000 -10.000 -10.000   7.000 -10.000   4.000  11.000   7.000 -10.000  -3.000   4.000 -10.000                9500
W= 65.38512, xmin= -2.09260, parasitic=0.2990      1.000   7.000 -10.000   7.000 -10.000 -10.000   7.000 -10.000   4.000  11.000  14.000 -10.000  -3.000  11.000  -3.000                20
W= 65.39266, xmin= -3.44317, parasitic=0.2216      1.000   7.000  -3.000   7.000 -10.000  -3.000   7.000 -10.000   4.000   4.000   7.000  -3.000 -10.000  11.000  -3.000                6888
W= 66.12236, xmin= -4.30166, parasitic=0.3350      1.000   7.000 -10.000   7.000 -10.000  -3.000   7.000 -10.000   4.000   4.000   7.000  -3.000 -10.000  11.000  -3.000                665
W= 69.19280, xmin= -2.47883, parasitic=0.2498      1.000   7.000 -10.000   7.000 -10.000 -10.000   7.000 -10.000   4.000  11.000  14.000 -10.000  -3.000  11.000 -10.000                19
</code></pre>
<p><strong>Order 7:</strong> Searching with flag <code>-i</code> and already improving on Tendler's 7th order method:</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1 10 0 10 0 0 10 0 0 0 | stabregion2 -b Base7 -l- -i-10:10:7 -r400 -W30
W= 37.02937, xmin= -6.70664, parasitic=0.6365      1.000   7.000 -10.000   7.000 -10.000  -3.000   7.000 -10.000   4.000   4.000                1
W= 31.19765, xmin=-11.93934, parasitic=0.5073      1.000   7.000 -10.000   7.000 -10.000   4.000   7.000 -10.000 -10.000  11.000                2
W= 35.81634, xmin= -9.41862, parasitic=0.5793      1.000  14.000 -10.000   7.000 -10.000 -10.000   7.000 -10.000   4.000  11.000                3
W= 31.75908, xmin=-11.19023, parasitic=0.5000      1.000  14.000 -10.000   7.000 -10.000  -3.000   7.000 -10.000  -3.000  11.000                4
</code></pre>
<p>Finer grid in searching for order 7 and cycle length 4:</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1 10 0 10 0 0 10 0 0 0 | stabregion2 -b Base7 -l- -i-10:10:3 -r400 -W30
. . .
W= 48.97241, xmin= -3.91137, parasitic=0.6017      1.000   3.000 -10.000   6.000 -10.000   2.000   6.000  -7.000   5.000   2.000                122
W= 49.01681, xmin= -4.95756, parasitic=0.5478      1.000  12.000 -10.000   3.000 -10.000   2.000   6.000 -10.000   8.000  -4.000                3909
W= 49.02201, xmin= -4.12402, parasitic=0.5892      1.000   3.000  -4.000   6.000 -10.000   5.000   3.000 -10.000   2.000   2.000                1525
W= 49.23966, xmin= -6.41786, parasitic=0.6282      1.000   3.000  -7.000   3.000  -7.000   2.000  12.000 -10.000   8.000   2.000                430
W= 49.34231, xmin= -5.17057, parasitic=0.7009      1.000   3.000  -7.000   3.000  -7.000   2.000  12.000 -10.000   8.000  -7.000                428
W= 49.43582, xmin= -6.07999, parasitic=0.7144      1.000   3.000 -10.000   3.000  -7.000   5.000  12.000  -7.000   5.000  -4.000                16
W= 49.69150, xmin= -6.75076, parasitic=0.6604      1.000   3.000  -7.000   3.000  -7.000   2.000   9.000  -7.000   5.000   2.000                422
W= 49.69246, xmin= -5.58407, parasitic=0.6504      1.000   3.000 -10.000   6.000 -10.000  -1.000   6.000  -7.000   5.000   2.000                114
W= 49.82197, xmin= -5.58658, parasitic=0.6464      1.000   3.000  -7.000   3.000  -7.000   2.000   9.000  -7.000   5.000  -4.000                420
W= 49.89612, xmin= -4.04658, parasitic=0.7261      1.000   3.000 -10.000   3.000  -7.000   5.000   9.000  -7.000   8.000 -10.000                9
W= 49.90940, xmin= -5.72627, parasitic=0.5532      1.000   6.000 -10.000   3.000  -7.000   5.000   3.000  -7.000   2.000  -1.000                1958
W= 50.02874, xmin= -6.28973, parasitic=0.4765      1.000   3.000 -10.000   6.000 -10.000  -4.000   6.000 -10.000   8.000   8.000                109
W= 50.22562, xmin= -6.44879, parasitic=0.7026      1.000   3.000  -7.000   3.000  -7.000   2.000   6.000  -4.000   2.000  -1.000                411
W= 50.23991, xmin= -5.84158, parasitic=0.5545      1.000   9.000  -7.000   3.000 -10.000  -1.000   6.000 -10.000  11.000  -1.000                3453
W= 50.25552, xmin= -6.85592, parasitic=0.6824      1.000   9.000  -4.000   3.000 -10.000  -4.000   6.000 -10.000  11.000  -1.000                3660
W= 50.36004, xmin= -7.40042, parasitic=0.6057      1.000   9.000  -4.000   3.000 -10.000  -4.000   6.000 -10.000  11.000   2.000                3661
W= 50.37801, xmin= -5.59422, parasitic=0.6417      1.000   3.000  -7.000   3.000  -7.000   2.000   9.000 -10.000   8.000  -1.000                415
W= 50.50615, xmin= -5.87301, parasitic=0.6260      1.000   3.000  -7.000   3.000  -7.000   2.000  12.000 -10.000   8.000  -1.000                429
W= 51.38923, xmin= -6.05126, parasitic=0.6540      1.000   3.000  -7.000   3.000  -7.000   2.000   9.000  -7.000   5.000  -1.000                421
W= 51.89876, xmin= -3.69142, parasitic=0.5493      1.000   3.000 -10.000   3.000  -7.000   5.000   9.000 -10.000  11.000  -7.000                7
W= 52.02594, xmin= -7.74860, parasitic=0.6336      1.000   3.000  -7.000   3.000  -7.000  -1.000   6.000 -10.000  11.000   2.000                403
W= 53.38128, xmin= -6.73675, parasitic=0.6485      1.000   6.000 -10.000   3.000  -7.000   5.000   6.000 -10.000  -1.000  -1.000                1963
W= 55.13527, xmin= -3.87834, parasitic=0.5730      1.000   3.000 -10.000   3.000  -7.000   5.000   6.000  -7.000   8.000  -4.000                5
</code></pre>
<p>Random search:</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -bBase7 -I4:-120:120:48900 -r2960 -W50
W= 50.23919, xmin= -6.26976, parasitic=0.6525         1.000000    -88.759541     95.674195     31.729317    -96.859122     26.162025     81.615113   -119.764931     52.733653    -30.670380              1

$ stabregion2 -bBase7 -I4:-70:70:9995100 -W51 -r600
W= 51.42985, xmin= -6.84906, parasitic=0.6407         1.000000     34.194642    -57.338007    -17.001913     52.394410    -13.620043     45.979845    -48.756102     40.782862    -11.033654              1
</code></pre>
<h2>4. Various new formulas<a id=various_formulas></a></h2>
<p>Below output shows the various possibilities.</p>
<p><strong>Order 3:</strong> slightly better α, better δ</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1  11 -9  7 -10 -10 | stabregion2 -b Base3 -l- | perl -ne 'print if 1..4 or eof'
Parasitic roots of Linear combination
            0      1.00000000         0.00000000              1.00000000
            1      0.74921933        -0.00000000              0.74921933
            2      0.00436052        -0.00000000              0.00436052
           19        -0.00014033             -0.10488920,        -0.00117        89.79150
</code></pre>
<p><strong>Order 4:</strong> better α, better δ, slightly better root</p>
<pre class="line-numbers"><code class="language-bash">echo 1.000  -5.542  14.498 -18.122  42.367 -37.117 | stabregion2 -bBase4 -l- -r500 | perl -ne 'print if 1..5 or eof'
Parasitic roots of Linear combination
            0      1.00000000         0.00000000              1.00000000
            1      0.26408559         0.19557790              0.32862123
            2      0.26408559        -0.19557790              0.32862123
            3      0.16860831         0.00000000              0.16860831
          499         1.26751184             -0.01658136,        -0.06096        85.35055
</code></pre>
<p><strong>Order 5:</strong> slightly better α, better δ, slightly worse root magnitude</p>
<pre class="line-numbers"><code class="language-bash">echo 1  3 -10   4 -9 9 | stabregion2 -b Base5 -l- -r500 | perl -ne 'print if 1..6 or eof'
Parasitic roots of Linear combination
            0      1.00000000        -0.00000000              1.00000000
            1      0.45985170         0.16542372              0.48870093
            2      0.45985170        -0.16542372              0.48870093
            3     -0.08860554         0.10430695              0.13686081
            4     -0.08860554        -0.10430695              0.13686081
          499         0.83703643             -0.02068931,        -0.42370        77.81331
</code></pre>
<p><strong>Order 6:</strong> better α, slightly better δ, better root, but one higher cycle length!</p>
<pre class="line-numbers" data-line=19><code class="language-bash">$ echo 1   20 -9    20 -10 -12    10 -25 -15 18  | ~/c/stabregion2 -r400 -b Base6 -l- | perl -ne 'print if 1..6 or eof'
            0      1.00000000         0.00000000              1.00000000
            1     -0.13526122        -0.32183715              0.34910564
            2     -0.13526122         0.32183715              0.34910564
            3      0.05457185        -0.14009988              0.15035313
            4      0.05457185         0.14009988              0.15035313
            5      0.01265647         0.00000000              0.01265647
          399        -1.01316343              2.07749451,        -3.81061        59.92844

$ echo 1   19.9 -9.75   20.105 -10 -11.58    9.6105 -25.83 -14.6 19.9  | ~/c/stabregion2 -r300 -b Base6 -l- | perl -ne 'print if 1..6 or eof'
            0      1.00000000         0.00000000              1.00000000
            1     -0.19432134        -0.24905256              0.31589232
            2     -0.19432134         0.24905256              0.31589232
            3      0.05240366         0.18042794              0.18788397
            4      0.05240366        -0.18042794              0.18788397
            5      0.01021887        -0.00000000              0.01021887
          299        -1.05960992              2.13752343,        -3.63381        63.09781

$ echo 1  7 -10  7 -10 -10  7 -10 4 11  14 -10 -3 11 -10 | stabregion2 -b Base6 -l- -r700 | perl -ne 'print if 1..7 or eof'
Parasitic roots of Linear combination
            0      1.00000000        -0.00000000              1.00000000
            1      0.24980571        -0.00000000              0.24980571
            2     -0.14328484         0.00000000              0.14328484
            3      0.05318928         0.06825981              0.08653612
            4      0.05318928        -0.06825981              0.08653612
            5     -0.01171677         0.00000000              0.01171677
          699        -0.49908435              1.32693994,        -2.47902        69.19266
</code></pre>
<p><strong>Order 7:</strong> better α, better δ, better root</p>
<pre class="line-numbers" data-line=21><code class="language-bash">$ echo 1   2 1   25 -10 -40   2 -3 1 3   20 10 -40 -30 -10    | ~/c/stabregion2 -r500 -b Base7 -l- | perl -ne 'print if 1..7 or eof'
            0      1.00000000         0.00000000              1.00000000
            1     -0.08617372         0.55436985              0.56102748
            2     -0.08617372        -0.55436985              0.56102748
            3      0.38639102        -0.00000000              0.38639102
            4     -0.12271706        -0.00000000              0.12271706
            5     -0.01311481         0.00000000              0.01311481
            6      0.00233200         0.00000000              0.00233200
          499         0.07850982              0.95177010,       -11.72180         0.00000

$ echo 1   3 -1   1 0 -2   3 0 -3 4   3 0 -3 4 -4    | ~/c/stabregion2 -r500 -b Base7 -l- | perl -ne 'print if 1..7 or eof'
            0      1.00000000         0.00000000              1.00000000
            1      0.11913730         0.47735727              0.49199966
            2      0.11913730        -0.47735727              0.49199966
            3      0.28233408        -0.00000000              0.28233408
            4     -0.05854063        -0.00000000              0.05854063
            5     -0.03078690        -0.00000000              0.03078690
            6      0.00246362        -0.00000000              0.00246362
          499         0.08631458             -0.91461418,       -82.23638         0.45520

$ echo 1  3 -10  3 -7 5  6 -7 8 -4 | stabregion2 -b Base7 -l- -r600 |  perl -ne 'print if 1..8 or eof'
Parasitic roots of Linear combination
            0      1.00000000         0.00000000              1.00000000
            1     -0.57300425         0.00000000              0.57300425
            2      0.44845186        -0.00000000              0.44845186
            3     -0.36924474        -0.00000000              0.36924474
            4     -0.08390465        -0.07829099              0.11475831
            5     -0.08390465         0.07829099              0.11475831
            6      0.03519651         0.00000000              0.03519651
          599         0.00000000             -0.00261799,        -3.87902        55.13542

$ echo 1 -503 199 859 214 -593 -241 393 -52 -387 -409 624  22 -277 574 -393 834 -410 -379 861 -6 | stabregion2 -bBase7 -l- -r500 | perl -ne 'print if 1..8 or eof'
Parasitic roots of Linear combination
            0      1.00000000         0.00000000              1.00000000
            1      0.57974563        -0.00000000              0.57974563
            2      0.32478676        -0.09621522              0.33873856
            3      0.32478676         0.09621522              0.33873856
            4     -0.00833937         0.04158511              0.04241305
            5     -0.00833937        -0.04158511              0.04241305
            6      0.00050814        -0.00000000              0.00050814
          499        -0.00000000             -0.00209440,        -9.31106        34.84493

</code></pre>
<p><strong>Order 8:</strong></p>
<pre class="line-numbers"><code class="language-bash">$ echo 1 36 -43 102 -221 -72 567 -684 587 378 | stabregion2 -bBase8 -l- -r76200 | perl -ne 'print if 1..9 or eof'
Parasitic roots of Linear combination
            0      1.00000000        -0.00000000              1.00000000
            1      0.45444538         0.14823495              0.47801067
            2      0.45444538        -0.14823495              0.47801067
            3      0.02754920        -0.44960947              0.45045270
            4      0.02754920         0.44960947              0.45045270
            5     -0.11768977         0.00000000              0.11768977
            6     -0.05579669         0.00000000              0.05579669
            7      0.03286398        -0.00000000              0.03286398
        76199        -0.50977423              0.00009225,       -21.18735         0.00493
</code></pre>
<p>Cycle length 5:</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1 -13.5  31 -19.5  29 -12 -47.5  60  14.25 -76.74  73  17.6  23 8.9 -88.7 | stabregion2 -bBase8 -l- -r176200 | perl -ne 'print if 1..9 or eof'
Parasitic roots of Linear combination
            0      1.00000000        -0.00000000              1.00000000
            1     -0.55384672        -0.00000000              0.55384672
            2      0.20514106         0.50119562              0.54155324
            3      0.20514106        -0.50119562              0.54155324
            4      0.50676510         0.00000000              0.50676510
            5     -0.04784472        -0.00000000              0.04784472
            6     -0.00631625        -0.00863555              0.01069896
            7     -0.00631625         0.00863555              0.01069896
        176199       -0.00000000             -0.00000713,       -16.97737         6.71800

$ echo 1  10.413  -23.757  -15   22.5  -9.3 -36.6  46.1  10.97 -59   56.1  13.5 17.7  6.84 -68.316038 | stabregion2 -bBase8 -l- -r6900 | perl -ne 'print if 1..9 or eof'
Parasitic roots of Linear combination
            0      1.00000000         0.00000000              1.00000000
            1     -0.55764352        -0.00000000              0.55764352
            2      0.21168088         0.50209167              0.54488975
            3      0.21168088        -0.50209167              0.54488975
            4      0.50305785        -0.00000000              0.50305785
            5     -0.04747804        -0.00000000              0.04747804
            6     -0.00630592        -0.00861259              0.01067433
            7     -0.00630592         0.00861259              0.01067433
         6899         0.00000000             -0.00018212,       -17.07914         6.84418
</code></pre>
<p><strong>Order 9:</strong> cycle length=4</p>
<pre class="line-numbers"><code class="language-bash">$ echo 1 3.65 -11  38 -70  68 -46 -23  50 -13.5 | stabregion2 -bBase9 -l- -r500 | perl -ne 'print if 1..10 or eof'
Parasitic roots of Linear combination
            0      1.00000000         0.00000000              1.00000000
            1      0.69341362         0.23294720              0.73149630
            2      0.69341362        -0.23294720              0.73149630
            3      0.11882161        -0.29545535              0.31845319
            4      0.11882161         0.29545535              0.31845319
            5     -0.14232428         0.08346739              0.16499396
            6     -0.14232428        -0.08346739              0.16499396
            7      0.02232496        -0.05087849              0.05556100
            8      0.02232496         0.05087849              0.05556100
          499        -0.00000000             -0.00314159,       -36.25919         0.00000

$ echo 1.000000     27.094825   -139.893728     67.030957   -128.854947    224.182932    191.776479    -95.370077     26.617924    -67.920828 | stabregion2 -bBase9 -l- -r59900 | perl -ne 'print if 1..10 or eof'
Parasitic roots of LinearCombination
            0      1.00000000         0.00000000              1.00000000
            1     -0.43729107         0.59023631              0.73457633
            2     -0.43729107        -0.59023631              0.73457633
            3      0.34487625        -0.50834727              0.61429356
            4      0.34487625         0.50834727              0.61429356
            5     -0.16234653         0.00000000              0.16234653
            6     -0.10492970         0.00000000              0.10492970
            7      0.02817343         0.03911910              0.04820836
            8      0.02817343        -0.03911910              0.04820836
        59899         0.00000000             -0.00002622,       -13.57947         0.00281
</code></pre>
<h2>5. stabregion2.c<a id=stabregion2></a></h2>
<p>The C program <a href="https://github.com/eklausme/c/blob/master/stabregion2.c"><code>stabregion2.c</code></a> allows to incrementally or randomly search for new Tendler-like formulas.
It offers a number of options:</p>
<pre class="line-numbers"><code class="language-bash">$ stabregion2 -h
stabregion2: compute stability regions for various formulas.
-b: base formula, Base3-9
-f: formulas: BDF1-6, DonelsonHansen1-6, Mihelcic4-7, Tischer2-8, Tendler3-7, eTendler3-9, Picel1-10, Rubin1-6
-d: debug
-h: this help
-I &lt;cycle-length&gt;:&lt;min&gt;:&lt;max&gt;:&lt;max iterations&gt; random search in linear combinations
-i &lt;start&gt;:&lt;stop&gt;:&lt;step&gt; incremental search through linear combinations
-l: file name with linear combinations for the base formula
-o: output format in either 'p' (plain) or 'j' (Javascript) or '3' (3-dimensional)
-r: number of records
-T &lt;radius&gt;:&lt;phi&gt;:t0:t1:h single precision testing formula for y'=lambda y,
        from t0 to t1 using stepsize h (lambda = r e^(i phi)
-t &lt;radius&gt;:&lt;phi&gt;:t0:t1:h testing formula for y'=lambda y,
        from t0 to t1 using stepsize h (lambda = r e^(i phi)
-W: minimal Widlund wedge
</code></pre>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-13-loops-over-loops</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-13-loops-over-loops</guid>
		<title>Loops Over Loops</title>
		<category>C / C++</category>
		<pubDate>Sat, 13 Dec 2025 12:00:00 +0100</pubDate>
		<description><![CDATA[
<p>Problem statement: Loop over a variable number of loops.
I.e., we want to search a parameter space and therefore want to loop over <em>multiple</em> loops.
The <em>number</em> of loops is variable.</p>
<p>The initial approach goes like this:</p>
<pre class="line-numbers"><code class="language-C">for (p1=1; p1&lt;=10; ++p1)
    for (p2=1; p2&lt;=10; ++p2)
        for (p3=1; p3&lt;=10; ++p3)
            for (p4=1; p4&lt;=10; ++p4)
                do_something();
</code></pre>
<p>It also might involve only two loops, i.e., <code>p1</code> and <code>p2</code>, or even more loops, i.e., <code>p1</code>, <code>p2</code>, ..., <code>p9</code>.</p>
<p>Solution: <code>ml[]</code> corresponds to various <code>p</code><em>i</em>.
I.e., <code>ml[0]</code> is <code>p1</code>, <code>ml[1]</code> is <code>p2</code>, etc.
Below program starts from <code>start</code> up to <code>stop</code> in increments of <code>step</code>.</p>
<pre class="line-numbers"><code class="language-C">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;

#define MAXLOOP	50

int main (int argc, char *argv[]) {
    int c, i, k, n=4, cnt=0, start=1, stop=3, step=1;
    int ml[MAXLOOP];

    while ((c = getopt(argc,argv,&quot;i:n:&quot;)) != -1) {
        switch(c) {
        case 'i':	// step numbers of base formulas
            sscanf(optarg,&quot;%d:%d:%d&quot;,&amp;start,&amp;stop,&amp;step);
            break;
        case 'n':
            if ((n = atoi(optarg)) &gt;= MAXLOOP) return 1;
            break;
        default:
            printf(&quot;%s: illegal option %c\n&quot;,argv[0],c);
            return 4;
        }
    }
    printf(&quot;start=%d, stop=%d, step=%d\n&quot;, start, stop, step);

    for (i=0; i&lt;n; ++i) ml[i] = start;

    for (;;) {
        printf(&quot;\t&quot;);
        for (k=0; k&lt;n; ++k) printf(&quot;%6d&quot;,ml[k]);
        printf(&quot;\t\t%d\n&quot;,++cnt);
        for (i=n-1; i&gt;=0; --i) {
            if (ml[i] &lt; stop) {
                ml[i] += step;
                break;
            } else {
                ml[i] = start;
                if (i == 0) return 0;
            }
        }
    }

    return 0;
}
</code></pre>
<p>Program running for two loops:</p>
<pre class="line-numbers"><code class="language-bash">$ tstmultiloop -n2
start=1, stop=3, step=1
             1     1            1
             1     2            2
             1     3            3
             2     1            4
             2     2            5
             2     3            6
             3     1            7
             3     2            8
             3     3            9
</code></pre>
<p>Last &quot;digits&quot; varies the fastest.
The way the digits vary on an odometer.</p>
<p>Three &quot;digits&quot;.</p>
<pre class="line-numbers"><code class="language-bash">$ tstmultiloop -n3 -i-3:3:2
start=-3, stop=3, step=2
            -3    -3    -3              1
            -3    -3    -1              2
            -3    -3     1              3
            -3    -3     3              4
            -3    -1    -3              5
            -3    -1    -1              6
            -3    -1     1              7
            -3    -1     3              8
            -3     1    -3              9
            -3     1    -1              10
            -3     1     1              11
            -3     1     3              12
            -3     3    -3              13
            -3     3    -1              14
            -3     3     1              15
            -3     3     3              16
            -1    -3    -3              17
            -1    -3    -1              18
            -1    -3     1              19
            -1    -3     3              20
            -1    -1    -3              21
            -1    -1    -1              22
            -1    -1     1              23
            -1    -1     3              24
            -1     1    -3              25
            -1     1    -1              26
            -1     1     1              27
            -1     1     3              28
            -1     3    -3              29
            -1     3    -1              30
            -1     3     1              31
            -1     3     3              32
             1    -3    -3              33
             1    -3    -1              34
             1    -3     1              35
             1    -3     3              36
             1    -1    -3              37
             1    -1    -1              38
             1    -1     1              39
             1    -1     3              40
             1     1    -3              41
             1     1    -1              42
             1     1     1              43
             1     1     3              44
             1     3    -3              45
             1     3    -1              46
             1     3     1              47
             1     3     3              48
             3    -3    -3              49
             3    -3    -1              50
             3    -3     1              51
             3    -3     3              52
             3    -1    -3              53
             3    -1    -1              54
             3    -1     1              55
             3    -1     3              56
             3     1    -3              57
             3     1    -1              58
             3     1     1              59
             3     1     3              60
             3     3    -3              61
             3     3    -1              62
             3     3     1              63
             3     3     3              64
</code></pre>
<p>It shows 64 entries, i.e., 4 × 4 × 4.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-06-parasitic-roots-of-various-cyclic-linear-multistep-methods</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-06-parasitic-roots-of-various-cyclic-linear-multistep-methods</guid>
		<title>Parasitic roots of various cyclic linear multistep methods</title>
		<category>mathematics</category>
		<pubDate>Sat, 06 Dec 2025 13:25:00 +0100</pubDate>
		<description><![CDATA[
<h2>1. Tischer's formulas</h2>
<p><em>All</em> cyclic linear multistep methods were <em>designed</em> to only have root at 1, and all other parasitic roots to be zero.</p>
<p>See Tischer, Peter E. and Sacks-Davis, Ron: “<a href="https://doi.org/10.1137/0904051">A New Class of Cyclic Multistep Formulae for Stiff Systems</a>”.</p>
<h2>2. Donelson &amp; Hansen formulas</h2>
<p>See Donelson III, John and Hansen, Eldon: “<a href="https://doi.org/10.1137/0708018">Cyclic Composite Multistep Predictor-Corrector Methods</a>”, SIAM Journal on Numerical Analysis, Vol 8, 1971, pp.137—157.</p>
<p><strong>DH1</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
</tr>
</tbody>
</table>
<p><strong>DH2</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">-0.31605416</td>
<td align="right">0.94874115</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">-0.31605416</td>
<td align="right">-0.94874115</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>2</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
</tbody>
</table>
<p><strong>DH3</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.04526646</td>
<td align="right">0.00000000</td>
<td align="right">0.04526646</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
</tr>
</tbody>
</table>
<p><strong>DH4</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">-0.09090909</td>
<td align="right">0.00000000</td>
<td align="right">0.09090909</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.00000000</td>
<td align="right">-0.00000000</td>
<td align="right">0.00000000</td>
</tr>
</tbody>
</table>
<p><strong>DH5</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">-0.01125522</td>
<td align="right">0.93329189</td>
<td align="right">0.93335976</td>
</tr>
<tr>
<td>2</td>
<td align="right">-0.01125522</td>
<td align="right">-0.93329189</td>
<td align="right">0.93335976</td>
</tr>
<tr>
<td>3</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
</tr>
</tbody>
</table>
<p><strong>DH6</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">-0.37892727</td>
<td align="right">-0.00000000</td>
<td align="right">0.37892727</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.13825231</td>
<td align="right">0.00000000</td>
<td align="right">0.13825231</td>
</tr>
<tr>
<td>3</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
</tr>
</tbody>
</table>
<div id="container_DH1" class="chartarea"></div>
<div id="container_DH2" class="chartarea"></div>
<div id="container_DH3" class="chartarea"></div>
<div id="container_DH4" class="chartarea"></div>
<div id="container_DH5" class="chartarea"></div>
<div id="container_DH6" class="chartarea"></div>
<h2>3. Mihelcic's formulas</h2>
<p>See Matija Mihelčić (Mihelcic) and K. Wingerath: “<a href="http://dx.doi.org/10.1002/zamm.19810610609">A(α)-stable Cyclic Composite Multistep Methods of Orders 6 and 7 for Numerical Integration of Stiff Ordinary Differential Equations</a>”, ZAMM, Band 61, 1981, pp.261—264</p>
<p><strong>Mihelcic4</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.50107560</td>
<td align="right">0.00000000</td>
<td align="right">0.50107560</td>
</tr>
<tr>
<td>2</td>
<td align="right">-0.42506560</td>
<td align="right">0.00000000</td>
<td align="right">0.42506560</td>
</tr>
</tbody>
</table>
<p><strong>Mihelcic5</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">-0.38334289</td>
<td align="right">0.00000000</td>
<td align="right">0.38334289</td>
</tr>
<tr>
<td>2</td>
<td align="right">-0.21218358</td>
<td align="right">0.00000000</td>
<td align="right">0.21218358</td>
</tr>
</tbody>
</table>
<p><strong>Mihelcic6</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">-0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">-0.90745413</td>
<td align="right">-0.00000000</td>
<td align="right">0.90745413</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.41922349</td>
<td align="right">0.00000000</td>
<td align="right">0.41922349</td>
</tr>
<tr>
<td>3</td>
<td align="right">0.06530404</td>
<td align="right">-0.00000000</td>
<td align="right">0.06530404</td>
</tr>
</tbody>
</table>
<p><strong>Mihelcic7</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.16549909</td>
<td align="right">-0.00000000</td>
<td align="right">0.16549909</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.09946611</td>
<td align="right">0.00000000</td>
<td align="right">0.09946611</td>
</tr>
<tr>
<td>3</td>
<td align="right">0.02567147</td>
<td align="right">-0.00000000</td>
<td align="right">0.02567147</td>
</tr>
<tr>
<td>4</td>
<td align="right">-0.00642008</td>
<td align="right">0.00000000</td>
<td align="right">0.00642008</td>
</tr>
</tbody>
</table>
<div id="container_Mihelcic4" class="chartarea"></div>
<div id="container_Mihelcic5" class="chartarea"></div>
<div id="container_Mihelcic6" class="chartarea"></div>
<div id="container_Mihelcic7" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/12-05-parasitic-roots-of-bdf-and-tendlers-formulas</link>
		<guid>https://eklausmeier.goip.de/blog/2025/12-05-parasitic-roots-of-bdf-and-tendlers-formulas</guid>
		<title>Parasitic roots of BDF and Tendler's formulas</title>
		<category>mathematics</category>
		<pubDate>Fri, 05 Dec 2025 22:00:00 +0100</pubDate>
		<description><![CDATA[
<p>The parasitic roots $\lambda_i$ of a multistep method are the roots, which are not 1.
In below table the root 1 is indexed with 0.
The roots are for the matrix polynomial</p>
<div class=math>
$$
    \rho(\lambda) = A_m \lambda^m + A_{m-1} \lambda^{m-1} + \cdots + A_1 \lambda + A_0
$$
</div>
<p>for the multistep method</p>
<div class=math>
$$
    \sum\limits_{i=0}^{m} A_i Y_{k+i} = h \sum\limits_{i=0}^{m} B_i Y'_{k+i}.
$$
</div>
<p>Tendler's formulas can be found in <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Stiffly Stable Integration Process Using Composite Methods</a>.</p>
<h2>1. The BDF</h2>
<p><strong>BDF1</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
</tbody>
</table>
<p><strong>BDF2</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.33333333</td>
<td align="right">0.00000000</td>
<td align="right">0.33333333</td>
</tr>
</tbody>
</table>
<p><strong>BDF3</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.31818182</td>
<td align="right">0.28386355</td>
<td align="right">0.42640143</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.31818182</td>
<td align="right">-0.28386355</td>
<td align="right">0.42640143</td>
</tr>
</tbody>
</table>
<p><strong>BDF4</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.26926080</td>
<td align="right">0.49200027</td>
<td align="right">0.56086152</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.26926080</td>
<td align="right">-0.49200027</td>
<td align="right">0.56086152</td>
</tr>
<tr>
<td>3</td>
<td align="right">0.38147841</td>
<td align="right">-0.00000000</td>
<td align="right">0.38147841</td>
</tr>
</tbody>
</table>
<p><strong>BDF5</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">-0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.21004369</td>
<td align="right">0.67686976</td>
<td align="right">0.70871082</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.21004369</td>
<td align="right">-0.67686976</td>
<td align="right">0.70871082</td>
</tr>
<tr>
<td>3</td>
<td align="right">0.38484682</td>
<td align="right">0.16212131</td>
<td align="right">0.41760076</td>
</tr>
<tr>
<td>4</td>
<td align="right">0.38484682</td>
<td align="right">-0.16212131</td>
<td align="right">0.41760076</td>
</tr>
</tbody>
</table>
<p><strong>BDF6</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.14527451</td>
<td align="right">-0.85107039</td>
<td align="right">0.86338027</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.14527451</td>
<td align="right">0.85107039</td>
<td align="right">0.86338027</td>
</tr>
<tr>
<td>3</td>
<td align="right">0.37615366</td>
<td align="right">-0.28847439</td>
<td align="right">0.47403486</td>
</tr>
<tr>
<td>4</td>
<td align="right">0.37615366</td>
<td align="right">0.28847439</td>
<td align="right">0.47403486</td>
</tr>
<tr>
<td>5</td>
<td align="right">0.40612327</td>
<td align="right">0.00000000</td>
<td align="right">0.40612327</td>
</tr>
</tbody>
</table>
<!-- <div id="container_BDF1" class="chartarea"></div>-->
<div id="container_BDF2" class="chartarea"></div>
<div id="container_BDF3" class="chartarea"></div>
<div id="container_BDF4" class="chartarea"></div>
<div id="container_BDF5" class="chartarea"></div>
<div id="container_BDF6" class="chartarea"></div>
<h2>2. Tendler's cyclic formulas</h2>
<p><strong>Tendler3</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">-0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.55371901</td>
<td align="right">0.00000000</td>
<td align="right">0.55371901</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
<td align="right">0.00000000</td>
</tr>
</tbody>
</table>
<p><strong>Tendler4</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.35406989</td>
<td align="right">0.00000000</td>
<td align="right">0.35406989</td>
</tr>
<tr>
<td>2</td>
<td align="right">-0.18613598</td>
<td align="right">0.00000000</td>
<td align="right">0.18613598</td>
</tr>
<tr>
<td>3</td>
<td align="right">-0.02584359</td>
<td align="right">0.00000000</td>
<td align="right">0.02584359</td>
</tr>
</tbody>
</table>
<p><strong>Tendler5</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">-0.42931855</td>
<td align="right">0.00000000</td>
<td align="right">0.42931855</td>
</tr>
<tr>
<td>2</td>
<td align="right">0.31485709</td>
<td align="right">-0.00000000</td>
<td align="right">0.31485709</td>
</tr>
<tr>
<td>3</td>
<td align="right">-0.09291397</td>
<td align="right">-0.00000000</td>
<td align="right">0.09291397</td>
</tr>
<tr>
<td>4</td>
<td align="right">0.00602978</td>
<td align="right">-0.00000000</td>
<td align="right">0.00602978</td>
</tr>
</tbody>
</table>
<p><strong>Tendler6</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">0.52827598</td>
<td align="right">-0.00000000</td>
<td align="right">0.52827598</td>
</tr>
<tr>
<td>2</td>
<td align="right">-0.33496615</td>
<td align="right">-0.38537896</td>
<td align="right">0.51060676</td>
</tr>
<tr>
<td>3</td>
<td align="right">-0.33496615</td>
<td align="right">0.38537896</td>
<td align="right">0.51060676</td>
</tr>
<tr>
<td>4</td>
<td align="right">-0.00423359</td>
<td align="right">0.01617638</td>
<td align="right">0.01672120</td>
</tr>
<tr>
<td>5</td>
<td align="right">-0.00423359</td>
<td align="right">-0.01617638</td>
<td align="right">0.01672120</td>
</tr>
</tbody>
</table>
<p><strong>Tendler7</strong></p>
<table>
<thead>
<tr>
<th>root</th>
<th align="right">real</th>
<th align="right">imaginary</th>
<th align="right">absolute value</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td align="right">1.00000000</td>
<td align="right">-0.00000000</td>
<td align="right">1.00000000</td>
</tr>
<tr>
<td>1</td>
<td align="right">-0.23749387</td>
<td align="right">-0.62295902</td>
<td align="right">0.66669430</td>
</tr>
<tr>
<td>2</td>
<td align="right">-0.23749387</td>
<td align="right">0.62295902</td>
<td align="right">0.66669430</td>
</tr>
<tr>
<td>3</td>
<td align="right">0.57052707</td>
<td align="right">0.00000000</td>
<td align="right">0.57052707</td>
</tr>
<tr>
<td>4</td>
<td align="right">-0.04931498</td>
<td align="right">0.01790043</td>
<td align="right">0.05246325</td>
</tr>
<tr>
<td>5</td>
<td align="right">-0.04931498</td>
<td align="right">-0.01790043</td>
<td align="right">0.05246325</td>
</tr>
<tr>
<td>6</td>
<td align="right">0.02535626</td>
<td align="right">0.00000000</td>
<td align="right">0.02535626</td>
</tr>
</tbody>
</table>
<div id="container_Tendler3" class="chartarea"></div>
<div id="container_Tendler4" class="chartarea"></div>
<div id="container_Tendler5" class="chartarea"></div>
<div id="container_Tendler6" class="chartarea"></div>
<div id="container_Tendler7" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/11-30-tendler-4-die-korrekturiteration</link>
		<guid>https://eklausmeier.goip.de/blog/2025/11-30-tendler-4-die-korrekturiteration</guid>
		<title>TENDLER: 4. Die Korrektoriteration</title>
		<category>mathematics</category>
		<category>C / C++</category>
		<pubDate>Sun, 30 Nov 2025 20:00:00 +0100</pubDate>
		<description><![CDATA[
<p>Fortsetzung der TENDLER Programmbeschreibung.</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-16-tendler-1-grobaufbau-und-prinzipielle-ueberlegungen">TENDLER: 1. Grobaufbau und prinzipielle Überlegungen</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms">TENDLER: 2. Benutzung des Programmes</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-18-tendler-3-der-praediktor">TENDLER: 3. Der Prädiktor</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-30-tendler-4-die-korrekturiteration">TENDLER: 4. Die Korrektoriteration</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2026/03-10-tendler-5-die-fehlerkontrolle">TENDLER: 5. Die Fehlerkontrolle</a></li>
</ol>
<hr>
<ul>
<li><a href="#Picard_und_Newton">1. Zusammenhang zwischen Picard und Newton Iteration</a></li>
<li><a href="#NewtonIteration">2. Newton Iteration im Programm TENDLER</a></li>
<li><a href="#PicardIteration">3. Die Picard Iteration im Programm TENDLER</a></li>
<li><a href="#Konvergenztest">4. Der Konvergenztest im Programm TENDLER</a></li>
<li><a href="#LangsameKonvergzenz">5. Verhinderung langsamer Konvergenz in TENDLER</a></li>
<li><a href="#HindmarshTest">6. Der Hindmarsh-Test im Programm TENDLER</a></li>
<li><a href="#Konvergenztest_in_STINT">7. Der Konvergenztest im Programm STINT</a></li>
<li><a href="#Konvergenztest_in_DIFSUB">8. Der Konvergenztest im Programm DIFSUB</a></li>
<li><a href="#Konvergenztest_in_GEAR">9. Der Konvergenztest in DSTIFF, GEAR und EPISODE</a></li>
<li><a href="#Konvergenztest_in_LSODE">10. Der Konvergenztest im Programm LSODE</a></li>
<li><a href="#Konvergenztest_in_DDASSL">11. Die Korrektoriteration im Programm DDASSL</a></li>
</ul>
<p>In diesem Abschnitt wird eines der mitaus wichtigsten Kernstücke eines jeden
Lösers vorgestellt: die Korrektoriteration.
Die Effizienz dieses Segments wirkt maßgeblich zurück auf die anderen
Segmente des Programmes.
Nun gilt dies natürlich auch für andere Segmente, jedoch ist hier bei der
Korrektoriteration die Hebelwirkung besonders ausgeprägt.
Auch für das Schalten spielt sie im Programm TENDLER eine zentrale Rolle.</p>
<p>Bei den <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">zyklischen Formeln</a> von
<a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>,
sind sämtliche Stufen aller Zyklen echt implizite lineare <em>k</em>-Schrittverfahren,
für $k=1,\ldots,7$, analog wie die BDF$i$, für $i=1,\ldots,6$.
Zur “Beseitigung” der Implizitheit ist ein irgendwie geartetes Iterationsverfahren
nötig, da eine geschlossene Auflösung in symbolischer Form bei allgemeinem $f$,
in voller Allgemeinheit nicht möglich ist und häufig auch gar nicht
zweckmässig wäre.
Bei speziellen Differentialgleichungen, z.B. bei linearen Differentialgleichungen
gelingt eine Auflösung.
Gerade im Sonderfall linearer Differentialgleichungen, welche eine für
die Anwendungen besonders wichtige Rolle spielen, wäre es möglich, aus dem
a priori Wissen über die Differentialgleichung, Effizienzsteigerungen für
einen Differentialgleichungslöser zu erhalten.
Das Programm TENDLER in seiner jetztigen Form nutzt wie viele andere
Löser, diese möglichen Vorteile nicht voll aus.</p>
<p>In jedem Zeitschritt wird ein Programm basierend auf impliziten linearen
Mehrschrittverfahren (und auch viele weitere Verfahren) mit einer
i.a. nichtlinearen Gleichung der Form $y_{m+1}=h\gamma f(y_{m+1})+\psi$,
und $y_{m+1}=?$ konfrontiert, $h$, $\gamma$, $\psi$ fest.
Werden 1000 Schritte durchgeführt, so ist also auch 1000-mal eine solche
Gleichung aufzulösen.
Die Anzahl kann sich noch weiter erhöhen, falls Schritte aufgrund von
Fehlerversagen zurückgewiesen werden.
Man könnte jetzt daran denken einen allgemeinen Gleichungslöser
aufzurufen, wie ihn zahlreiche Programmsammlungen, wie etwa NAG, CERN,
Harwell, TOMS, $\ldots$, bereitstellen.
Bekannte Differentialgleichungslöser,
wie <a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a>, <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a>,
$\ldots$, tun dies nicht.
Es erweist sich als erheblich effizienter, die Gleichungsauflösung selbst in
die Hand zu nehmen.</p>
<p>Bei steifen Differentialgleichungen geschieht die Gleichungsauflösung
in vielen bekannten Programmen mit Hilfe eines Newton-Verfahrens, welches
man zur Effizienzsteigerung des Differentialgleichungslösers
(nicht notwendig zur Steigerung der Effizienz des Gleichungslösers)
geeignet modifiziert.
Bei nicht-steifen Differentialgleichungen geschieht die Gleichungsauflösung
in fast aller Regel mit Hilfe von Picard Iteration (Fixpunktiteration),
manchmal wird jedoch auch hier eine Variante eines Newton-Jacobi Iterationsverfahrens
benutzt.
Die Anzahl der Iterationen bei diesen Iterationsverfahren liegt fast
immer deutlich unter 10, allerdings gibt es hier wenige Ausnahmen.
Vorgeschlagen werden jedoch auch Mehrgitterverfahren,
siehe <a href="https://dl.acm.org/doi/pdf/10.1145/2701.356103">Sommeijer/Houwen (1984)</a>.</p>
<p>Die bei der Newton Iteration anfallenden linearen Gleichungssysteme stellen
erneut eine Arbeitsbelastung dar, für einen Löser konzipiert für steife
Differentialgleichungen.
Für die Lösung dieser linearen Gleichungssysteme werden eine Reihe von
Lösungsverfahren angewendet:
volle $LU$-Zerlegung (sehr häufig), Band-$LU$-Zerlegung (häufig),
Gauß-Seidel Iteration (gelegentlich), $LU$-Zerlegung für dünn besetzte
Matrizen und sogar Krylow-Unterraumiteration,
siehe <a href="https://doi.org/10.1137/0904040">Gear/Saad (1983)</a>.
Die augenblickliche Version des Programmes TENDLER verwendet an dieser
Stelle lediglich eine volle $LU$-Zerlegung.
Diese Beschränkung ist nicht durch Formeln oder Programmiermethodik
erzwungen, und es gibt kein Hindernis hier einen Eingriff vorzunehmen.
Im Gegenteil, dieser Eingriff ist an geeigneten Stellen schon mitbedacht
und vorbereitet, siehe <code>wprepare()</code>.
Durch die Beschränkung auf eine volle $LU$-Zerlegung wird die Anwendbarkeit
auf steife Differentialgleichungen großer Dimension, wie sie beispielsweise
bei Semidiskretisierungen partieller Differentialgleichungen auftauchen,
erheblich eingeschränkt, eigentlich sogar fast gänzlich verunmöglicht.
Dies stellt eine echte Beschränkung dar.
Will man dennoch solche großdimensionalen Gleichungen lösen, so muß man
beispielsweise auf das Programm LSODE oder einer seiner Varianten,
zurückgreifen, siehe Hindmarsh (1983).
Das Programm LSODE ist auch in der Unterprogrammsammlung NAG in leicht
veränderter Form enthalten, siehe <a href="https://dl.acm.org/doi/pdf/10.1145/47917.47921">Gladwell/Berzins/Brankin (1988)</a>.</p>
<p>Zuerst wird schnell der Zusammenhang zwischen Picard und Newton Iteration
hergestellt.
Beide Iterationsarten sind bei Anwendung auf die Keplersche Gleichung
sehr ähnlich.
Anschliessend werden beide Iterationen einzeln vorgestellt.
Neben dem eigentlichen Konvergenztest gibt es weitere Segmente, welche
letztlich die einzige Aufgabe haben, den Konvergenztest zu ergänzen.</p>
<p>Zum Abschluß wird verglichen, wie andere bekannte Löser für steife
Differentialgleichungen, basierend auf Mehrschrittverfahren, hier die
Programme <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a>, <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a>, GEAR, EPISODE, LSODE und DSTIFF, den Konvergenztest
gestalten.
Der Konvergenztest hat auch bei diesen Programmen entscheidenden Einfluß auf
die Effizienz des gesamten Restprogrammes.</p>
<p>Bibliographisch:</p>
<ol>
<li>Sommeijer, B.P. und van der Houwen, P.J.:
“<a href="https://dl.acm.org/doi/pdf/10.1145/2701.356103">Algorithm 621. Software with Low Storage Requirements for Two-Dimensional, Nonlinear, Parabolic Differential Equations</a>”,
ACM TOMS, Vol 10, No 4, December 1984, pp.378–396</li>
<li>Hindmarsh, Alan C.: “ODEPACK, A Systematized Collection of ODE Solvers”,
in Robert S. Stepleman, M. Carver, R. Peskin, William F. Ames and
Robert Vichnevetsky (Editors): “Scientific Computing—Applications
of Mathematics and Computing to the Physical Sciences”,
IMACS Transactions on Scientific Computation, Volume 1,
Noth-Holland Publishing Company, Amsterdam New York Oxford, 1983, pp.55–64</li>
<li>Gear, Charles William und Saad, Youcef: “<a href="https://doi.org/10.1137/0904040">Iterative Solution of Linear Equations in ODE Codes</a>”,
SIAM Journal on Scientific and Statistical Computing, Vol 4, No 4,
December 1983, pp.583–601</li>
<li>Gladwell, Ian und Berzins, M. und Brankin, R.W.:
“<a href="https://dl.acm.org/doi/pdf/10.1145/47917.47921">The Stiff Integrators in the NAG Library</a>”,
ACM SIGNUM Newsletters, Vol 3, No 2, April 1988, pp.16–23</li>
</ol>
<h2>1. Zusammenhang zwischen Picard und Newton Iteration<a id=Picard_und_Newton></a></h2>
<blockquote>
<p>A choice of the <em>basic variable</em> has to be made.
The literature is confusing as to what the possibilities are and the
consequences of the choice.
These matters are clarified.</p>
<p><a href="https://doi.org/10.1137/0901005">L.F. Shampine (1980)</a></p>
</blockquote>
<p>Zur Lösung allgemeiner, nichtlinearer Gleichungssysteme im $\mathbb{R}^n$
existieren eine Fülle von Verfahren.
Zwischen zwei dieser Verfahren bestehen enge Verwandtschaftsbeziehungen:
zwischen der Picard Iteration und der Newton Iteration.</p>
<p>Ist</p>
<div class=math>
$$
    x = \varphi(x), \qquad\hbox{für}\quad x\in\mathbb{C}^n,
$$
</div>
<p>so iteriert man mit Hilfe des Newton-Verfahrens nach der Vorschrift</p>
<div class=math>
$$
    x^{\nu+1} = x^\nu - (I-\varphi')^{-1}(x^\nu - \varphi(x^\nu)).
$$
</div>
<p>Setzt man $\varphi'=0$, so erhält man direkt die Rechenvorschrift
für die Picard Iteration</p>
<div class=math>
$$
    x^{\nu+1} = \varphi(x^\nu), \qquad\hbox{oder}\qquad
    x^{\nu+1} = x^\nu+(\varphi(x^\nu)-x^\nu),
$$
</div>
<p>welches auch als Residueniteration bezeichnet wird.
Andere Bezeichnungen sind Fixpunktiteration oder
repetierende Substitution.</p>
<p>Für die Keplersche Gleichung</p>
<div class=math>
$$
    y = \varepsilon f(y)+\psi =: \varphi(y), \qquad y\in\mathbb{R}^n,
$$
</div>
<p>braucht man keine weitere Erklärung, da sie in der obigen allgemeinen
Form der Fixpunktschreibweise enthalten ist.
Diese Erklärungen seien jetzt schon gegeben, obwohl trivial, da es
dann später, in unübersichtlicherem Zusammenhang, leichter ist den
einfachen Kern herauszulesen.
Für Spezialfälle der eindimensionalen Keplerschen Gleichung
existieren speziell angepasste Lösungsverfahren.
Einen Überblick findet man beispielsweise bei
<a href="https://doi.org/10.1007/BF01235847">Dandby (1987)</a>, und ein spezielles Verfahren für den
eindimensionalen Fall wird beschrieben bei <a href="https://doi.org/10.1007/BF01235850">Mikkola (1987)</a>.
Im Programm TENDLER wird zur Lösung der mehrdimensionalen
Keplerschen Gleichung ein modifiziertes
Newton-Kantorovich Iterationsverfahren benutzt.</p>
<p>Bibliographisch:</p>
<ol>
<li><a href="https://www.researchgate.net/profile/Lawrence-Shampine/research">Shampine, Lawrence</a>: “<a href="https://doi.org/10.1137/0901005">Implementation of Implicit Formulas for the Solution of ODEs</a>”, SIAM Journal on Scientific and Statistical Computing,
Vol 1, No 1, March 1980, pp.103–118</li>
<li><a href="https://de.wikipedia.org/wiki/%C3%89mile_Picard">Picard, Charles Emile</a> (1856–1941)</li>
<li><a href="https://de.wikipedia.org/wiki/Isaac_Newton">Newton, Sir Isaac</a> (1643–1727)</li>
<li>Dandby, J.M.A.: “<a href="https://doi.org/10.1007/BF01235847">The Solution of Kepler's Equation, III</a>”,
Celestial Mechanics, Vol 40, 1987, pp.303–334</li>
<li>Mikkola, Seppo: “<a href="https://doi.org/10.1007/BF01235850">A Cubic Approximation for Kepler's Equation</a>”,
Celestial Mechanics, Vol 40, 1987, pp.329–334</li>
</ol>
<h2>2. Newton Iteration im Programm TENDLER<a id=NewtonIteration></a></h2>
<blockquote>
<p>Therefore the usual iteration mode will reintroduce the numerical
instability for insufficiently small $h$ which is our objective to
avoid.</p>
<p>Irwin W. Sandberg, H. Shichman (1968)</p>
</blockquote>
<p>Neben der Tatsache, daß bei steifen Differentialgleichungen häufig die
benutzten Formeln für große Schrittweiten instabil werden, tritt jetzt noch
eine weitere Schwierigkeit hinzu.
Es ist nicht länger möglich durch einfache Fixpunktiteration, die impliziten
Formeln nach den $y_{m\ell+i}$ aufzulösen, weil dies erneut eine erhebliche
Einschränkung der Schrittweite $h$ bedeuten würde, ganz entgegen dem
Verhalten der exakten Lösung der Differentialgleichung, welche sehr wohl
große Schrittweiten geradezu anbieten würde.
Es besteht natürlich ein enger Zusammenhang zwischen Instabilität und
Nichtkonvergenz der Picard Iteration.</p>
<p>Nun würde einfache Fixpunktiteration stets konvergieren, bei
Erfülltsein von</p>
<div class=math>
$$
    \mathopen\|h {\beta_{ii} \over \alpha_{ii}} J \mathclose\| \lt  1, \qquad
    \hbox{$J=f_y$ Jacobimatrix von $f$.}
$$
</div>
<p>Dies ist immer erreichbar für genügend kleine Schrittweite $h$.
Bei steifen Poblemem ist man jedoch gerade daran nicht interessiert.
Zur Vermeidung dieser Problematik könnte man deswegen das
Newton Iterations-Verfahren verwenden, mit der Vorschrift</p>
<div class=math>
$$
    y_{m\ell+i}^{\nu+1} = y_{m\ell+i}^\nu - W_\nu^{-1}
    \bigl[
        y_{m\ell+i}^\nu - h {\beta_{ii} \over \alpha_{ii} }
        \dot y_{m\ell+i}^\nu +
        \underbrace{
        {1\over\alpha_{ii}}
        \sum_{j=-k+i}^{i-1}[\alpha_{ij}y_{m\ell+j}-h\beta_{ij}\dot y_{m\ell+j}]
                            }_{\hbox{${}=:(-\psi)$  konstant}}
    \bigr],
$$
</div>
<p>mit</p>
<div class=math>
$$
    W_\nu := I - h{\beta_{ii}\over\alpha_{ii}} f_y(t_{m\ell+i},y^\nu_{m\ell+i})
        \in \mathbb{R}^{n\times n},
$$
</div>
<p>um die gesuchten $y_{m\ell+i} \in \mathbb{R}^n$ zu bestimmen.</p>
<p><strong>1.</strong> Um den gewaltigen Rechenaufwand, der mit diesem Verfahren verbunden ist,
einzugrenzen, wird ein modifiziertes Newton-Kantorovich Verfahren verwendet.
Die Modifizierung des Newton-Kantorovich-Verfahrens besteht darin, daß die
Iterationsmatrix $W$, hier mit</p>
<div class=math>
$$
    W = (I_n - h{\beta_{ii}\over\alpha_{ii}} J),\qquad
    J = f_y(t_{m\ell},y_{m\ell}),
$$
</div>
<p>nicht in <em>jedem</em> Integrationschritt ausgewertet wird.</p>
<p>Der Unterschied des Kantorovich-Verfahrens gegenüber dem Newton-Verfahren
(auch Newton-Raphson Iteration) bestand ja darin, die Iterationsmatrix $W_\nu$
nur am Anfang der Iteration zu berechnen und damit nur eine einzige
$LU$-Zerlegung zu benötigen, im Gegensatz zum Newton-Verfahren, welches <em>pro Iterationsschritt</em>
eine $LU$-Zerlegung benötigt.</p>
<p>Man erkennt, daß die Jacobimatrix $J$ ausgewertet wird an der Stelle
$(t_{m\ell},y_{m\ell})$, also für die <em>letzte Stufe</em> des letzten, gerade
erfolgreich abgeschlossenen Zyklus (vom Start einmal abgesehen).
Dies ist eine bewußt vorsichtige Strategie.</p>
<p>Andere Strategien sind denkbar und werden auch tatsächlich in existierenden
Programmen angewendet.
Das Programm LSODE beispielsweise wertet die Jacobimatrix $J$ mit dem
gerade aktuellen Prädiktorwert aus.
Da der Schritt durch anhaltende Divergenz, durch Nichtinvertierbarkeit
von $W$ und insbesondere durch Fehlertestversagen zurückgewiesen werden kann,
ist $(t_{m\ell},y_{m\ell})$ eine geeignete Wahl.</p>
<p>Bzgl. der Variabilität von $J$, beachte man auch die nachfolgenden
Ausführungen von <a href="https://doi.org/10.1137/0901005">Shampine (1980)</a>.</p>
<p>Die Iterationsmatrix $W$ wird in dem Programm TENDLER nur dann berechnet,
falls</p>
<ol>
<li>das modifizierte Newton-Kantorovich Verfahren selbst nach
“ausreichend vielen” (häufig drei) Iterationen den Konvergenztest nicht
bestand,</li>
<li>u.U. nachdem die Fehlerkontrolle nicht passiert wurde, oder</li>
<li>die Schrittweite mal $\beta_{ii}/\alpha_{ii}$
sich um mehr als 40% seit der letzten Berechnung geändert hat.</li>
</ol>
<p>Man beachte, daß die Iterationsmatrix eine Funktion aus dem Produkt
von $h$ und $\beta_{ii} / \alpha_{ii}$ ist.
Es wird sogar eigentlich nur eine “mittlere” Iterationsmatrix genommen, die
sich aus dem Mittel der verschiedenen $\beta_{ii} / \alpha_{ii}$
der einzelnen Stufen zusammensetzt.
Die Konvergenzeigenschaften werden dadurch nicht wesentlich verändert.</p>
<p>Es sei wieder $\gamma = \beta_{ii} / \alpha_{ii}$.
Deutlich gemacht werden sollte folgendes: Das unmodifizierte Newton-Verfahren
wird auf mehrere Art und Weise verändert, mit dem Ziel der Aufwandsreduktion.
Dreh- und Angelpunkt ist hierbei die Iterationsmatrix $W$.
Folgende Veränderungen werden durchgeführt:</p>
<ol>
<li>Die Iterationsmatrix $W$ wird nicht in jedem Iterationsschritt
neu ausgewertet.</li>
<li>Die Iterationsmatrix $W$ wird nicht in jedem Integrationsschritt
neu ausgewertet.</li>
<li>Wenn $W$ neu ausgewertet wird, so wird nicht notwendigerweise auch
gleichzeitig die Jacobimatrix $J$ mit ausgewertet.
Es wird häufig (typisch: alle 20–40 Schritte) ein und dieselbe
Jacobimatrix $J$ verwendet, allerdings mit aktualisierter
Schrittweite $h$ und formelabhängigen Größen $\beta_{ii}$ und $\alpha_{ii}$.</li>
</ol>
<p><strong>2.</strong> Die Beibehaltung der Iterationsmatrix $W$ über mehrere Integartionsschritte
gliedert sich erneut auf in</p>
<ol>
<li>$h\gamma$ ändert sich,</li>
<li>$h\gamma$ ändert sich nicht.</li>
</ol>
<p>Hier sprechen Tischer/Gupta (1983)1:</p>
<ol>
<li>im ersten Fall von einem <em>modifizierten Newton-Verfahren</em> und</li>
<li>im zweiten Falle von einem <em>simplifizierten Newton-Verfahren</em>.</li>
</ol>
<p>Bibliographisch:</p>
<ol>
<li>Tischer, Peter E. und Gupta, Gopal K.:
“A Cyclic Method Stiff ODE Solver”, Technical Report 38,
Department of Computer Science, Monash University, Clayton,
Victoria, Australia, June 1983, <em>i</em>+45 S.</li>
</ol>
<p>Der erste Fall tritt beispielsweise auf bei der Änderung der Schrittweite $h$,
aber auch alleine schon das Durchlaufen der Tendlerschen Zyklen mit seinen
i.d.R. nichtgleichen Stufen.
Allerdings liegen diese letzten Variationen immer unter 20%.
Von Wichtigkeit werden die Überlegungen von
<a href="https://doi.org/10.1137/0901005">Shampine (1980)</a>, S.111:</p>
<blockquote>
<p>The fragments of theory available for stiff problems give a great deal
of attention to model problems.
For the typical models to have any validity, it is necessary that the
solution of the differential equation be slowly varying and the Jacobian
be approximately constant in the neighborhood of the solution.
We did not make it clear enough in $\ldots$ that there are important
<em>practical</em> reasons for supposing this situation.
If the problem is stiff, we hope to be able to use “large” step sizes $h$.
According to</p>
</blockquote>
<div class=math>
$$
        y^*-y^{m+1} = (I-h\gamma J)^{-1}h\gamma({\cal J}_m-J)(y^*-y^m),
    $$
</div>
<blockquote>
<p>this is not likely to be possible unless $J$ is close to ${\cal J}_m$
for each $m$.
This requires that the Jacobian be nearly constant near $y^*$.
Using a factorization of $I-h\gamma J$ for several steps is not likely
to be possible unless the solution changes slowly and the Jacobian
changes slowly along the solution.</p>
</blockquote>
<p>Weiter</p>
<blockquote>
<p>On general grounds we can argue that most codes form a new $J$ far too
frequently.
For the common case of Jacobians which are fairly expensive, we would
like to avoid this wasted effort.
Sometimes Jacobians are inexpensive, e.g., they are “free” for linear
problems.
Avoiding the evaluation of Jacobian in such a case is unnecessary,
but should do no harm.
In the absence of information about the relative cost of evaluating a
Jacobian, we shall presume that it is substantial and seek to minimize
it.
$\ldots$ If $J$ is a Jacobian approximation based on a solution of about
the current size, the need for a new iteration matrix is likely to be
due almost solely to changing $h\gamma$, in part because we have seen
that $J$ does not need to be very accurate.
In either case the arguments suggest that a good tactic is to keep a
copy of $J$, and when forming a new iteration matrix, to first try the
old $J$.
The substantial increase of the storage required by the code is
probably why few codes do this.
$\ldots$ We have argued that the typical code forms a new approximate
Jacobian too often.
We advocate keeping a copy of $J$ and judiciously reusing it.
This does require extra storage, but we think it worthwhile.</p>
</blockquote>
<p>Das Programm TENDLER hält sich vollständig an diese Empfehlungen.</p>
<p>Die Iterationsmatrix $W$ wird noch zusätzlich dahingehend modifiziert,
daß die Jacobimatrix nur dann ausgewertet wird, falls</p>
<ol>
<li>die Integration startet,</li>
<li>$h\gamma$ sich um mehr als 100% geändert hat,</li>
<li>entsprechend viele Minuspunkte durch langsame Konvergenz
angesammelt wurden.</li>
</ol>
<p>Durch die getrennte Behandlung von $W$ und $J$ sind zwei Matrizen zu
speichern (dies ist ein Nachtei), jedoch kann die Anzahl der
Jacobimatrixauswertungen drastisch reduziert werden (dies ist ein Vorteil).
In diesem Zusammenhang schreibt <a href="https://dl.acm.org/doi/pdf/10.1145/355780.355784">Enright (1978)</a>:</p>
<blockquote>
<p>One unexpected observation, which is illustrated in the results of
problem D4, is that on the nonlinear problems tested, where the
Jacobian often changed significantly during integration, convergence
difficulty was seldom encountered by MOD-EPISODE.
As a result, Jacobian evaluations $\ldots$ are rare for MOD-EPISODE.</p>
</blockquote>
<p>In dem Programm MOD-EPISODE wird Enright's update technique,
siehe <a href="https://dl.acm.org/doi/pdf/10.1145/355780.355784">Enright (1978)</a>, verwendet.
Mit Hilfe dieser Auffrischungstechnik für die Iterationsmatrix $W$, ist
es möglich $W$ zu aktualisieren, ohne $W$ zu refaktorisieren, vorausgesetzt,
daß nur $h\gamma$ aktualisiert werden muß und nicht etwa $J$.
Im Gegenzug allerdings nehmen die Kosten für die Lösung eines Systems
$Ax=b$ mit faktorisierter Matrix $A$, leicht zu, und zwar um ${1\over2}n^2$
Operationen.
Gleichzeitig ist noch ein zusätzlicher Pivotvektor vonnöten.
Diese Ergebnisse von <a href="https://dl.acm.org/doi/pdf/10.1145/355780.355784">Enright (1978)</a> verdeutlichen besonders hervorhebenswert,
daß für die Konvergenz des also mehrfach modifizierten Newton-Verfahrens,
der Wert $h\gamma$ von entscheidender Bedeutung ist, nicht jedoch so sehr
von $J$.</p>
<p>Zu ähnlichen Schlüssen gelangen
<a href="https://doi.org/10.1016/0021-9991(81)90205-9">Karasalo/Kurylo (1981)</a>, <a href="https://escholarship.org/content/qt0xz0j2z8/qt0xz0j2z8.pdf">Kopie</a>.
Das Nachfolgerprogramm von LSODE (bzw. in gewisser Hinsicht mehr das
Nachfolgerprogramm von EPISODE) von <a href="https://doi.org/10.1137/0910062">Hindmarsh/Brown/Byrne (1989)</a>,
nämlich VODE, verwendet ebenfalls, wie das Programm TENDLER, <em>zwei</em> getrennte
Matrizen $W$ und $J$.</p>
<p>Erkennt man nun, daß an $J$ nicht hohe Genauigkeitsansprüche gestellt
werden müssen, werden zwei Wege deutlich, um weitere Ersparnisse zu
erzielen:</p>
<ol>
<li>Gewisse Elemente von $J$ können zu Null gesetzt werden, falls sie
nicht zu “groß” sind.
Damit ist es beispielsweise möglich, Bandstrukturen in $W$ zu erzielen
und hierfür geeignete Routinen der linearen Algebra zu verwenden,
z.B. Bandelimination.</li>
<li>Wird $J$ durch numerische Differentiation bestimmt, was bei
komplizierten Problemen eine große Arbeitserleichterung für den
Anwender bedeutet (man denke beispielsweise an NC5), so ist es
u.U. für den Benutzer einfacher, ein ungenaues Schema zu verwenden.</li>
</ol>
<p>Üblich bei gängigen Differentialgleichungslösern ist eine Approximation
der Jacobimatrix durch</p>
<div class=math>
$$
    {\partial f\over\partial_i e_i} \approx {f(y+\sigma e_i)-f(y)\over\sigma_i},
    \qquad e_i = \mathop{\rm col}_{\nu=1}^n\delta_{i\nu}
               = \pmatrix{0\cr\vdots\cr1\cr\vdots\cr0\cr},
    \qquad \hbox{$\sigma_i$ klein.}
$$
</div>
<p>Die Programme unterscheiden sich in der Wahl von $\sigma$.</p>
<p><strong>3.</strong> Auch Tischer/Gupta (1983)1, siehe oben,
analysieren die Korrektoriteration, ausgehend von den Überlegungen
in <a href="https://doi.org/10.1137/0901005">Shampine (1980)</a>.
Eine weitere Modifikation des Newton-Verfahrens, wie sie bei der allgemeinen
Lösung von nichtlinearen Gleichungen benutzt wird, nämlich die <em>Dämpfung</em>,
findet in dem Programm TENDLER keinerlei Anwendung.</p>
<p>Dies hat mehrere Gründe.</p>
<ol>
<li>Zum einen befindet sich das Programm TENDLER zu einem maßgeblichen
Teil im $P(EC)$-Modus, es wird also nur ein einziges Mal pro Schritt iteriert.
Dadurch kann eine Dämpfungsstrategie, welche auf dem Verhalten vergangener
Iterierten beruht, ersteinmal schon gar nicht mehr eingesetzt werden.</li>
<li>Zweitens, wenn nun in seltenen Fällen doch mehr als zweimal iteriert wird,
so bedeutet dies, daß i.d.R. die Schrittweite $h$ zu groß ist oder
die Iterationsmatrix $W$ zu alt ist, $J$ zu alt, o.ä. und nicht,
daß das Newton-Verfahren als solches Konvergenzschwierigkeiten hat.
Dies erkennt man daran, wenn man im Programm TENDLER eine entsprechende
Option setzt und sich somit entsprechende Werte, wie Konvergenzrate u.ä.,
vor und nach Versagen ausgeben lässt.</li>
<li>Drittens zeitigten die Testergebnisse von
Tischer/Gupta (1983)1, S.23,
daß das Programm ODIOUS mit gedämpften Newton-Verfahren nicht selten einen
guten Prozentpunkt schlechter arbeitet (Funktionsauswertungen, Schritte),
als das ungedämpfte Verfahren.
Hierbei gilt zu bemerken, daß das Programm ODIOUS hauptsächlich im
$P(EC)(EC)$-Modus arbeitet, sodaß der Steuerung des Dämpfungsfaktors
noch vergleichsweise “viele” Iterierte zur Verfügung stehen.</li>
</ol>
<p>Umgekehrt zeigen Ergebnisse anhand des Programmes <a href="https://doi.org/10.1007/BF01932774">STRIDE</a>, daß das
Newton-Verfahren mit Dämpfungsstrategie Ersparnisse im Bereich 8–22%
Funktionsauswertungen und 18–22% Jacobimatrixauswertungen liefern kann.
Dies verdeutlicht, daß die Newton Iteration bei impliziten
Runge-Kutta-Verfahren ein anderes Gesamtgewicht auf das Restprogramm
ausübt, als anders etwa bei linearen Mehrschrittverfahren und zyklischen
Verfahren.</p>
<p>Erneut verdeutlicht dies, daß Änderungen in <em>einem</em> Programm nicht die
gleichen Änderungen in <em>anderen</em> Progammen direkt nahe legen.</p>
<p>Nun ist es natürlich möglich eine Dämpfungsstrategie auf anderen Kriterien
beruhen zu lassen, als auf dem Konvergenzverhalten vergangener Iterierter.
<a href="https://doi.org/10.1137/0901005">Shampine (1980)</a> weist darauf hin,
daß die Iterationsmatrix $W$ “steife Komponenten” und “nicht-steife Komponenten”
unterschiedlich bewertet.
Dies hängt u.a. an den Eigenrichtungen von $W$.
Es ist also nicht so, daß sich eine Dämpfungstechnik in das Programm
TENDLER grundsätzlich nicht einbauen lässt.
Das Gegenteil ist der Fall.
Aufgrund der weitreichenden Kapselung von Aufgaben würde sich dies als eine
einfache Aufgabe darstellen.
Dennoch gab es, s.o., mehrere Gründe eine Dämpfungstechnik nicht einzubauen.</p>
<p><strong>4.</strong> Die Ableitung für die endgültige Programmierung der modifizierten
Newton-Kantorovich  Iteration verläuft nun wie folgend.
Die i.d.R. nicht-linearen Gleichungen der Form</p>
<div class=math>
$$
    y = h\gamma f(y)+\psi,
$$
</div>
<p>werden mit Hilfe des Newton-Kantorovich Iterationsverfahrens gelöst der Form</p>
<div class=math>
$$
\eqalign{
    y^{\nu+1} &= y^\nu - W^{-1}(y^\nu - h\gamma f(y^\nu)-\psi)\cr
              &= y^\nu + \gamma W^{-1}(hf(y^\nu) - z^\nu).\cr
}
$$
</div>
<p>Der Subskript $m\ell+i$ wurde hier zur Schreibvereinfachung weggelassen.
Für die Variable $z=hf(y)$ ist die Ableitung völlig analog.
Wegen $z = hf(\gamma z+\psi)$ ist</p>
<div class=math>
$$
\eqalign{
    z^{\nu+1} &= z^\nu - W^{-1}(z^\nu - hf(y^\nu))\cr
              &= z^\nu + W^{-1}(hf(y^\nu) - z^\nu).\cr
}
$$
</div>
<p><strong>5.</strong> Im allgemeineren Falle der Differentialgleichung
$E\dot y=f(y)$ erhält man die verallgemeinerte Keplersche Gleichung</p>
<div class=math>
$$
    Ey = h\gamma f(y)+\psi = \gamma z+\psi,
$$
</div>
<p>mit der Abkürzung $z=hf(y)$ dann entsprechend</p>
<div class=math>
$$
    z = {1\over\gamma}(Ey-\psi).
$$
</div>
<p>Die Iterationsmatrix $W$ ist nun $W=E-h\gamma J$ und man erhält</p>
<div class=math>
$$
\eqalign{
    y^{\nu+1} &= y^\nu - W^{-1}(Ey^\nu - h\gamma f(y^\nu) - \psi)\cr
              &= y^\nu + \gamma W^{-1}(hf(y^\nu) - z^\nu),
                 \qquad\qquad |{}\cdot E |{}-\psi |{}\cdot{1\over\gamma}\cr
}
$$
</div>
<p>multipliziert man von links mit der Matrix $E$, zieht man danach $\psi$
ab und teilt schließlich durch $\gamma$, so erhält man den gewünschten
Ausdruck für $z^{\nu+1}$ zu:</p>
<div class=math>
$$
    z^{\nu+1} = z^\nu + EW^{-1}(hf(y^\nu)-z^\nu) .
$$
</div>
<p>Biographisch:</p>
<ol>
<li><a href="https://www.mathgenealogy.org/id.php?id=66">Hindmarsh, Alan C.</a></li>
<li><a href="https://www.mathgenealogy.org/id.php?id=66">Brown, Peter N.</a></li>
<li><a href="https://www.mathgenealogy.org/id.php?id=66">Byrne, George D.</a></li>
<li><a href="https://www.researchgate.net/profile/Ilkka-Karasalo/research">Karasalo, Ilkka</a></li>
<li>Kurylo, John</li>
</ol>
<h2>3. Die Picard Iteration im Programm TENDLER<a id=PicardIteration></a></h2>
<p>Hier reduziert sich $W$ auf $W=I$ wegen $J=0$, und es ergibt sich</p>
<div class=math>
$$
\eqalign{
    y^{\nu+1} &= y^\nu + \gamma(hf(y^\nu)-z^\nu),\cr
    z^{\nu+1} &= hf(y^\nu).\cr
}
$$
</div>
<p>Die Programmierung der Picard Iteration ist nun wie folgt:</p>
<div class=math>
$$
\eqalign{
    \hat z    &\gets hf(y^\nu),\cr
    \Delta    &\gets \hat z - z^\nu,\cr
    y^{\nu+1} &\gets y^\nu + \gamma\Delta,\cr
    z^{\nu+1} &\gets \hat z.\cr
}
$$
</div>
<p>Die nullten Iterierten $y^0$ und $z^0$ werden vom Prädiktor geliefert.
Bei Picard Iteration mit fest vorgegebener Anzahl der Iterationen, kann man
bei $2k+1$ bzw. $2k$ Iterationen, $k$ Vektorkopieranweisungen durch
geeignete Programmierung einsparen.</p>
<h2>4. Der Konvergenztest im Programm TENDLER<a id=Konvergenztest></a></h2>
<blockquote>
<p>There is already a problem, however, which you will have noticed if
you are the kind of person who does not divide blindly.
Even for $h\ne0$ we might have $g(a+h)-g(a)=0$, making the division and
multiplication by $g(a+h)-g(a)$ meaningless.</p>
<p><a href="https://en.wikipedia.org/wiki/Michael_Spivak">Michael Spivak</a> (1967)</p>
</blockquote>
<p>Ein Konvergenztest in einem Differentialgleichungslöser soll feststellen,
wann genügend viele Iterationen ausgeführt wurden.
Es handelt sich im eigentlichen Sinne des Wortes nicht um einen
Konvergenztest, sondern um einen Test auf Abbruch der Iteration.
Da prinzipiell nur endlich viele Iterationen durchgeführt werden, ist es auch
schon aus diesem Grunde möglich eine Funktion anzugeben, sodaß keine
Konvergenz vorliegen braucht.
Die Zahl der Iterationen ist i.a. sehr gering.
Sie liegt i.a. zwischen 1 und 3.
Bei den Programmen LSODE, EPISODE, VODE, GEAR, <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a>, etc., liegt die
Anzahl der Iterationen in ebensolchen Bereichen.
Beim Programm TENDLER kann man die maximale Anzahl der Iterationen
frei wählen.
Erfahrungen lassen aber Werte größer als 5 nicht als besonders effizient
erscheinen.
Dies gilt allerdings ersteinmal nur für das Programm TENDLER.</p>
<p><strong>1.</strong> Es sei $\delta_\nu=\mathopen|y_N^{\nu+1}-y_N^\nu\mathclose|$ die Norm
des Pseudoresiduums bei der Newton-Kantorovich Iteration, und
$r_\nu=\mathopen|y_P^{\nu+1}-y_P^\nu\mathclose|$ sei die Norm des
Pseudoresiduums bei der Picard Iteration.
Sei $k_\nu$ die Konvergenzrate des modifizierten
Newton-Kantorovich Iterationsverfahrens, und sei $f_\nu$ die
Konvergenzrate der Picard Iteration.
$\hat k_\nu$, bzw. $\hat f_\nu$, kennzeichnen die Konvergenzraten der
entsprechend vorherigen Iteration, entsprechend sei $\hat k_\infty$,
bzw. $\hat f_\infty$ die letzte Konvergenzrate von der vorherigen Iteration
(vorheriger Zeitschritt).
Vor jedem Konvergenztest werden die beiden Werte $k_\nu$ und $f_\nu$ wie
folgt aktualisiert</p>
<div class=math>
$$
    k_\nu\gets\cases{
        \displaystyle\max\left({\delta_\nu\over\delta_{\nu-1}},
            {3\over20}k_{\nu-1}\right), & für $\nu\gt 1$,\cr
        \displaystyle\min\left({1\over10},{61\over50}\hat k_{\infty}\right),
            & für $\nu=1$\cr
    }
$$
</div>
<p>und</p>
<div class=math>
$$
    f_\nu\gets\cases{
        1/10, & falls $100r_\nu\le\tau$ und $\nu\gt 1$,\cr
        \displaystyle\min\left({r_\nu\over r_{\nu-1}},
            {3\over20}f_{\nu-1}\right), & falls $100r_\nu\gt \tau$ und $\nu\gt 1$,\cr
        \hat f_\infty, & für $\nu=1$.\cr
    }
$$
</div>
<p>D.h. anfangs steigt die Konvergenzrate für das modifizierte
Newton-Kantorovich Iterationsverfahren nicht über $1/10$, aber
verschlechtert sich jedesmal um 22%, falls in jedem Schritt nur einmal
iteriert werden sollte, also stets der $P(EC)$-Modus benutzt wird.
Diese in geometrischer Progression ansteigende Verschlechterung dient dazu,
daß “gelegentlich” auch der $P(EC)^i$-Modus $(i&gt;1)$ verwendet wird und somit
eine “echte” Konvergenzrate berechnet werden kann und nicht lediglich
eine Schätzung benutzt werden muß.
Bei der Picard Iteration wird die logische Variable <code>atlst2</code>
(at least two) dazu eingesetzt, daß u.U. zweimal iteriert werden muß.
Der Hintergrund für die Minima und Maxima liegt in der Vermeidung von
Ausreissern.
Z.B. dient $\max(\delta_\nu/\delta_{\nu-1},3k_{\nu-1}/20)$ dazu,
daß die Konvergenzrate $k_\nu$ für die Newton-Kantorovich Iteration
nicht unterhalb 15% ihres Vorwertes fällt.
Vermeidet man aus vermeintlichen Effizienzgründen diese Minima und Maxima,
so kann man tatsächlich beobachten, daß ein einziger Ausreisser, die
Konvergenzrate über zahlreiche Schritte verschlechtern kann, und dies
obwohl schon der nächste Zeitschritt wieder brauchbarere Werte liefert.</p>
<p>Diesen Effekt kann man durch Testläufe gut beobachten.
In dem Programm TENDLER gibt es eine Option sich diese Werte ausdrucken zu
lassen (analog wie <code>\tracingpages</code> in <a href="https://web.math.ucsb.edu/~bigelow/books/texbook.pdf">TeX</a>),
sodaß man diesen Effekt gut beobachten kann.
Diese Option ist aktivierbar ohne Neuübersetzung.</p>
<p>$f_0$ wird nicht gesondert behandelt, da bei einmaligem Iterieren
keine Schaltentscheidung möglich ist.
Bei zwei Iterationen stehen aber dann genügend viele benötigte Werte
zur Verfügung zur Berechnung einer Konvergenzrate.
Ganz zu Beginn der Integration werden $k_\nu$ und $f_\nu$ initialisiert mit</p>
<div class=math>
$$
    k_0\gets{1\over2}, \qquad f_0\gets{1\over2}.
$$
</div>
<p>Das Programm LSODE benutzt hier den Wert $0.7$ und die Programme <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a>,
GEAR, EPISODE und zahlreiche weitere, verwenden hier den Wert $1$.</p>
<p>Die Überprüfung, ob $100r_\nu \le \tau$ ist, dient dazu, Besonderheiten
durch übermässig kleine Pseudoresiduen nicht überreichlich Gewicht
beizumessen und insbesondere eine Division durch Null zu vermeiden.
Auch bei Rechnung nahe der Grenze der Maschinengenauigkeit greift dieser
Zusatztest.
Würde man diesen einfach durchzuführenden und schnell berechneten Test
unterlassen, so könnte es passieren, daß eine “zufällig” gebildete große
oder kleine Konvergenzrate gebildet würde und dem Konvergenztest seine
Kontinuierlichkeit entzieht.
Das Setzen auf den Wert $1/10$ besitzt eine gewisse Willkürlichkeit.
Da jedoch $100r_\nu\le\tau$ erfüllt ist, liegt es nahe anzunehmen, daß die
Iteration konvergiert.
Diesen Sachverhalt sollte die Konvergenzrate in angemessener Weise
widerspiegeln.
Hierbei ist der Wert $1/10$ sogar noch vergleichsweise hoch.
Typische Konvergenzraten liegen nicht selten eine Zehnerpotenz darunter.
Es ist häufig zu beobachten, daß wenn $100r_\nu\le\tau$ erfüllt ist, daß dann
sehr schnelle Konvergenz vorliegt und wenn es dann doch zu zweimaligen
Iterieren kommt, die vergleichsweise hohe Konvergenzrate von $1/10$
heruntergezogen wird.
Aus Gründen, die mit dem Schalten zusammenhängen, werden “gelegentlich”
2 Iterationen ausdrücklich gefordert.</p>
<p>Bei unkritischem Betrachten der Überlegungen, wann eine Iteration abzubrechen
ist, können Mißdeutungen auftreten.
Es sei deutlich darauf hingewiesen, daß die obigen Plausibilitätsüberlegungen
keinerlei Beweiskraft besitzen, da z.B. durch eine kleine
Schrittweite $\mathopen|h\mathclose|$ das Pseudoresiduum nichts über
Konvergenz aussagen muß---man denke an die Reihe $\sum(1/n)$.
Dennoch zeigt sich, daß im Verein mit den restlichen Segmenten des
Programmes TENDLER der Test so arbeitet, wie er geplant wurde.
Es sei angemerkt, daß in anderen Programmen, wie z.B. LSODAR, nicht
rigoroser vorgegangen wird.
Hierbei ist es so, daß das Programm LSODAR sehr viel mehr Aufwand treibt beim
Konvergenztest, wie die Programme <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a>, GEAR, EPSISODE, <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a> und weitere.
Allerdings handelt es sich bei den zuletzt genannten Programmen auch um
“ältere” Programme.
Beim Konvergenztest für das modifizierte Newton-Kantorovich Iterationsverfahren
braucht kein Test der Form $100\delta_{\nu-1}&lt;\tau$ verwendet werden,
da andernfalls schon vorher Konvergenz gemeldet worden wäre.
Bei Picard Iteration kann Konvergenz angezeigt sein und trotzdem wird weiter
iteriert aufgrund der Variablen <code>atlst2</code>.
Ein Iterationsschritt des modifzierten Newton-Kantorovich Iterationsverfahrens
ist für $n&gt;1$ aufwendiger als ein Iterationsschritt mit der Picard Iteration.</p>
<p>Der eigentliche Test ist nun</p>
<div class=math>
$$
    \delta_\nu k_\nu\le\tau, \qquad\hbox{bzw.}\qquad
    \delta_\nu f_\nu\le\tau.
$$
</div>
<p>Danach wird geprüft, ob die Iteration abzubrechen ist, falls einer der
beiden Bedingungen</p>
<div class=math>
$$
    k_\nu\le{47\over100}, \qquad\hbox{bzw.}\qquad f_\nu\le{1\over5}
    \qquad(\nu\gt 1)
$$
</div>
<p>verletzt ist.
Dieser Test wird also nur durchgeführt, wenn eine “echte” Konvergenzrate
gebildet wurde.
Im Falle von Konvergenz wird bei der modifizierten Newton-Kantorovich
Iteration die Funktion <code>setconv()</code> aufgerufen, welche Einfluß nimmt
auf die Statusvariable <code>iweval</code>.
Die Funktion <code>setconv()</code> ergreift besondere Maßnahmen bei Erkennung
“langsamer” Konvergenz.
Bei Picard Iteration wird sofort zum Fehlerkontroll-Segment verzweigt.
Die Funktion <code>setconv()</code> wird bei Picard Iteration nicht aufgerufen.</p>
<p><strong>2.</strong> Der Wert $\tau$ wird vor jedem Zyklus besetzt mit $\tau\gets\varepsilon/16$.
Die Wahl dieser Größe ist kritisch.
Der Wert $\varepsilon/10$ ist schon zu “groß”, der Wert $\varepsilon/22$
wiederum zu “klein”.
Dies soll etwas genauer erklärt werden.
Manchem Programm kann seine Leistungsfähigkeit, seine Effizienz geraubt
werden durch eine zu kleine Wahl von $\tau$.
Bei dem Programm <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a> liegt die Anzahl der Korrektoriterationen pro
Schritt bei 1.8 (grob gemittelt).
Natürlich hängt dieses Verhältnis ab von der zugrundeliegenden
Differentialgleichung, von der geforderten Genauigkeit,
von der verwendeten Rechenanlage und weiterem.
Bei einer früheren Version des Programmes ODIOUS lag dieser Mittelwert
ebenfalls bei 1.8 (erneut grob gemittelt, unter erneuter Mißachtung von
sonstigen Abhängigkeiten, w.o.).
Bei dieser früheren Version vom Programm ODIOUS war $\tau=\varepsilon/100$.
Bei dem Programm LSODE liegt das Verhältnis von Iterationen zu Schritten bei
ca. 1.2–1.3.
Nun ist aber bei den zyklischen Formeln von <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>
wenig Grund ersichtlich, warum diese Werte derart differieren sollen, zumal
die insgesamt 24 Stufen zu 62.5% aus den BDF bestehen, mithin die Formeln
von J.M. Tendler eine matrixwertige Verallgemeinerung der BDF darstellen.</p>
<p>Durch Probeläufe mit dem Programm TENDLER wurden nun festgestellt, daß
ohne Einbußen an Genauigkeit, ein Übergang von einem quasi $P(EC)(EC)$-Betrieb
auf einen $P(EC)$-Betrieb übergewechselt werden kann, ohne Einbrüche an
Schrittzahl, Jacobimatrixauswertungen, Fehlerversagen und dergleichen
feststellen zu müssen.</p>
<p>In der Wahl des Wertes $\tau$ differieren viele Programme und dies selbst
dann, wenn diese Programme auf den gleichen Formeln basieren.
Manche Programme bringen $\tau$ mit dem Diskretisierungsfehler in Verbindung,
manche mit der Ordnung des Verfahrens, manche mit beiden, manche mit gar
nichts.</p>
<p>Für alle diese Auswahlen gibt es Erklärungen, Plausibilitätsüberlegungen,
aber keinen mathematischen Beweis, der aussagt, daß nur diese oder jene Form
allen anderen Formen grundsätzlich überlegen ist.
Allen haftet letztendlich die gleiche Willkürlichkeit an, wie eben der
Wahl $\tau=\varepsilon/16$.
Der Wert $\tau=\varepsilon/16$ im Programm TENDLER darf nicht
notwendig zur Annahme verleiten, daß zwischen $\tau$ und $\varepsilon$
immer ein solch einfacher funktionaler Zusammenhang besteht.
Ebenso denkbar ist, daß Änderungen anderer Segmente letztlich wieder andere
Konstellationen günstiger erscheinen lassen.
Shampine (1979) schreibt hierzu:</p>
<blockquote>
<p>An unsolved basic problem with the acceptance test is the relationship
between an appropriate tolerance $\tau$ for $\mathopen|\varrho\mathclose|$
or $\left|y^m-y^*\right|$ and the tolerance $\varepsilon$ for the
local truncation error.
As far as we know, the relation was selected by experiment in all the
current codes.
There are two issues here.
One is the effect on the remainder of the integration due to computing
$y^*$ inaccurately.
The other is the effect of inaccurate solution values on other
algorithms in the code, such as that for estimating the local
truncation error.
$\ldots$ Thus it is a waste of effort to take $\tau$ very small compared
to $\varepsilon$.</p>
</blockquote>
<p>An anderer Stelle, siehe <a href="https://doi.org/10.1137/0901005">Shampine (1980)</a>, hierzu
weiter:</p>
<blockquote>
<p>We have not said anything about the relationship between the
tolerance $\tau$ in $r/(1-r)\left|y^{m+1}-y^m\right|$ and the
accuracy $\varepsilon$ desired of the solution of the differential
equation.
This is a research question whichs needs attention.
It is clear that $\tau$ must be smaller than $\varepsilon$.
A small $\tau$ is one way to compensate for an inaccurate estimate of $r$
used in the convergence test.
However the smaller $\tau$ is made, the more it costs to compute $y^*$.
Experiment says that $\tau$ a great deal smaller than $\varepsilon$
does not improve the solution of the differential equation.
In current codes the relationship appears to be ad hoc.
The choice varies wildly, but $\tau=0.1\varepsilon$ is representative.</p>
</blockquote>
<p>Die Simplifizierung der Tests auf $\delta_\nu k_\nu$ bzw. $r_\nu f_\nu$,
anstatt $k_\nu/(1-k_\nu)\delta_\nu$ bzw. $f_\nu/(1-f_\nu)r_\nu$, hat
seinen Grund in der Begrenzung der Konvergenzraten.
Hierbei ist $1-k_\nu\approx1$ bzw. $1-f_\nu\approx1$.
Wäre dies nicht der Fall, so wäre im Programm TENDLER ohnehin schon vorher
Divergenz gemeldet worden.
Man hätte aber auch sonst allen Grund Divergenz anzunehmen.</p>
<p>Man könnte nun angesichts der Wichtigkeit dieses Wertes $\tau$ sich der
Mühe unterziehen, mit einem Ansatz der Form</p>
<div class=math>
$$
    \tau = {a\varepsilon + b\over cp^2+dp+e},
$$
</div>
<p>beispielsweise, ggf. unter Berücksichtigung der Beträge der Fehlerkonstanten
o.ä., und durch eine Batterie von Testdifferentialgleichungen
mit Hilfe eines Programmes zur Lösung von Optimierungsaufgaben, unter
Nebenbedingungen ggf., die günstigsten Werte
$a$, $b$, $c$, $d$ und $e$ zu ermitteln versuchen.
Z.B. hängt in den Programmen <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a> und <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a> der Wert $\tau$ von der
Ordnung $p$ ab.
Jedoch muß man berücksichtigen, daß auch die Wahl von Sicherheitsfaktoren,
wie sie bei der Fehlerkontrolle und der Schrittweiten- und Ordnungssteuerung
auftreten, Rückwirkungen haben.
Beispielsweise konnte folgendes beobachtet werden: Ist $\tau$ zu groß, so
wird der Fehlerkontrolle fast gänzlich alleine die Entscheidung über die
Güte einer Näherung aufgebürdet, desto häufiger versagt sie.
Die Korrektoriteration hatte nicht genügend Zeit, die
“Steifheit wegzudämpfen”; für eine Präzisierung des letzten
siehe <a href="https://doi.org/10.1137/0901005">Shampine (1980)</a>.</p>
<p>Diesen Effekt kann man teilweise entgegenwirken, indem man die Fehlerkontrolle
sehr restriktiv macht, also schon sehr früh versagen lässt, bevor dies
irgend etwas mit Steifheit zu tun haben könnte.
Durch Wahl geeigneter Sicherheitsfaktoren ist dies leicht zu bewerkstelligen.
Man befindet sich in der gleichen mißlichen Situation, daß eine
Minimierung der Funktion $f(x_1,x_2,\ldots,x_n)$ in der Variablen $x_1$,
noch lange keine Minimierung der Funktion $f$ schlechthin zu bedeuten hat,
d.h. eine Minimierung in allen Variablen.
An dem letzten ist man ja eigentlich interessiert, nämlich dem Maximum
an Effektivität eines Differentialgleichungslösers.</p>
<p>Eine weitere Bestätigung für die Wahl des $P(EC)$-Modus als dominierende
Betriebsart, erhält man, wenn man das Programm TENDLER im
Newton-Kantorovich- bzw. Picard-Modus, mit fest vorgegebener Anzahl der
Iterationen, benutzt.
Hier zeigen Testläufe, daß die globalen Fehler sich nicht merklich ändern,
allein einzig das Verhältnis von Funktionsauswertungen zu Schritte, hat
fast genau den Wert erreicht, denn er auch theoretisch erreichen müßte,
also $i$, für die $P(EC)^i$-Betriebsart, und 2, für die
$P(EC)E$-Betriebsart.</p>
<p>Diese empirisch gewonnene Erkenntnis deutet an, daß der Sachverhalt, der vom
Startfehlersatz von <a href="https://dl.acm.org/doi/pdf/10.1145/362663.362745">Liniger (1971)</a> ausgedrückt wird,
allgemeiner gilt, als der ihn tragende Beweis.
Der Beweis des Startfehlersatzes von <a href="https://dl.acm.org/doi/pdf/10.1145/362663.362745">Liniger (1971)</a> ist an Bedingungen
geknüpft, die im Falle steifer Differentialgleichungen nicht zutreffen.</p>
<p>Dieser Sachverhalt ist jedoch aus anderem Zusammenhang gut bekannt.
Die Formeln, die Tischer (1983)2 (PhD, siehe unten) und
<a href="https://doi.org/10.1137/0904051">Tischer/Sacks-Davis (1983)3</a> vorstellen, sind
beweistechnisch geknebelt an die Bedingung, daß
$\left|hDK_2\right|&lt;1$ ist [$D=\sup\left|A^i\right|$,
$K_2$ Lipschitzkonstante bzgl. $v$ bei $\varphi(u,v)$].
Die Tatsache, daß das Programm ODIOUS, welches auf diesen zyklischen Formeln
von Tischer (1983)2 und <a href="https://doi.org/10.1137/0904051">Tischer/Sacks-Davis (1983)3</a> basiert, in
seiner Leistungsfähigkeit bei den DETEST-Problemen dem Programm LSODE in
fast nichts nachsteht, ja sogar bei der besonders steifen
Testdifferentialgleichung B5, seine gänzliche Überlegenheit zeigt,
siehe <a href="https://dl.acm.org/doi/pdf/10.1145/214408.214417">Tischer/Gupta (1985)2</a>,
macht deutlich, daß die Aussagen, wie sie die derzeitige Theorie macht,
allgemeiner gelten, als die sie stützenden Beweise.</p>
<p>Bibliographisch:</p>
<ol>
<li>Tischer, Peter E.: “The Cyclic Use of Linear Multistep
Formulas for the Solution of Stiff Differential Equations”, Ph.D. Thesis,
Department of Computer Science, Monash University, Clayton, Victoria,
Australia, August 1983, <em>x</em>+180 S.</li>
<li>Tischer, Peter E. und Gupta, Gopal K.:
“A Cyclic Method Stiff ODE Solver”, Technical Report 38,
Department of Computer Science, Monash University, Clayton,
Victoria, Australia, June 1983, <em>i</em>+45 S.</li>
<li>Tischer, Peter E. und Sacks-Davis, Ron: “<a href="https://doi.org/10.1137/0904051">A New Class of
Cyclic Multistep Formulae for Stiff Systems</a>”,
SIAM Journal on Scientific and Statistical Computing,
Vol 4, No 4, December 1983, pp.733–747</li>
<li>Tischer, Peter E. und Gupta, Gopal K.: “<a href="https://dl.acm.org/doi/pdf/10.1145/214408.214417">An Evaluation
of Some New Cyclic Linear Multistep Formulas for Stiff ODEs</a>”,
ACM TOMS, Vol 11, No 3, September 1985, pp.263–270</li>
</ol>
<p><strong>3.</strong> Der Vorteil der Benutzung von <code>MNI</code>, <code>FIX</code> und <code>FIXPECE</code>, also den
Iterationsarten mit fest vorgegebener Anzahl an Iterationen, liegt darin,
daß kein Konvergenztest durchgeführt wird, keine Konvergenzraten gebildet
werden (somit keine Schaltmöglichkeit besteht), insbesondere keine
Normauswertung während der Korrektoriteration erfolgt.
Nun ist der Einfluß der Normberechnungen erwartungsgemäß zwar nicht
alles dominierend, jedoch stellt er einen bei flüchtiger Betrachtung
häufig unterschätzten Beitrag dar. %bisweilen
Der Anteil an der Gesamtrechenzeit variiert selbstverständlich.
Er hängt vom Differentialgleichungsproblem ab und auch von der Wahl der Norm
schlechthin.
Z.B. ist $\left|{}\cdot{}\right|_\infty$ i.a. signifikant billiger zu
berechnen als $\left|{}\cdot{}\right|_2$.
Bei kleindimensionalen Differentialgleichungsproblemen beherrscht das
Drucken oder Plotten die Gesamtrechenzeit.</p>
<p>Nicht untypisch ist jedoch, daß die Funktionsauswertungen ca. 5–10% bei
einfach auszuwertenden Funktionen und 10–20% bei aufwendigeren Funktionen
ausmachen und die Rücksubstitutionen und Normberechnungen jeweils ca. 10%.
Dies wird anfänglich möglicherweise überraschen.
Bedenkt man jedoch, wie häufig Normberechnungen notwendig sind, so werden
die Zahlen verständlich.
Nocheinmal sei betont, daß die Werte 20% und 10% nicht feststehende
Zahlen sind, sondern variieren, u.U. nicht unerheblich, jedoch einen
typischen Bereich abstecken.
Z.B. bei den Problemen B2 bis B5 benötigen die Normberechnungen insgesamt
ca. 10%, die Rücksubstitutionen ca. 8% und die Funktionsauswertungen
ca. 3% der Gesamtrechenzeit.
Bei dieser Schar von Differentialgleichungen ist die Auswertung der Funktion
sehr einfach.
Es werden in diesem Falle ca. zwei bis dreimal soviele Normauswertungen
durchgeführt wie Funktionswerte bestimmt werden.</p>
<p>Bei den zwei Iterationsarten <code>MNI</code> und <code>FIX</code> kann selbstverständlich
nach jedem Zyklus die Anzahl der Iterationsschritte geändert werden,
genauso, wie prinzipiell nach jedem Zyklus der Benutzer jede beliebige
Iterationsart anwählen kann, also <code>MNI</code>, <code>MNIFLOAT</code> (Newton-Kantorovich mit
Konvergenztest), <code>FIX</code>, <code>FIXFLOAT</code> (Picard mit Konvergenztest) und
<code>FIXPECE</code>.
Natürlich kann auch die maximale Anzahl der Iterationen für <code>MNIFLOAT</code>
und <code>FIXFLOAT</code> vom Benutzer auf jeden beliegen Wert größer Null gesetzt
werden.
Vom Programm TENDLER werden hier gewisse Voreinstellungen wirksam.</p>
<p><strong>4. Beispiel:</strong>
Bezüglich der Konvergenzraten beachte man, daß es sehr wohl sein kann, daß</p>
<div class=math>
$$
    \mathopen|y^2-y^1\mathclose| \gg \mathopen|y^1-y^0\mathclose|
$$
</div>
<p>und dies obwohl die Folge der Iterierten konvergiert, sogar sehr schnell.
Diese grundsätzliche Problematik sieht man beispielsweise für</p>
<div class=math>
$$
    y^i = \cases{1/2^i,  & für $i\mathbin\%13=0$,\cr
                 1/10^i, & für $i\mathbin\%13\ne0$,\cr
    } \qquad (i\ge0).
$$
</div>
<p>Darüberhinaus erkennt man sogar, daß unendlich häufig gilt</p>
<div class=math>
$$
    \left|y^{13\nu}-y^{13\nu-1}\right| \gg \left|y^{13\nu-1}-y^{13\nu-2}\right|,
    \qquad (\nu\gt 0).
$$
</div>
<p>Den Quotienten $\mathopen|y^{\nu+1}-y^\nu\mathclose|
/ \mathopen|y^\nu-y^{\nu-1}\mathclose|$ kann man natürlich
beliebig groß gestalten, durch passende Änderungen.
Es muß also zuerst geprüft werden, ob der Betrag des Residuums oder der
Betrag des Pseudoresiduums ausreichend klein ist.
Erst danach ist zu überprüfen, ob die Konvergenzrate Anlaß zur
Besorgnis gibt.
Auf der anderen Seite gibt <a href="https://doi.org/10.1137/0901005">Shampine (1980)</a>
ein Beispiel einer steifen Differentialgleichung an, wo die Dinge genau
umgekehrt liegen, also erst das Pseudoresiduum und danach das Residuum getestet
werden sollte.
Den Term $1/2^i$ kann man auffassen als entstandenen Rundungsfehler.
Die Zahl 13 ist hier natürlich völlig willkürlich gewählt.</p>
<p>In dem obigen Beispiel ist $(y^\nu)_{\nu=0}^\infty$ keine kontrahierende
Folge.
Jedoch ist man nicht an Kontraktion per se interessiert, sondern an
Konvergenz.
Kontraktion und gewisse Selbstabbildungseigenschaften sind lediglich
eine hinreichende Bedingung für Konvergenz; notwendig sind diese Bedingungen
für Konvergenz nicht.</p>
<p><strong>5. Der Divergenzfall:</strong>
Wird nun der oben beschriebene Konvergenztest nicht bestanden, so kommen
folgende Strategien zur Anwendung.
Eine geschickte Wahl dieser Strategie ist wichtig für die Effizienz
des Programmes und das Weiterrechnen nach einem Fehlschlag.</p>
<p>Trotz des Fehlens einer abgeschlossenen mathematischen Theorie, verlangen
die Heuristiken große Aufmerksamkeit.</p>
<ul>
<li>Ist die Schrittweite minimal?<ul>
<li>Vergiß Zurückweisungen aufgrund der Fehlerkontrolle</li>
<li>Ordnung $p$ gleich 1 ?<ul>
<li>Restauriere wichtige Größen auf diejenigen Werte vor Beginn des aktuellen Zykluses</li>
<li>Verlasse das Unterprogramm TENDLER mit einer Mitteilung für den Anwender</li>
</ul>
</li>
<li>Ordnung $p$ gleich 2 ?<ul>
<li>Rufe das Unterprogramm <code>euler_last_chance()</code> auf, und wiederhole den gesamten Zyklus</li>
</ul>
</li>
<li>$p\ge3$ ?<ul>
<li>Setze Ordnung $p$ auf 2</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Den obigen Fall muß man eher als sehr große Ausnahme werten.
Häufiger ist der nachstehende Fall, obwohl natürlich auch dieser Fall eher
selten auftritt.</p>
<ul>
<li><code>switch (itmode) {</code><ul>
<li><code>case MNI:</code></li>
<li><code>case MNIFLOAT:</code><ul>
<li>Drittele die Schrittweite $h$</li>
<li>Aktiviere die beiden Sperren <code>wait[]</code> und <code>problem</code></li>
<li>Rufe <code>oldbdf()</code> um die rückwärtsgenommenen Differenzen wieder zu generieren</li>
<li>Wiederhole den gesamten Zyklus</li>
</ul>
</li>
<li><code>case FIX:</code></li>
<li><code>case FIXFLOAT:</code><ul>
<li>Ist das Schalten möglich und derzeit erlaubt?<ul>
<li>Gehe in den steifen Modus</li>
<li>Setze <code>iweval</code> durch die Funktion <code>setiweval()</code>, wobei auch $J$ zur Disposition steht</li>
</ul>
</li>
<li>andernfalls<ul>
<li>Drittele die Schrittweite $h$</li>
<li>Aktiviere die beiden Sperren <code>wait[]</code> und <code>problem</code></li>
<li>Rufe <code>oldbdf()</code> um die rückwärtsgenommenen Differenzen wieder zu generieren</li>
<li>Wiederhole den gesamten Zyklus</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><code>}</code></li>
</ul>
<p>Die maximale Anzahl der Iterationen ist in den einzelnen Iterationsarten
begrenzt durch die Variablen <code>mnimaxit</code> und <code>fixmaxit</code>.
Es ist auch möglich, daß der Benutzer die Anzahl der Iterationen
fest vorgibt.
Dann werden jedoch andere Unterprogramme aufgerufen.
Um die ohnehin komplexen Konvergenztestuntersuchungen nicht mit weiteren
Abfragen zu überfrachten, werden für sich getrennte Unterprogramme
aufgerufen, die zudem die speziellen Bedürfnisse der Iterationsart
berücksichtigen und in dieser Hinsicht optimiert sind.
In der Funktion <code>setiweval()</code> wird der Hindmarsh-Test vollzogen.</p>
<p>Für das modifizierte Newton-Kantorovich Iterationsverfahren sieht die
grundsätzliche Steuerlogik wie folgt aus:</p>
<ul>
<li><code>for (cvfail=0; cvfail&lt;=1; ++cvfail) {</code><ul>
<li>Bereite die Iterationsmatrix $W$ entsprechend auf, falls nötig</li>
<li>Beachte den Fall der Nicht-Invertierbarkeit</li>
<li>Iteriere bis zu maximal <code>mnimaxit</code> mal</li>
<li><code>if (iweval != OLDW)</code><ul>
<li><code>break;</code></li>
</ul>
</li>
<li>Regeneriere die beiden nullten Iterierten $y^0$ und $z^0$</li>
<li><code>iweval = WwithJ</code></li>
</ul>
</li>
<li><code>}</code></li>
<li>Aktualisiere die Statistiken in Abhängigkeit von <code>cvfail</code></li>
</ul>
<p><strong>6. Singularität der Iterationsmatrix:</strong>
Im Falle einer nicht-invertierbaren Iterationsmatrix $W$ wird einfach
weiterverfahren, und zwar so als ob Divergenz gemeldet worden wäre.
Zwar wird von <code>mnifloat()</code> als auch <code>mni()</code> ein spezielles Zeichen
gesetzt, welches Singularität der Iterationsmatrix $W$ anzeigt, doch
wird dieses augenblicklich nicht gesondert verarbeitet.
Prinzipiell besteht zwischen Divergenz und Nichtinvertierbarkeit ein
großer Unterschied.
Sei $n$ die Dimension der zu lösenden Differentialgleichung.
Es kann nun nur maximal $n$ verschiedene Eigenwerte des Eigenwertproblems</p>
<div class=math>
$$
    J{\bf x} = \lambda{\bf x}, \qquad\lambda = {1\over h\gamma}
$$
</div>
<p>geben.
Man beachte die Form der Iterationsmatrix $W=I-\lambda^{-1}J$.
Kennt man das Spektrum der Jacobimatrix $J$ im voraus, so kann man sofort
die “verbotenen” Werte $h_i\gamma_i=\lambda_i^{-1}$ angeben, für
$i=1,\ldots,n$.
I.d.R. kennt man natürlich das Spektrum von $J$ nicht, zumal $J$
von der Zeit $t$ abhängen kann.</p>
<p>Weiterhin sieht man, daß die Drittelung der Schrittweite sofort erneut
zu einer nicht-invertierbaren Iterationsmatrix $W$ führen kann, wie man
anhand der speziellen Jacobimatrix $J=\bigl({1\atop0}{0\atop3}\bigr)$
und einer Schrittweitendrittelung ersehen kann.</p>
<p>Umgekehrt ist es gut möglich, daß eine Vergrößerung der Schrittweite $h$
eine viel angemessenere Reaktion auf Nichtinvertierbarkeit darstellen könnte.
Es gibt kein Programm, welches dies tut, dennoch wäre ein solches
Verhalten während der Startphase nicht abwegig, wenn man gewisse
Zusatzinformationen der Schrittweiten- und Ordnungssteuerung mit
berücksichtigen würde, was selbstverständlich einen erhöhten
programmiermässigen Aufwand darstellen würde.
Aus Sicherheitsgründen verkleinert man natürlich lieber die Schrittweite $h$,
vergößern kann man sie dann anschliessend immer noch.</p>
<p>Vorstellbar ist dabei jedoch das folgende Szenarium mit der Jacobimatrix
$J=\bigl({1\atop0}{0\atop5}\bigr)$.
Sei $h=1$, $W$ sei nicht invertierbar, $h$ wird gedrittelt, in der
Schrittweiten- und Ordnungssteuerung dann jedoch später wieder
verdreifacht, $\ldots$ .
Man erkennt zusätzlich, daß eine Veränderung der Ordnung $p$ alleine
ebenfalls schon eine mögliche Quelle für Nichtinvertierbarkeit der
Iterationsmatrix $W$ darstellt, falls $W$ refaktorisiert wird.
Die hier beinahe sehr in das Detail gehenden Überlegungen spielen allerdings
bei praktischen Differentialgleichungen nicht die Rolle, die man
vermuten könnte.
Statistiken zeigen, daß Nichtinvertierbarkeit der Iterationsmatrix $W$
so gut wie gar nicht vorkommt: es wurde bisher noch nie beobachtet.
Dies liegt jedoch z.T. daran, daß die $LU$-Zerlegung im
Programm TENDLER keine scharfe Rangentscheidung trifft, sondern einfach
u.U. mit einer sehr schlecht konditionierten Matrix weiterrechnet.
Hierbei stellt man sich vor, daß die Kondition einer Matrix ihre
“Nähe” zur Nichtinvertierbarkeit beschreibt.
Diese Deutung kann man streng präzisieren, obwohl sie teilweise irreführend
sein kann, siehe Wilkinson, J.H., Wilkinson (1965).
Eine Rangentscheidung ist aber auch als solches ein numerisch diffiziles
Problem, da die Menge der nichtinvertierbaren Matrizen eine abgeschlossene
Nullmenge in der Menge aller Matrizen ist.</p>
<p><strong>7.</strong> Es ist wichtig zu vermerken, daß erst versucht wird bei Konvergenzversagen
die Iteration bei derselben Stufe neu zu starten und zwar mit aufgefrischter
Iterationsmatrix $W$.
Erst wenn dies nicht mehr möglich ist, d.h. wenn $W$ schon frisch
berechnet wurde, erst dann die Schrittweite $h$ oder die Ordnung $p$
verändert werden.
Im letzteren Falle wird der gesamte Zyklus wiederholt und nicht nur die
betreffende Stufe.
Programmiermässig wäre es genauso gut möglich nur an der besagten Stufe
neu zu beginnen, jedoch hätte man dann den angefangenen, nicht zu Ende
geführten Zyklus, als Zyklus für sich zu betrachten.
Dieser Teilzyklus hat natürlich ein anderes Stabilitätverhalten,
insbesondere ist nun überhaupt nicht mehr garantiert, daß dieser Teilzyklus
$A_\infty[\alpha]$- bzw. $S_\infty[\delta]$-stabil für gewisse
$\alpha$ und $\delta$ ist.
Beispielsweise sind die ersten beiden Stufen des Vefahrens 7.ter Ordnung
die BDF7, welche nicht $D$-stabil sind und schon erst recht nicht
$A_\infty[\alpha]$-stabil.
Allerdings bedeutet ein Wechsel der Schrittweite $h$ oder der Ordnung $p$
ohnehin einen Wechsel zu einem mehrstufigen Verfahren, nicht notwendig
zyklisch.</p>
<p>Die Programme DIFJMT, <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a> und ODIOUS sind ebenfalls, wie das Programm
TENDLER, vollständig zyklusweise orientiert.
Dennoch ist es wichtig den folgenden Sachverhalt deutlich zu machen:
Das Wiederholen eines Zykluses, inklusive der dazu benötigten Interpolation,
ist nicht aufwendig, vorausgesetzt, daß dies nicht ständig passiert.
Aufwendiger ist, daß eine starke Pro- oder Degression der Schrittweite $h$
zu verändertem Konvergenzverhalten der Korrektoriteration führt,
insbesondere ist u.U. die Iterationsmatrix $W$ erneut zu faktorisieren.
Ein Wiederholen einer einzigen Stufe innerhalb der Formeln von
<a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>
setzt eine Differenzentabelle, oder eine sonstige extra Verwaltung für die
skalierten Ableitungswerte $z_{m\ell+i}=hf_{m\ell+i}$, voraus.
Dies geschieht weder in den Programmen DIFJMT und <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a>, noch in dem
Programm TENDLER.
Denn dies würde zusätzlichen Verwaltungsaufwand erfordern und zusätzlichen
Speicherplatz beanspruchen, von grundsätzlichen theoretischen Bedenken
einmal ganz abgesehen, welche gegen ein solches Vorgehen sprechen.
Die skalierten Ableitungswerte $z_{m\ell+i}=hf_{m\ell+i}$ werden innerhalb
eines Zykluses lediglich als Hilfsgrößen betrachtet und bei Beginn eines
neuen Zykluses einfach überschrieben.</p>
<p>Das Programm TENDLER macht von den $z_{m\ell+i}$ bzgl. der Interpolation
keinerlei Gebrauch.
Das Programm <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a> verwendet die Werte $z_{m\ell+i}$ bei der Interpolation,
aus dem einfachen Grund, weil eine entsprechend hohe Differenz $\nabla^{k+1}y$
überschrieben wurde und nun restauriert werden muß.
Dies geschieht unter Zuhilfenahme der Beziehung</p>
<div class=math>
$$
    \nabla^py\approx p\cdot\left(hf-\sum_{i=1}^{p-1}{1\over i}\nabla^iy\right),
$$
</div>
<p>wegen</p>
<div class=math>
$$
    {1\over h}\sum_{i=1}^\infty {1\over i} \nabla^i y = \dot y.
$$
</div>
<p>Es sei $E$ der Shiftoperator und $D$ der Differentiationsoperator.
Die obige Gleichung ist richtig, wegen</p>
<div class=math>
$$
    E = e^{hD} = {1\over1-\nabla}, \qquad\hbox{also}\qquad
    hD = -\ln(1-\nabla)
       = \nabla+{\nabla^2\over2}+{\nabla^3\over3}+\cdots{} ,
$$
</div>
<p>bei rein formaler Rechnung, die sich aber streng begründen lässt.
Die obige Approximation ist in dem Programm TENDLER vollständig überflüssig,
aufgrund einer verschiedenen Organisation der Differenzentabelle der
einzelnen Stufen.
In dem Programm <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">STINT</a> ist diese Rechnung nötig bei einem zurückgewiesenen
Zyklus, falls kurz vorher die Schrittweiten- und Ordnungssteuerung,
oder der Benutzer, eine Veränderung der Schrittweite erzwangen, insbesondere
falls vorher die Ordnung höher war.</p>
<p>Weiterhin ist das Durchlaufen dreier Stufen in einem Zyklus vom Wesen her
u.U. einfacher und effizienter, als die dreifache Ausführung eines
einstufigen Verfahrens.
Dies wurde auch durch empirische Untersuchungen z.T. erhärtet,
siehe <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a>.
Schließlich sind Zurückweisungen ohnehin die Ausnahme, denn es ist eine der
Hauptzwecke der Schrittweiten- und Ordnungssteuerung genau dies zu erreichen.
Dennoch ist i.d.R. der benötigte Speicherplatz für zyklische lineare
Mehrschrittverfahren in linearen Termen der Dimension $n$ der
Differentialgleichung höher, als bei einstufigen linearen
Mehrschrittverfahren.
Dies natürlich i.d.R. nur, falls die Schrittweite geändert werden soll,
sonst gilt dies so ohne weiters nicht.</p>
<h2>5. Verhinderung langsamer Konvergenz in TENDLER<a id=LangsameKonvergzenz></a></h2>
<blockquote>
<p>I appeal to my colleagues to remember that in any field of numerical
computation, technical papers are often less influential than
computer programs!</p>
<p><a href="https://en.wikipedia.org/wiki/Nick_Trefethen">Ll.N. Trefethen</a> (1985)</p>
</blockquote>
<p>Nach erfolgreichem Abschluß der Korrektoriteration, wird die Funktion
<code>setconv()</code> aufgerufen, welche anhand der Anzahl der benötigten Iterationen
und aufgrund vergangener Konvergenzbeobachtungen, mitentscheidet, ob und
wie, eine Refaktorisierung der Iterationsmatrix $W=I-h\gamma J$
vorzunehmen ist.
Dies geschieht in Form von Ansammeln von Minuspunkten, man vgl. hier
auch <a href="https://www.amazon.de/-/en/TeXbook-Donald-Knuth/dp/0201134489">Knuth (1986)</a>, <a href="https://web.math.ucsb.edu/~bigelow/books/texbook.pdf">PDF</a>.</p>
<p>Gelingt die Konvergenz des Korrektors gleich im ersten Iterationschritt,
so werden alle bisher angesammelten Minuspunkte vergessen, da jetzt
angenommen wird, daß die Konvergenz genügend schnell stattfindet.
Bei drei Iterationen bis zur Konvergenz, oder aber bei “großer”
Konvergenzrate, werden “viele” Minuspunkte aufgerechnet, andernfalls
werden “wenige” Minuspunkte aufgesammelt.</p>
<p>Überschreitet nun die Summe der Minuspunkte eine gewisse Grenze an maximal
möglichen Minuspunkten, nämlich <code>MAXSLOW</code>, so wird die Sperrvariable
<code>problem</code> aktiviert und die Jacobimatrix $J$ wird nun berechnet und
anschliessend die Iterationsmatrix $W=I-h\gamma J$ refaktorisiert.
Nebenläufig sei erwähnt, daß die Funktion <code>setconv()</code> selber keine
Berechnungen oder Faktorisierungen durchführt, sondern nur
entsprechende Markierungen setzt.</p>
<p>Wie üblich wird für statistische Zwecke gezählt, wie häufig durch diese
Maßnahme Einfluß auf die Iterationsmatrix $W$ und damit auf die
Konvergenz des modifizierten Newton-Kantorovich Verfahrens, genommen wird.
Gleichzeitig kann damit erkannt werden, wie wirkungsvoll dieser Teil
der Konvergenzüberwachung arbeitet.
Derzeitige Erfahrungen lassen erkennen, daß dieser Test bei
vernachlässigbaren Kosten, eine lohnenswerte Veränderung darstellt.</p>
<p>Die augenblickliche Gewichtung der Minuspunkte ist wie folgt:
9 Minuspunkte für dreifache Iteration, 9 Minuspunkte für zweifache
Iteration mit einer Konvergenzrate größer 0.09 und sonst bei lediglich
zweifacher Iteration ein einziger Minuspunkt.
Ein Eingriff, also ein Verändern der Sperre <code>problem</code> und der
Statusvariablen <code>iweval</code>, geschieht bei insgesamt 18 Minuspunkten.</p>
<h2>6. Der Hindmarsh-Test im Programm TENDLER<a id=HindmarshTest></a></h2>
<p>Hindmarsh, Alan C.
Dieser Test ist natürlich nicht von Hindmarsh originär neu erfunden worden,
jedoch um einen Namen zu haben, sei dieser Test im weiteren so genannt.
Hindmarsh hat dennoch diesen Test in vielen Punkten verfeinert und in dem
Programm GEAR erfolgreich angewendet.
Um auch ein theoretisches Verständnis für diesen Test zu erhalten, folgen
nun einige Bemerkungen.</p>
<p>Es soll hier auch um die Beantwortung der folgenden beiden Fragen gehen:</p>
<ol>
<li>Gegen welchen Wert konvergiert das modifizierte Newton-Kantorovich-Verfahren,
wenn man unendlich lange iterieren würde, bei genügend kleiner
Differenz $\mathopen|H-\tilde H\mathclose|$ und</li>
<li>in welcher Beziehung steht dieser Grenzwert mit dem Werten
aus vorhergehenden Schritten?</li>
</ol>
<p>Wendet man sich dem skalaren und autonomen Testproblem $\dot y=\lambda y$
zu und benutzt man als Prädiktor das explizite Euler-Verfahren</p>
<div class=math>
$$
    y_{n+1} = y_n + hf_n
$$
</div>
<p>und als
Korrektor das implizite Euler-Verfahren</p>
<div class=math>
$$
    y_{n+1} = y_n + hf_{n+1},
$$
</div>
<p>und behandelt man das dabei auftretende Nullstellenproblem, welches in diesem
Falle sogar linear ist, mit dem modifizierten Newton-Kantorovich-Verfahren</p>
<div class=math>
$$
    y^{\nu+1}_{n+1} = y^\nu_{n+1} - W^{-1}Fy_{n+1}^\nu,
    \qquad\hbox{mit}\quad Fy_{n+1} = (1-H)y_{n+1} - y_n,
$$
</div>
<p>so gelten die Ableitungen, wie untenstehend.
Man beachte, daß natürlich das unmodifizierte Newton-Kantorovich-Verfahren die
Lösung des Nullstellenproblem $Fy_{n+1}=(1-H)y_{n+1}-y_n=0$, in einem
Iterationsschritt, bis auf Rundungsfehler sofort exakt liefern
würde.
Die Iterationsmatrix $W$ ist hier $W=1-\tilde H$.
Man berechnet nun für das modifizierte Newton-Kantorovich Iterationsverfahren</p>
<div class=math>
$$
    y_{n+1}^1 = y_{n+1}^0 - {(1-H)y_{n+1}^0 - y_n\over1-\tilde H}
    % = \biggl(1 - {1-H\over1-\tilde H}\biggr)y_{n+1}^0 + {1\over1-\tilde H}y_n
    = {H-\tilde H\over1-\tilde H}y_{n+1}^0 + {1\over1-\tilde H}y_n.
$$
</div>
<p>Dies zeigt schon im wesentlichen folgendes: Der Hindmarsh-Test ist
sinnvoll, da er testet in wie weit sich $H$ und $\tilde H$,
also $h\gamma$ und $\tilde h\tilde\gamma$ entfernt haben,
seit der letzten Refaktorisierung der Iterationsmatrix $W$, hier also
der Reziprokenbildung.
In den Programmen GEAR, EPISODE und LSODE, in denen keine Jacobimatrix $J$
separat gespeichert wird, kann man also aus $H-\tilde H$, den Faktor $J$
herausfaktorisieren.
In dem Programm TENDLER ist dieses Ausklammern, aufgrund der gesonderten
Speicherung von $J$, nicht so einfach möglich.
Hier sind dann weitere Überprüfungen nötig, z.B. durch Betrachten der
Konvergenzgeschwindigkeit, was auch tatsächlich getan wird.</p>
<p>Interessanter ist nun, daß es sich bei der obigen Gleichung um eine
eingliedrige Rekurrenzgleichung handelt der Form $a_{n+1}=pa_n+q$,
mit der allgemeinen Lösung</p>
<div class=math>
$$
    a_{n+1} = p^{n+1}a_0 + \sum_{i=0}^n p^{n-i}q.
$$
</div>
<p>Man ersetze 1 durch $\nu+1$ und 0 durch $\nu$.
Der Wert</p>
<div class=math>
$$
    p = {H-\tilde H\over1-\tilde H},
$$
</div>
<p>ist für genügend kleinen Zähler stets kleiner als eins zu kriegen und
es gilt dann näherungsweise</p>
<div class=math>
$$
    \sum_{i=0}^n p^i = {1-p^{n+1}\over1-p} \approx 1,
    \qquad\hbox{falls}\quad p\approx 0.
$$
</div>
<p>Aufgrund dieser Herleitung wird nun verständlich den Wert</p>
<div class=math>
$$
    q = {1\over1-\tilde H}y_n
$$
</div>
<p>grob als Näherung für die Lösung der impliziten Gleichung mit dem
Newton-Kantorovich Iterationsverfahren anzusehen, unter den oben erwähnten,
stark vereinfachenden Voraussetzungen.</p>
<p>Der Fall $W=I$, also Picard Iteration, führt direkt auf</p>
<div class=math>
$$
    y^{\nu+1}_{n+1} = Hy^\nu_{n+1}+y_n
$$
</div>
<p>und damit auf</p>
<div class=math>
$$
    y_{n+1}^{\nu+1} = H^{\nu+1}y_{n+1}^0 + \biggl(\sum_{i=0}^\nu H^{\nu-i}\biggr)y_n,
    \qquad\hbox{also}\qquad
    y_{n+1}^{\nu+1}\approx H^{\nu+1}y_{n+1}^0 + {y_n\over1-H}.
$$
</div>
<p>Man ersieht natürlich sofort, daß $\mathopen|H\mathclose|&lt;1$ eine notwendige
und hinreichende Bedingung für Konvergenz ist.
Beachtenswert ist hier, daß der erste Iterationsschritt genauer geworden
wäre, bei Verwendung eines nicht konsistenten Prädiktors.
Dies gilt natürlich ersteinmal nur für diese Testgleichung.</p>
<p>Die Verallgemeinerung auf den $n$-dimensionalen Fall mit $\gamma\ne0$,
also für ein echt implizites Verfahren, ist nun einfach.
Der Vollständigkeit halber sei dieses Ergebnis hier kurz aufgeschrieben.</p>
<p>Hat man vorgelegt $y_{n+1}=\gamma hf(y_{n+1})+\psi$ und betrachtet man
die Testgleichung $f=Jy$, mit einer Diagonalmatrix $J$, so geht man analog
wie oben vor.
Man setzt $H=hJ$, $\tilde H=\tilde h\tilde J$ und die Iterationsmatrix $W$
ist $W=I-\tilde\gamma\tilde H$.
Das zu lösende Gleichungssystem ist weiter $Fy_{n+1}=(I-\gamma H)y_{n+1}-\psi$
und man erhält dann</p>
<div class=math>
$$
    y^{\nu+1}_{n+1} = W^{-1}(\gamma H-\tilde\gamma\tilde H)y^\nu_{n+1} + W^{-1}\psi.
$$
</div>
<p>Hier wäre $p=W^{-1}(\gamma H-\tilde\gamma H)$ und $q=W^{-1}\psi$.</p>
<p>Für die Picard Iteration, also $\tilde H=\bf 0$ und somit $W=I$, ergibt sich</p>
<div class=math>
$$
    y^{\nu+1}_{n+1} = \gamma Hy_{n+1}^\nu + \psi
$$
</div>
<p>und daher</p>
<div class=math>
$$
    y^{\nu+1}_{n+1} = (\gamma H)^{\nu+1}y_{n+1}^0
        + \biggl(\sum_{i=0}^\nu (\gamma H)^i\biggr)\psi
    \overset{(\nu\to\infty)}{\rightarrow} (I-\gamma H)^{-1}\psi.
$$
</div>
<p>Konvergenzbedingung für die <a href="https://de.wikipedia.org/wiki/Neumann-Reihe">Neumannsche Reihe</a> ist natürlich
$\rho(\gamma H)&lt;1$, welches für genügend kleine Schrittweite $h$
immer zu erreichen ist.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://de.wikipedia.org/wiki/Carl_Gottfried_Neumann">Neumann, Carl Gottfried (1832–1925)</a></li>
</ol>
<p>Um den 40%/100%-Test in dem Programm TENDLER besser zu verstehen,
seien hier zur Illustriation genauere numerische Werte geliefert.
Für die BDF sieht man in der nachstehenden Tabelle, wie sich
aufeinander folgende Werte $\gamma_p$, für $p=1,\ldots,6$ verhalten.</p>
<table>
<thead>
<tr>
<th>$p$</th>
<th>$\gamma_p$</th>
<th>$\gamma_p $</th>
<th>$\gamma_{p+1}/\gamma_p$</th>
<th>$\gamma_p/\gamma_{p+1}$</th>
<th>$1.1\gamma_{p+1}/\gamma_p$</th>
<th>$1.1\gamma_p/\gamma_{p+1}$</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
<td>0.67</td>
<td>1.50</td>
<td>0.73</td>
<td>1.65</td>
</tr>
<tr>
<td>2</td>
<td>0.67</td>
<td>2/3</td>
<td>0.82</td>
<td>1.22</td>
<td>0.90</td>
<td>1.34</td>
</tr>
<tr>
<td>3</td>
<td>0.55</td>
<td>6/11</td>
<td>0.88</td>
<td>1.15</td>
<td>0.97</td>
<td>1.27</td>
</tr>
<tr>
<td>4</td>
<td>0.48</td>
<td>12/25</td>
<td>0.91</td>
<td>1.10</td>
<td>1.00</td>
<td>1.21</td>
</tr>
<tr>
<td>5</td>
<td>0.44</td>
<td>60/137</td>
<td>0.93</td>
<td>1.07</td>
<td>1.03</td>
<td>1.18</td>
</tr>
<tr>
<td>6</td>
<td>0.41</td>
<td>60/147</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
</tr>
</tbody>
</table>
<p>Es wird jetzt deutlich, wie in gewisser Hinsicht günstig der Wert 30%
bei dem Hindmarsh-Test im Programm GEAR gewählt ist.
Man beachte, daß wenn die Schrittweite von der
Schrittweiten- und Ordnungssteuerung geändert wird, sich diese um mindestens
10% geändert hat.
Dieser Mindestanstieg der Schrittweite wird auch in den meisten anderen
Programmen, basierend auf den BDF, wie <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a>, EPISODE, GEAR und LSODE,
gefordert.
Für die zyklischen Formeln von J.M. Tendler erhält man leicht anders aussehende
Verhältnisse.
U.a. ist die Mindestschrittweitenvergrößerung, die in der
Schrittweiten- und Ordnungssteuerung gefordert wird, leicht größer.</p>
<h2>7. Der Konvergenztest im Programm STINT<a id=Konvergenztest_in_STINT></a></h2>
<p>Nachdem nun dargestellt wurde, wie in dem Programm TENDLER der
Konvergenztest durchgeführt wird, ist es von Interesse, wie in
anderen Programmen dieser Test durchgeführt wird.
Zudem wurde auch schon deutlich gemacht, daß es Kritikpunkte an bisherigen
Konvergenztests gab, hier ist wieder
<a href="https://doi.org/10.1137/0901005">Shampine (1980)</a> aufzuführen.
Auch in dem Program STINT ist der Konvergenztest ein einflußreiches
Segment, welches dazu dient festzustellen, wann die Korrektoriteration
abgebrochen werden kann.
Da jeder Iterationsschritt eine Funktionsauswertung und eine
Normauswertung benötigt, stellt er einen rechenintensiven Part des
gesamten Programmes dar.</p>
<p>Bei diesem Test wird nun geprüft, ob die gewichtete Korrektur, also das
Pseudoresiduum für die $z$-Iterierten, genügend klein ist.
Sei nun $\delta_{m\ell+i}^\nu$ die gewichtete Norm dieses Pseudoresiduums
im $\nu$-ten Iterationsschritt, also</p>
<div class=math>
$$
    \delta_{ml+i}^\nu
    = \mathopen\|z^{\nu+1}_{m\ell+i} - z^\nu_{m\ell+i}\mathclose\|_w
    = \left\| W^{-1} \left[
        hf(t_{ml+i}, {\mskip 3mu}y_{ml+i}^\nu) - z_{ml+i}^\nu \right] \right\|_w,
$$
</div>
<p>wobei $y_{ml+i}^\nu$ und $z_{ml+i}^\nu$ entsprechend die $\nu$-ten
Iterierten von $y_{ml+i}$ bzw. $h\dot y_{ml+i}$ sind
und $|\cdot |_w$ die gewichtete RMS-Norm bezeichnet.
In dem Programm STINT wird die gewichtete RMS-Norm benutzt zu</p>
<div class=math>
$$
    \mathopen\|y\mathclose\|_w
    = \sqrt{{1\over n}\sum_{i=1}^n \left({y_i\over w_i}\right)^2}.
$$
</div>
<p>$z^\nu$ wird hierbei durch Erfülltsein der Formel $y=\gamma z+\psi$
berechnet, also $z=(y-\psi)/\gamma$.
Polynomiale Extrapolation wird für die Bestimmung der nullten Iterierten
verwendet.
Diese Aufgabe wurde schon vom Prädiktor übernommen.
Sei nun weiter</p>
<div class=math>
$$
    c_\nu = \max\left\{  {9 \over 10}c_{\nu-1},{\mskip 3mu}
             \left(\delta_{ml+i}^\nu\over\delta_{ml+i}^{\nu-1}\right)^2
             \right\}, \qquad\hbox{mit}\quad\nu \gt  1
$$
</div>
<p>die modifizierte Konvergenzrate zwischen der $(\nu-1)$-ten
und $\nu$-ten Iterierten.
Es wird der folgende empirisch bestimmte Faktor</p>
<div class=math>
$$
  \tau = {1 \over 2} \cdot {1 \over c_{1,p+1}/\alpha_{11}}
          \cdot {\varepsilon \over p+2},
$$
</div>
<p>im Konvergenztest verwendet, wobei $\varepsilon$ die vom Anwender
vorgegebene Fehlertoleranz pro Schritt ist und $p$ die Ordnung des benutzten
Verfahrens ist.
Es ist</p>
<div class=math>
$$
    c_{i,p+1} = {1\over (p+1)!} C_{p+1,k}\pmatrix{\alpha\cr \beta\cr},
$$
</div>
<p>der Fehlerfaktor der ersten Stufe.
Die Vektoren $\alpha$ und $\beta$ kennzeichnen wieder die Koeffizienten
des linearen Mehrschrittverfahrens (pro Stufe), und
$C_{p+1,k}\in\mathbb{Z}^{(p+2)\times(2k+2)}$ ist die Konsistenzmatrix.</p>
<p>Es wird nun angenommen, daß der Korrektor konvergierte, falls</p>
<div class=math>
$$
    \delta_{ml+i}^\nu{\mskip 5mu}\cdot{\mskip 5mu}\min\{ 1,{\mskip 5mu}\sqrt{2c_\nu} \} \le \tau.
    \tag{Kgz}
$$
</div>
<p>Man beachte, daß hierbei $c_0$ die Konvergenzrate der
vorherigen Stufe des Zykluses ist.
Wenn jetzt die obige Bedingung (Kgz) erfüllt ist, so geht man davon aus,
daß Korrektorkonvergenz erreicht wurde oder doch zumindestens im nächsten
Schritt erreicht wird.
Auf jeden Fall wird dann das modifizierte
Newton-Kantorovich Verfahren abgebrochen.</p>
<p>Bei der Überprüfung der Norm des Pseudoresiduums $\delta_{m\ell+i}^\nu$
geht man davon aus, daß lineare Konvergenz vorliegt.</p>
<p>Der Faktor $\sqrt2$ im Konvergenztests (Kgz) wird nur deswegen angewendet,
um sicherzustellen, daß im nächsten Iterationsschritt die Ungleichung
$\delta_{ml+i}^{\nu+1}\le\tau$ auf alle Fälle erfüllt ist.
Dadurch, daß der nächste Iterationsschritt nicht mehr durchgeführt wird,
erspart man sich weiteres Auswerten der Funktion $f$.</p>
<p>Weiter wird in der Ungleichung $\tau$ und nicht $\varepsilon$ verwendet.
Dies dient dazu die Gleichung etwas genauer zu lösen als gefordert.
Die Wahl von $\tau$ geht auf <a href="https://en.wikipedia.org/wiki/C._William_Gear">C.W. Gear</a> zurück und
wurde beibehalten, da sie zufriedenstellend arbeitet.</p>
<p>Der Nenner des zweiten Faktors bei $\tau$ wurde deswegen eingefügt,
weil in (Phase 2) der Fehlerkontrolle dieser Term ebenfalls durchgelassen
wird. Daher sollte der Korrektor diese Fehler auch tolerieren.
In der Phase 1 der Fehlerkontrolle wird jedoch nicht der Quotient
${c_{1,p+1}/\alpha_{11}}$ verwendet, sondern $\delta_{\ell-1,p+1}$.
Da die Kehrwerte $\alpha_{11}/c_{1,p+1}$ stets größer sind als die
Werte $\delta_{\ell-1,p+1}$ und zwar für alle Ordnungen $p=1,\ldots,7$,
fällt damit der Faktor $\tau$ korrekt aus.
Ausserdem gilt</p>
<div class=math>
$$
    {\alpha_{11}\over c_{1,p+1}} \gt  {\alpha_{ii}\over c_{i,p+1}},
    \qquad i=2,3,4, \quad p=1,\ldots,7,
$$
</div>
<p>außer für die Ordnung $p=6$.
Hier gilt</p>
<div class=math>
$$
    {\alpha_{11}\over c_{1,p+1}} \lt  {\alpha_{33}\over c_{1,p+1}},\qquad p=6.
$$
</div>
<p>Jedoch sind in diesem Ausnahmefall die beiden Werte in den Vorkommastellen
gleich und unterscheiden sich lediglich geringfügig in der ersten
Nachkommastelle.</p>
<p>Im Programm STINT kommen u.a. die folgenden Strategien zur
Anwendung:</p>
<ol>
<li>Es werden grundsätzlich niemals mehr als drei Iterationen ausgeführt.
Nach diesen drei Iterationen wird weiterverfahren, so, als ob der
Korrektor nicht konvergierte.
An dieser Stelle wird dann die Iterationsmatrix neuberechnet, falls sie noch
von vorherigen Zyklen stammen sollte.
Anschliessend wird erneut maximal 3-mal iteriert.</li>
<li>Wurde das Newton-Kantorovich-Verfahren schon wiederholt, so wird die
Schrittweite um den Faktor $3/10$ vermindert.
Dies natürlich nur, falls die minimal mögliche Schrittweite dabei nicht
unterschritten wird.
Die Iterationsmatrix $W$ wird neu berechnet.
Dabei braucht die Jacobimatrix $J$ nicht mehr erneut ausgewertet werden,
da sie in der Matrix <code>rj</code> gespeichert wird.
Dies kostet zwar nicht unerheblich Speicherplatz, beschleunigt aber die
Integration merkbar.</li>
<li>Sollte nun tatsächlich die Schrittweite die minimal mögliche nicht
überschreiten, so wird die Ordnung auf 2 gesetzt, falls sie vorher größer
als 2 war und auf 1 gesetzt, falls sie vorher 2 gewesen ist.</li>
</ol>
<p>In den Fällen (2) und (3) wird der gesamte Zyklus wiederholt.
Im Gegensatz zu einstufigen Verfahren, wo lediglich die nicht akzeptierte
Stufe erneut durchlaufen wird, wird hier der komplette Zyklus neu
berechnet.
Schrittzurückweisungen sind jedoch die Ausnahme, sodaß dieser Punkt nicht
in dem starken Maße Bedeutung hat, wie man möglicherweise befürchten
könnte.
Programmiermässig wäre es möglich nur die nicht akzeptierte Stufe zu
wiederholen, jedoch wird dies aus theoretischen Überlegungen heraus nicht
genutzt.
Jedoch sprechen auch Gründe wie Effizienz und Speicherplatzbedarf gegen eine
stufenweise Wiederholung.
Dies gilt auch für das Programm TENDLER, nicht jedoch für das Programm
ODIOUS.
Sollte sich der Zyklus nicht wiederholen lassen, d.h. die Ordnung
<em>und</em> die Schrittweite sind so klein als möglich, so wird das
Unterprogramm verlassen und eine entsprechende Markierung in den
Rückgabeparametern gesetzt.
Die obigen Überprüfungen werden bei den Marken 780 und 800 durchgeführt.</p>
<p>Die Jacobimatrix $J=f_y$ der Differentialgleichung wird nur an drei Stellen
ausgewertet und zwar einmal natürlich ganz zu Anfang, also beim
allerersten Aufruf des Unterprogrammes STINT.
Dann jedoch nur, falls $h{\beta_{ii}/\alpha_{ii}}$ sich um mehr als 80%
geändert hat, oder aber falls wie in (1), nach drei Iterationen der
Konvergenztest nicht zufriedenstellend verlaufen war und gleichzeitig dabei
die Iterationsmatrix noch aus vergangenen Zyklen stammte.</p>
<h2>8. Der Konvergenztest im Programm DIFSUB<a id=Konvergenztest_in_DIFSUB></a></h2>
<p>Voreingestellt ist die Rechnung in doppelter Genauigkeit, jedoch wird
die Invertierung der Iterationsmatrix $W=I-h\gamma J$ in einfacher
Genauigkeit vorgenommen.
Dies hat den Vorteil, daß weniger Speicherplatz in Anspruch genommen
werden muß.
Die Multiplikation mit der Inversen erfordert jedoch stets die Umwandlung
von einfacher Genauigkeit in doppelte Genauigkeit.
Das ist nicht unaufwendig, wenn es wiederholt durchgeführt werden muß.
Diese Rückmultiplikation wird natürlich wesentlich häufiger
durchgeführt, als die Invertierung.
<a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">C.W. Gear</a> wählt absichtlich den Weg der
Invertierung der Matrix anstatt einer $LU$-Zerlegung, zur Vermeidung des
Aufrufes eines Unterprogrammes, hier der Faktorisierung der Matrix $W$.
Die Berechnung des Matrix-Vektor Produktes erfolgt inline.</p>
<p>Diese Programmiertaktik ist nicht nachahmenswert.
Die Rechenarbeit steckt in Gleitkommaoperationen und nicht in der
Verwaltung des Kellerspeichers und der Übergabe von Parametern.</p>
<p>Die Anzahl der Gleitkommaoperationen ist bei einer Invertierung für jede
Dimension $n\ge2$ größer als bei einer $LU$-Zerlegung.
Jedoch verfolgt <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a> in seinem Programm DIFJMT den gleichen
eingeschlagenen Weg, wie in dem Programm <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a>.
In dem Programm STINT wird dann allerdings, wie in dem Programm GEAR, die
Invertierung ersetzt durch eine $LU$-Zerlegung nach dem Programm von
<a href="https://dl.acm.org/doi/pdf/10.1145/361284.361297">Moler (1972)</a>.
Die Programme EPISODE, GEAR, LSODE, $\ldots$ wählen alle den Weg der
$LU$-Zerlegung.</p>
<p>In dem Programm <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a> wird die Iteration abgebrochen, falls jede
Komponente des Pseudoresiduums kleiner ausfällt als</p>
<div class=math>
$$
    \tau = {\varepsilon\over(2p+4)n} \mathtt{YMAX(I)}.
$$
</div>
<p>In <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">DIFSUB</a> wird also die Iteration abgebrochen, falls gilt</p>
<div class=math>
$$
    \left\| y_{n+1}^{\nu+1} - y_{n+1}^\nu \right\|_w {\mskip 5mu}\le{\mskip 5mu}
    {\varepsilon\over 2n(p+2)}.
$$
</div>
<p>Dabei ist $w$ ein Gewicht und es wird die gewichtete Maximumnorm benutzt,
also</p>
<div class=math>
$$
    \mathopen\|y\mathclose\|_w = \max_{i=1}^n \left|y_i\over w_i\right|.
$$
</div>
<p>Diese gewichtete Maximumnorm ist insoweit erstaunlich, als für die
Fehlerkontrolle und die Schrittweiten- und Ordnungssteuerung eine
andere Norm benutzt wird, nämlich</p>
<div class=math>
$$
    \mathopen\|y\mathclose\|_w = \sqrt{\sum_{i=0}^n\left(y_i\over w_i\right)^2}
$$
</div>
<p>Der programmiermässige Vorteil liegt nun darin, daß wenn auch nur
einmal festgestellt wird, daß keine Konvergenz in allen Komponenten
vorliegen kann, der Konvergenztest sofort abgebrochen werden kann.
Da der Test natürlich komponentenweise von unteren Indices zu größeren
Indices vollzogen wird, genügt schon das Nichterfülltsein des obigen
Konvergenzkriteriums für eine einzige Komponente.
Diese Möglichkeit der geringen Effizienzsteigerung wird im Programm
DIFSUB nicht genutzt.
Jedoch ist der Fall der nicht-akzeptierten Korrektoriteration so selten,
was natürlich auch sehr erwünscht ist, daß dieser geringe Rechenvorteil
selbstverständlich nicht ins Gewicht fällt und daher von neueren
Programmen auch nicht mehr so durchgeführt wird.
Dies erleichtert auch sehr den Austausch von Normen.
Auch auf Vektorrechnern hätte dieses Vorgehen u.U. Nachteile.</p>
<p>Konvergenzraten werden in dem Programm DIFSUB nicht gebildet und daher
auch nicht benutzt.
Sehr wohl werden Konvergenzraten in den Programmen EPISODE, GEAR, LSODE,
$\ldots$ benutzt.
Man vgl. hier auch <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356478">Shampine (1978)</a>
für weitere Bemerkungen bzgl. der Evolution von Programmen, maßgeblich an
der dortigen Stelle Adams-Verfahren.</p>
<p>Es kommen nun folgende Heuristiken zur Anwendung:</p>
<ol>
<li>Wird selbst nach drei Iterationen mit Hilfe des modifizierten
Newton-Kantorovich-Verfahrens die oben angegebene Bedingung nicht erfüllt,
so wird beim ersten Konvergenzversagen die Jacobimatrix $J$ der
Differentialgleichung und insbesondere die Iterationsmatrix
$W=I-h\gamma J$ neu berechnet.</li>
<li>Bei zwei Konvergenzversagen hintereinander wird die
Schrittweite $h$ geviertelt.</li>
<li>Ist die Schrittweite minimal und wurde beim modifizierten
Newton-Kantorovich-Verfahren schon die Iterationsmatrix $W$ neu berechnet,
so wird das Unterprogramm DIFSUB mit einer entsprechenden
Fehlermarkierung in einer Statusvariablen verlassen.</li>
</ol>
<p>Beim Picardschen Iterationsverfahren, bei der die Jacobimatrix $J$ nicht
benutzt wird, entfällt die Möglichkeit der Auffrischung der
Iterationsmatrix und es wird daher sofort die Schrittweite $h$ um den
Faktor vier vermindert.
Da in dem Programm DIFSUB lediglich Speicherplatz für eine einzige
Matrix bereitsteht, können auch die beiden Matrizen $W$ und $J$ nicht
getrennt behandelt werden, wie dies in dem Programm TENDLER geschieht.</p>
<p>Wird also in den Programmen DIFSUB, EPISODE, GEAR, LSODE, $\ldots$ eine
Auffrischung auch nur einer der Matrizen $J$ oder $W$ nötig, so müssen
beide Matrizen neu berechnet werden.
In diesem Zusammenhang sind die Bemerkungen von
<a href="https://dl.acm.org/doi/pdf/10.1145/355780.355784">Enright (1978)</a> von Interesse, aber auch Shampine äußert
sich zu der getrennten oder gemeinsamen Speicherung der Matrizen in
<a href="https://doi.org/10.1137/0901005">Shampine (1980)</a>,
<a href="https://www.ams.org/journals/mcom/1981-36-154/S0025-5718-81-99841-0/S0025-5718-81-99841-0.pdf">Shampine (1981a)</a> und
<a href="https://www.researchgate.net/publication/303335517_Type-insensitive_ode_codes_based_on_implicit_aa-stable_formulas">Shampine (1982b)</a>.</p>
<h2>9. Der Konvergenztest in DSTIFF, GEAR und EPISODE<a id=Konvergenztest_in_GEAR></a></h2>
<p>Es sei nocheinmal darauf hingewiesen, daß der Faktor $\tau$ sehr stark
direkt auf die Effizienz des gesamten Programmes einwirkt.
Zum einen bestimmt ja der Korrektor ausschließlich die Anzahl der
Funktionsauswertungen.
Muß nun aufgrund eines sehr strengen Konvergenztests mehr als nur
einmal iteriert werden, so muß auch entsprechend häufig die
Differentialgleichung, also die Funktion ausgewertet werden.
Zum anderen müssen für den Konvergenztest selber mindestens eine Norm
ausgerechnet werden.
Dies ist nicht selten aufwendiger, als die Auswertung der Funktion selber.
Für das Schalten sogar müssen insgesamt zwei Normen berechnet werden,
wenn der Benutzer den Schaltmodus angewählt hat.
Der aufwendigste Teil jedoch ist die Rücksubstitution.
Hier müssen quadratisch in der Dimension, also $n^2$ viele arithmetische
Operationen durchgeführt werden.
Die Aufmerksamkeit dem man deswegen diesem kritischen Parameter schenkt,
ist aus diesen Gründen daher sehr verständlich.</p>
<p><strong>1.</strong> Der eigentliche, zentrale Test lautet in dem Programm GEAR:</p>
<div class=math>
$$
    \delta^\nu\cdot\min\left(1,\sqrt2{\mskip 3mu}c_\nu\right)
        \le{\varepsilon\over2(p+2)}\xi,
$$
</div>
<p>wobei $\xi$ eine verfahrensabhängige Konstante ist, die also abhängt von
der Ordnung $p$ und den Koeffizienten der Formeln, hier also entweder
Adams-Formeln oder BDF.
$c_\nu$ ist hierbei eine modifizierte Konvergenzrate, welche ganz zu Anfang
der Integration auf 1 gesetzt wird.</p>
<p>Programmiert wird dieser Test in der Form</p>
<div class=math>
$$
    \hat c_\nu \gets \max\left[{9\over10}c_{\nu-1},
        \left(\hat\delta^\nu\over\hat\delta^{\nu-1}\right)^2\right],\qquad
        \hbox{falls}\quad\nu\gt 1,
$$
</div>
<p>mit</p>
<div class=math>
$$
    \hat\delta^\nu \gets \mathopen\|y^\nu-y^{\nu-1}\mathclose\|_w^2, \qquad
    \mathopen\|y\mathclose\|_w = \sqrt{\sum_{i=1}^n\left(y_i\over w_i\right)^2}.
$$
</div>
<p>Der Konvergenztest gilt als bestanden, wenn</p>
<div class=math>
$$
    \hat\delta^\nu\cdot\min\left(1,2\hat c_\nu\right)
        \le n\left(\mathtt{tq[4]}{\mskip 3mu}\varepsilon\right)^2,
$$
</div>
<p>mit</p>
<div class=math>
$$
    \mathtt{tq[4]} \gets {\mathtt{tq[2]}\over2(p+2)},\qquad\mathtt{tq[2]}\gets\mathtt{pertst[}p,\mathtt{meth},2\mathtt{]}
$$
</div>
<p>und der Konstantentryade $\mathtt{pertst[][][]}\in\mathbb{C}^{12\times2\times3}$.
Dabei wird $2c^\nu\delta^\nu$ als eine Schätzung der Korrektur für
die nächste Iteration angesehen. Auch hier ist natürlich
$c^\nu$ am Anfang der Iteration nicht bekannt.
Deswegen wird der letzte Wert $c^\nu$ vom vorherigen Schritt genommen.</p>
<p><strong>2. Konvergenztest.</strong>
Der Konvergenztest im Programm EPISODE ist gegenüber dem Test im Programm GEAR
leicht verändert.
Dies liegt zum einen daran, daß das Programm EPISODE Formeln verwendet, bei
denen die Koeffizienten von den Schrittweitenverhältnissen abhängig sind
und desweiteren, weil es Intention bei der Entwicklung des Programmes
EPISODE war, möglichst große Schrittweitenänderungen zuzulassen.</p>
<p>Sei $c_\nu$ die modifizierte Konvergenzrate (und nicht das Quadrat
der modifizierten Konvergenzrate).
Aktualisiert wird diese Größe durch die Rechenvorschrift</p>
<div class=math>
$$
    c_\nu\gets\max\left({1\over\sqrt{10}},
        {\mskip 3mu}{\delta^\nu\over\delta^{\nu-1}}\right),\qquad\nu\ne0
$$
</div>
<p>und die gewichtete Norm des Pseudoresiduums $\delta^\nu$ im $\nu$-ten
Iterationsschritt werde berechnet durch</p>
<div class=math>
$$
    \delta^\nu \gets \mathopen\|y^\nu-y^{\nu-1}\mathclose\|_w, \qquad
    \mathopen\|y\mathclose\|_w = \sqrt{{1\over n}\sum_{i=1}^n\left(y_i\over w_i\right)^2}.
$$
</div>
<p>Der eigentliche Konvergenztest gilt als erfolgreich bestanden, wenn</p>
<div class=math>
$$
    \delta^\nu\cdot\min\left(1,c_\nu\right)\le{\varepsilon\over10}\xi.
$$
</div>
<p>Der Wert $\xi$ ist wiederum eine vom Verfahren und von den
Schrittweitenverhältnissen abhängige Größe.
Erneut wird $c_\nu$ ganz zu Anfang der Integration auf 1 gesetzt.
Auffälligste Veränderung ist hierbei der Faktor $1/\sqrt{10}$, welcher in
der Tat dafür sorgt, daß sich die modifizierte Konvergenzrate wesentlich
schneller an die wahren Konvergenzverhältnisse anpassen kann.
Bei Probeläufen mit dem Programm TENDLER wurde gefunden, daß dies von
großem Vorteil ist.
Das Programm LSODAR verwendet hier entsprechend den Faktor $1/5=0.2$ und
nicht mehr $3/\sqrt{10}\approx0.95$.
Diese Beobachtung scheint daher universellere Gültigkeit zu haben.</p>
<p>Das Programm DSTIFF verwendet genau wie das Programm GEAR diesen Test.
Das Programm DSTIFF ist dem Programm GEAR überhaupt sehr ähnlich.
Vereinfacht ausgedrückt ist das Programm DSTIFF gleich dem Programm GEAR
mit veränderten Formeln und gewissen veränderten Abstimmungsparametern.</p>
<h2>10. Der Konvergenztest im Programm LSODE<a id=Konvergenztest_in_LSODE></a></h2>
<p>In dem Programm LSODE nun wurde dieser Test noch weiter abgeändert.
Der Wert $\delta^\nu$ wird wie oben berechnet, aber es wird jetzt
die gewichtete RMS-Norm statt der diskreten ${\cal L}_2$-Norm verwendet.
Auf Konvergenz wird jetzt wie folgt getestet:</p>
<div class=math>
$$
    {3\over 2} c^\nu\delta^\nu p! {\mskip 3mu} k_{m+1} \ell_m
    {\mskip 5mu} \le {\mskip 5mu} {\varepsilon \over 2(p+2)} {\mskip 5mu}\: .
$$
</div>
<p>Hierbei ist $k_{m+1}$ der lokale Diskretisierungsfehler
des benutzten Verfahrens und $\ell_m$ ist die letzte
Komponente des Korrektor-Vektors $\ell$ (Nordsieck-Darstellung).
Sollte nun die Konvergenzrate $c^\nu$ in der zweiten oder
dritten Iteration größer als 2 sein, so geht das Programm LSODE
davon aus, daß die Iteration divergiert.</p>
<p>Die Beschreibung der Konvergenztests in den Programmen LSODA und LSODAR
wird später, bei der Beschreibung dieser beiden Programme, gegeben.
Sie sind jedoch dem obigen Test sehr ähnlich.
Dennoch wurden geringfügige Modifikationen durchgeführt.
Insbesondere betrifft dies den Aspekt der Rechnung nahe der
Maschinengenauigkeit und natürlich bzgl. des Schaltens.
Bei beiden Programmen ist es möglich, daß der Konvergenztest eine
Entscheidung trifft, ob und wie geschaltet wird.</p>
<p>Es gibt gute Gründe, warum gerade nur maximal dreimal iteriert wird.
Umfangreiche Testläufe, u.a. auch von verschiedensten Autoren,
ergaben das folgende Bild:</p>
<ol>
<li>Falls vier oder mehr Iterationen erlaubt sind, ist die Anzahl der
Fälle, in denen keine Konvergenz erzielt wurde nicht wesentlich geringer und</li>
<li>falls nur zwei Iterationen erlaubt sind, ist die Anzahl der Fälle,
wo keine Konvergenz erreicht wurde jedoch bedeutend größer.</li>
</ol>
<p>Zu diesen Ergebnissen beachte man auch den <a href="https://eklausmeier.goip.de/blog/2025/10-28-praediktor-korrektor-verfahren-und-verallgemeinerungen#AnzahlNewtonIterationen">Startfehler-Satz von Liniger</a>.
Dies deckt sich mit Erfahrungen wie sie auch C.W. Gear gemacht hat,
siehe Gear (1971a), <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">Gear (1971b)</a>,
<a href="https://www.amazon.com/Numerical-Differential-Equations-Automatic-Computation/dp/0136266061">Gear (1971c)</a>.</p>
<p>Bibliographisch:</p>
<ol>
<li>Gear, Charles William: “Experience and Problems with the
Software for the Automatic Solution of Ordinary Differential Equations”,
in “Mathematical Software”, ACM Monograph Series, Editor John Rice,
Academic Press, New York London, 1971, pp.211–227</li>
<li>Gear, Charles William: “<a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">The Automatic Integration of
Ordinary Differential Equations</a>”,
CACM, Vol 14, No 3, March 1971, pp.176–179</li>
<li>Gear, Charles William: “<a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">Algorithm 407.
DIFSUB for Solution of Ordinary Differential Equations [D2]</a>”,
CACM, Vol 14, No 3, March 1971, pp.185–190</li>
<li>Gear, Charles William: “<a href="https://www.amazon.com/Numerical-Differential-Equations-Automatic-Computation/dp/0136266061">Numerical Initial Value
Problems in Ordinary Differential Equations</a>”, Prentice-Hall,
Englewood Cliffs (New Jersey), 1971, <em>xvii</em>+253 S., <a href="https://www.scribd.com/doc/28941688/Numerical-Initial-Value-Problems-in-Ordinary-Differential-Equations">Kopie</a></li>
</ol>
<h2>11. Die Korrektoriteration im Programm DDASSL<a id=Konvergenztest_in_DDASSL></a></h2>
<p><strong>1.</strong> Die grundlegende Idee beim Programm <a href="https://www.netlib.org/ode/ddassl.f">DDASSL</a> zur Lösung von
differential-algebraischen Gleichungen der Form</p>
<div class=math>
$$
    F(t,y,\dot y)=0,\qquad y(t_0)=y_0,\qquad \dot y(t_0)=\dot y_0,
$$
</div>
<p>besteht darin, $\dot y$ zu ersetzen durch eine Näherung für die
Ableitung unter Zuhilfenahme zurückliegender Werte, also Werten,
welche schon berechnet wurden.
Für Diskretisierungen solcher Gleichungen vgl. man auch
<a href="https://doi.org/10.1109/TCS.1979.1084697">Liniger (1979)</a>.
Beispielsweise löst man bei der Ordnung 1, in jedem Zeitschritt das
nicht-lineare Gleichungssystem</p>
<div class=math>
$$
    F\left(t_n,y_n,{y_n-y_{n-1}\over h_n}\right) = 0,
$$
</div>
<p>nach $y_n$ auf.
Für die Approximationen der Ableitung $\dot y$ werden in dem Programm
<a href="https://www.netlib.org/ode/ddassl.f">DDASSL</a> die BDF$i$, mit $i=1,\ldots,5$, verwendet.
Nach einem gelungenen Schritt wird überprüft, ob die Ordnung oder die
Schrittweite verändert werden soll, in Abhängigkeit der berechneten
Näherungslösung an zurückliegenden Punkten.</p>
<p>Die Darstellung der Lösung erfolgt in Form von modifizierten
rückwärtsgenommenen Differenzen, wobei zusätzlich darauf geachtet wird,
daß der führende Koeffizient bei der BDF, bei wechselnden
Schrittweitenverhältnissen, immer gleich bleibt.</p>
<p>Durch Diskretisierung der Ableitung $\dot y$ mittels der BDF, entsteht
ganz allgemein das Problem, das i.d.R. nicht-lineare Gleichungssystem</p>
<div class=math>
$$
    F(t,y,\hat\alpha y+\beta) = 0
$$
</div>
<p>in jedem Zeitschritt zu lösen.
$\hat\alpha$ ist eine skalare Konstante, welche sich verändert kann, falls
sich die Ordnung oder die Schrittweite ändert.
$\beta$ ist ein Vektor, welcher Werte an zurückliegenden Zeitpunkten
zusammenfasst.
Die obige nicht-lineare Gleichung wird durch ein gedämpftes,
modifiziertes Newton-Kantorovich Iterationsverfahren, in jedem Zeitschritt
gelöst.
Das Iterationsverfahren hat mithin die Form</p>
<div class=math>
$$
    y^{\nu+1} = y^\nu-\omega W^{-1}F(t,y^\nu,\hat\alpha y^\nu+\beta).
$$
</div>
<p>Die Iterationsmatrix $W$ ist gegeben durch</p>
<div class=math>
$$
    W = {\partial\over\partial y}F(t,y,\hat\alpha y+\beta)
      = \left(F_t,{\mskip 3mu}F_y,{\mskip 3mu}F_{\dot y}\right)\pmatrix{0\cr I\cr \hat\alpha I\cr}
      = F_y+\hat\alpha F_{\dot y}.
$$
</div>
<p>$\omega$ ist ein skalarer Dämpfungsparameter und definiert durch</p>
<div class=math>
$$
    \omega = \cases{
        {2/(1+\hat\alpha/\alpha)}, & falls $\hat\alpha\ne\alpha$, \cr
        1,                         & falls $\hat\alpha=\alpha$. \cr
    }
$$
</div>
<p><strong>2.</strong> Die Modifizierung des gedämpften Newton-Kantorovich Iterationsverfahrens
besteht darin, daß die Iterationsmatrix $W$ auch noch in nachfolgenden,
und häufiger auch noch in zahlreichen weiteren Zeitschritten, benutzt wird.
Das Newton-Kantorovich Iterationsverfahren benutzt ein und dieselbe
Iterationsmatrix $W$, über alle Iterationsinidizes $\nu$, im Gegensatz
zum Newton-Raphson Iterationsverfahren, welches auch bei jedem neuen
Iterationsschritt $\nu$, die Iteratiosmatrix $W=W(y^\nu)$ neu
berechnen und faktorisieren würde.</p>
<p>Die Iterationsmatrix $W$ wird im Programm <a href="https://www.netlib.org/ode/ddassl.f">DDASSL</a> genau dann neu berechnet
und faktorisiert, falls</p>
<ol>
<li>die Iteration nicht konvergiert und dabei die Iterationsmatrix
“alt” war,</li>
<li>wenn sich die führenden Koeffizienten der benutzten Formeln,
welche von der Schrittweite $h$ abhängen, “stark” geändert haben.
Dies enstpricht dem üblichen Hindmarsh-Test.</li>
</ol>
<p>Die Iterationsmatrix $W$ wird dabei in der Form
$(1/\hat\alpha)F_y+F_{\dot y}$ gespeichert.
Zur Lösung der linearen Gleichungssysteme werden LINPACK-Routinen
benutzt, sowohl für vollbesetzte, als auch für schwachbesetzte Systeme
mit Bandstrukturen.</p>
<p>Als Vektornorm benutzt das Programm <a href="https://www.netlib.org/ode/ddassl.f">DDASSL</a> die RMS-Norm, welche berechnet
wird in der Form</p>
<div class=math>
$$
    \mathopen\|x\mathclose\| = M\sqrt{{1\over n}\sum_{i=1}^n\left(x_i\over Mw_i\right)^2}
        = \sqrt{{1\over n}\sum_{i=0}^n\left(x_i\over w_i\right)^2}
$$
</div>
<p>und $\mathopen|x\mathclose|=0$, falls $M=0$.
Das letzte ist natürlich äquivalent mit $x_1=x_2=\ldots=x_n=0$.
Der Gewichstvektor $w$ bestimmt sich zu</p>
<div class=math>
$$
    w_i = \varepsilon_r\mathopen|y_i\mathclose|+\varepsilon_a,
$$
</div>
<p>wobei $\varepsilon_a$ die geforderte absolute Genauigkeit ist und
$\varepsilon_r$ die vom Benutzer angeforderte relative Genauigkeit
bezeichnet.
Der Gewichstvektor hängt also von der Genauigkeitsforderung des Benutzers
ab.
Das Programm LSODE benutzt die gleiche Norm wie das Programm DDASSL,
während hingegen die beiden Programme LSODA und LSODAR eine gewichtete
Maximumnorm verwenden und dies um eine damit passende Vektornorm zu einer
entsprechend gewählten Matrixnorm zu erhalten.</p>
<p>Wird mehr als einmal iteriert, so wird eine Konvergenzrate $\rho$ berechnet,
mit</p>
<div class=math>
$$
    \rho = \left(\|y^{\nu+1}-y^\nu\|\over\|y^1-y^0\|\right)^{1/\nu}
$$
</div>
<p>Es sei ferner</p>
<div class=math>
$$
    s = \cases{
        {\rho/(1-\rho)}, &falls $\rho\le9/10$ , \cr
        100,             &sonst . \cr
    }
$$
</div>
<p>Auf Konvergenz, oder genauer auf Abbruch der Iteration, wird wie folgt
getestet.
Zuerst wird überprüft, ob</p>
<div class=math>
$$
    \mathopen\|y^{\nu+1}-y^\nu\mathclose\| \le 100 u \mathopen\|y^0\mathclose\|.
$$
</div>
<p>Hierbei ist $u$, wie üblich, die kleinste positive Zahl, die auf der
Rechenanlage darstellbar ist, sodaß $1+u&gt;1$ gilt.
Anschliessend wird getestet, ob $\rho&gt;9/10$ ausfällt.
Ist dies der Fall, so wird die Iteration abgebrochen, und es wird also
dann angenommen, daß keine Konvergenz statt gefunden hat.
Zum Schluß des eigentlichen Tests
Schließlich folgt ggf. der zentrale Test, ob</p>
<div class=math>
$$
    s \mathopen\|y^{\nu+1}-y^\nu\mathclose\| \le {33\over100}.
$$
</div>
<p>Iteriert wird maximal 4 Male.
Nach der vierten Iteration wird ebenfalls Divergenz angenommen.</p>
<p>Bibliographisch:</p>
<ol>
<li>Liniger, Werner: “<a href="https://doi.org/10.1109/TCS.1979.1084697">Multistep and One-Leg Methods for
Implicit Mixed Differential Algebraic Systems</a>”,
IEEE Transactions on Circuits and Systems, Vol CAS-26, No 9,
September 1979, pp.755–762</li>
</ol>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/11-18-tendler-3-der-praediktor</link>
		<guid>https://eklausmeier.goip.de/blog/2025/11-18-tendler-3-der-praediktor</guid>
		<title>TENDLER: 3. Der Prädiktor</title>
		<category>mathematics</category>
		<category>C / C++</category>
		<pubDate>Tue, 18 Nov 2025 13:30:00 +0100</pubDate>
		<description><![CDATA[
<p>Fortsetzung der TENDLER Programmbeschreibung.</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-16-tendler-1-grobaufbau-und-prinzipielle-ueberlegungen">TENDLER: 1. Grobaufbau und prinzipielle Überlegungen</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms">TENDLER: 2. Benutzung des Programmes</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-18-tendler-3-der-praediktor">TENDLER: 3. Der Prädiktor</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-30-tendler-4-die-korrekturiteration">TENDLER: 4. Die Korrektoriteration</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2026/03-10-tendler-5-die-fehlerkontrolle">TENDLER: 5. Die Fehlerkontrolle</a></li>
</ol>
<hr>
<ul>
<li><a href="#Einbau">1. Einbau neuer zyklischer Formeln in das Programm TENDLER</a></li>
<li><a href="#Alternativen">2. Alternativen zum Prädiktor</a></li>
<li><a href="#Verwebung">3. Verwebung von Prädiktor und Korrektor</a></li>
<li><a href="#Speicherung">4. Speicherung des Prädiktors im Programm TENDLER</a></li>
</ul>
<p><a href="https://www.amazon.de/Computer-Network-Design-Donald-Calahan/dp/0070096015">Donald A. Calahan (1972)</a>, S.236, schreibt hierzu:</p>
<blockquote>
<p>Without prediction $\ldots$ typically 3–5 corrector iterations are
required $\ldots$ to satisfy the integration formula $\ldots$
With prediction, convergence is likely in one iteration, although
an additional iteration may be necessary to check for convergence.
This halving of computational effort should be adequate for
incorporating a predictor in an integration algorithm.</p>
</blockquote>
<p>Analog äußern sich
<a href="https://computing.llnl.gov/sites/default/files/200849.pdf">Byrne/Hindmarsh (1987)</a>:</p>
<blockquote>
<p>Regardless of the choice of iteration, an initial guess $\bf y_{n(0)}$
is always needed.
This is easily obtained by appealing to any of the explicit linear
multistep methods.</p>
</blockquote>
<p>Der Prädiktor besorgt den für die Korrektoriteration nötigen ersten
Startwert.
Es wird begründet, warum es lohnenswert ist, speziell gewählte Formeln für
den Prädiktor zu verwenden und nicht die Iteration mit anderen,
möglicherweise leichter zu berechnenden Werten zu starten.</p>
<p>Man kann leicht beweisen, daß die Prädiktorformeln nicht <a href="https://en.wikipedia.org/wiki/Zero_stability"><em>D</em>-stabil</a> zu sein
brauchen, wenn mindestens einmal mit einer <a href="https://en.wikipedia.org/wiki/Zero_stability"><em>D</em>-stabilen</a> Korrektorformel iteriert
wird, bzw. das Restverfahren <a href="https://en.wikipedia.org/wiki/Zero_stability"><em>D</em>-stabil</a> ist.
Tatsächlich sind die in dem <a href="https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms">Programm TENDLER</a> verwendeten
Prädiktorformeln ab der Ordnung höher oder gleich drei, <em>nicht</em> mehr $D$-stabil.
Diese Formeln dürfen daher nicht <em>alleine</em> verwendet werden.
Aufgezeigt wird, an welchen Stellen des Programmes TENDLER die
Prädiktorformeln eingehen.
Zudem wird beschrieben, wie man neue Formeln in das Programm
TENDLER einsetzen kann und wie schließlich die Formeln des
Prädiktors in dem Programm algorithmisch verwendet wurden.
Es zeigt sich dabei, daß die Prädiktor- und Korrektorformeln eng miteinander
verwoben sind.
Deutlich wird, daß ein Wechseln der Formeln einfach vonstatten gehen kann.
Einfache, aber auch nicht-triviale Beispiele werden zur Illustration
vorgerechnet.
Es ist, anders als in dem Programm <a href="https://dl.acm.org/doi/suppl/10.1145/356502.356499/suppl_file/534.gz">STINT</a>, nicht nötig und erforderlich
gewisse Besonderheiten eines sehr kompakten Speicherschemas zu beachten und
einzuhalten.</p>
<p>Hinzugefügt werden sollte allerdings, daß während der Entwicklungszeit der
Programme <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">DIFJMT</a> und <a href="https://dl.acm.org/doi/suppl/10.1145/356502.356499/suppl_file/534.gz">STINT</a>, d.h. etwa im Zeitraum von 1970–1978,
Speicherersparnisse im Bereich von ca. 1000 Bytes als durchaus lohnenswert
erachtet wurden.</p>
<p>Bibliographisch:</p>
<ol>
<li><a href="https://history.siam.org/pdfs2/Hindmarsh_returned_%20SIAM_copy.pdf">Alan C. Hindmarsh</a> (*1942)</li>
<li><a href="https://www.mathgenealogy.org/id.php?id=66">George Dennis Byrne</a> (1933–2024), vgl. <a href="https://www.danielsfamilyfuneral.com/obituaries/George-D-Byrne?obId=33288403">Nachruf</a></li>
<li>Byrne/Hindmarsh (1987): Stiff ODE solvers: <a href="https://doi.org/10.1016/0021-9991(87)90001-5">A review of current and coming attractions</a>, Journal of Comp. Physics, Vol. 70, Issue 1, May 1987</li>
<li>Donald Calahan: “<a href="https://www.amazon.de/Computer-Network-Design-Donald-Calahan/dp/0070096015">Computer Aided Network Design&amp;</a>rdquo;,
Second Edition, McGraw-Hill, New York St. Louis Düsseldorf $\ldots$, 1972, <em>xvii</em>+350~S.</li>
</ol>
<h2>1. Einbau neuer zyklischer Formeln in das Programm TENDLER<a id=Einbau></a></h2>
<p>Der Einbau <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">neuer Formeln</a> in das Programm TENDLER ist problemlos möglich.
Hat man neue Formeln gefunden, mit denen man praktische Untersuchungen
durchführen will, so bietet es sich an, diese in das Programm
TENDLER einzusetzen.
Hierzu sind zweierlei Dinge zu beachten.
Zum einen sind die Formeln selber auszuwechseln und zum anderen die den
Formeln zugehörigen Konstanten, wie Fehlerkonstanten und Anzahl der
Stufen pro Zyklus.</p>
<p><strong>1. Konstanten.</strong> Es sollte allerdings deutlich darauf hingewiesen werden, daß zahlreiche
Konstanten, Strategiefaktoren und dergleichen, z.B. beim Konvergenztest,
bei der Fehlerkontrolle, bei der Schrittweiten- und Ordnungssteuerung, zwar
nicht direkt abhängig sind von der Ordnung und den benutzten Formeln, jedoch
das Zusammenwirken aller Einflußgrößen in einem größerem Programm noch zu
wenig verstanden ist, als daß man uneingeschränkt sagen könnte, daß
diese Konstanten heuristischen Ursprunges gänzlich unabhängig sind von den
verwendeten Verfahren.
Man wird wohl erwarten, daß sich mit veränderten Formeln auch diese ändern
könnten.
Wie sich diese nun aber ganz genau ändern, kann im voraus nicht allgemein
gesagt werden.
I.d.R. ergeben sich diese Konstanten und Strategiefaktoren durch
genaues Beobachten von zahlreichen Testläufen mit der verschiedenstartigen
Kombination von Steuergrößen und durch Plausibilitätsüberlegungen.
Wenn man so will, ergibt sich diese Sammlung von Konstanten, die keine
echten “Naturkonstanten” als solche sind, ähnlich wie ein bisher
unbekannter Beweis: nicht alleine durch
Deduktion aus einem fertigen Axiomensystem.</p>
<p>Um diesen Punkt zu verdeutlichen, ein Beispiel.
Der Konvergenztest ist in dem Programm TENDLER gänzlich <em>unabhängig</em>
von den Eigenschaften der zugrunde liegenden zyklischen Formeln, jedoch
abhängig von der benutzergewählten Genauigkeitsanforderung $\varepsilon$.</p>
<p>In dem Programm STINT ist der Konvergenztest <em>abhängig</em> von den Fehlerfaktoren
der Stufen.
Für das Programm TENDLER wurde vermeint, daß die <em>Unabhängigkeit</em> des
Konvergenztests von den Fehlerfaktoren ein Vorteil ist.
Gilt dies nun auch rückwärts für das Programm STINT?
Wohl kaum, denn dort wurde gefunden, daß es sich genau umgekehrt verhält,
daß also die Aufnahme der Fehlerfaktoren mit in den Konvergenztest
günstig ist, siehe <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">Tendler/Bickart/Picel (1978)</a>, Seite 350ff. und im Report Tendler/Bickart/Picel (1976), S.25, S.39.</p>
<p>Die Programme STINT und TENDLER verwenden die <em>völlig gleichen</em>
zyklischen Formeln, nämlich die sieben steif-stabilen, zyklischen Formeln
von J.M. Tendler, siehe <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>.
Allerdings differieren die Schrittweiten- und Ordnungssteuerungen beider
Programme und eben die Konvergenztests nicht unerheblich.</p>
<p>Diese Diskrepanz ist nicht gänzlich überraschend.
Ähnliche Beobachtungen wurden auch mit den beiden Programmen DIFSUB und GEAR
gemacht.
Auch hier verwenden die beiden Programme die völlig gleichen Formeln
in gleicher Darstellung (Nordsieck-Darstellung), jedoch ist das Programm
GEAR das deutlich effizientere.</p>
<p>Wenn also hier von problemloser Integration von neuen Formeln gesprochen
wird, dann sind diese Bemerkungen wohl zu beachten.
Verschiedene Programme basierend auf ein und derselben Formel, können sich
als sehr verschieden erweisen, man vergl. auch die beiden Programme
<a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">DIFSUB</a> und <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a>.
Obwohl hier schon die programmiermässigen Unterschiede als solches
größer sein müssen, aufgrund der verschiedenen Darstellungsform der
Lösungen und deren Ableitungen oder Differenzen, verwenden jedoch beide
Programme vom Wesen her die gleiche Formelfamilie.</p>
<p>Ähnliche Überlegungen gelten für <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">DIFBDF</a> vs. <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">DIFSUB</a>,
siehe <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>,
und BDF-ODIOUS vs. <a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a>,
siehe die Dissertation von Peter Tischer von 1983.</p>
<ol>
<li>Tischer, Peter E.: “The Cyclic Use of Linear Multistep
Formulas for the Solution of Stiff Differential Equations”, Ph.D. Thesis,
Department of Computer Science, Monash University, Clayton, Victoria,
Australia, August 1983, <em>x</em>+180 S.</li>
<li>Tendler, Joel Marvin und Bickart, Theodore A. und Picel, Zdenek:
“STINT: STiff ordinary differential equations INTegrator. Program and User Manual”,
Electrical and Computer Engineering Department, Syracuse University,
Syracuse, New York 13210, USA, and Department of Electrical Engineering,
Delft University of Technology, Delft, The Netherlands,
Technical Report TR-76-12, December 1976, <em>ii</em>+85 pages</li>
</ol>
<p><strong>2. Wechselwirkungen.</strong> Nun soll an dieser Stelle eine grundsätzliche Problematik beleuchtet werden.
Mit der Veränderung gewisser Segmente im Programm TENDLER und einer dann
sich anschließenden Überprüfung der Wirksamkeit der Veränderung,
kann folgendes Phänomen zu Tage treten.
Eine Veränderung, z.B. ein Einbau neuer Formelpaare, von der man aufgrund
von Vorüberlegungen eine signifikante Effizienzsteigerung erwartet, kann
dann bei einem Test entgegengesetztes Verhalten zeitigen, d.h.
Leistungseinbußen aufweisen.
Der Schluß, daß die Veränderung, z.B. die neuen Formeln, per se
effizienzmindernd wirken, ist jedoch so ohne weitere Überlegungen nicht
statthaft.
Aufgrund des nicht gänzlich verstandenen Zusammenwirkens der verschiedenen
Segmente im Programm TENDLER muß man in die Erwägungen mit einbeziehen,
daß eine Veränderung des einen Segmentes, eine Veränderung eines anderen
Segmentes notwendig machen könnte.
Beispielsweise könnte der Einbau neuer Formeln es viel geeigneter erscheinen
lassen, die Schrittweiten- und Ordnungssteuerung grundsätzlich zu verändern.
Fände man Formeln, die sagen wir bis zur Ordnung 10 noch
$A_\infty^0$-stabil,
kleinste Fehlerkonstanten besäßen und noch viel mehr, so wäre der Trend der
Schrittweiten- und Ordnungssteuerung zu niedrigen Ordnungen möglicherweise
hinderlich.
Dieser eben skizzierte Gedankengang bzgl. der Schrittweiten- und
Ordnungssteuerung wurde auch tatsächlich so einmal duchprobiert von
<a href="https://doi.org/10.1137/0906063">Gupta (1985)</a> im Programm DSTIFF.</p>
<p>Es wurden die niedrigen Ordnungen nicht mehr so stark bevorzugt.
Der erhoffte Erfolg blieb jedoch aus, siehe <a href="https://doi.org/10.1137/0906063">Gupta (1985)</a>.</p>
<p>Die Erläuterungen anhand des Programmes TENDLER haben lediglich
illustrativen Charakter.
In den Programmen <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">DIFSUB</a>, GEAR, EPISODE, <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a> und zahlreichen anderen
Programmen ist das Zusammenspiel der verschiedenen Segmente nicht mehr oder
minder verstanden.</p>
<p>Es tritt nun jedoch noch eine gravierende Zusatzschwierigkeit hinzu.
Glaubt man nun, daß eine Veränderung des einen Segmentes im Programm
TENDLER auch eine Veränderung eines anderen Segmentes bedingt, und verfährt
man auch entsprechend, d.h. modifiziert man auch weitere Segmente und stellt
nun eine Effizienzverbesserung fest, so wäre der Umkehrschluß, daß diese
Veränderung nun als solches effizienzanhebend sei, ebenfalls nicht zulässig.
Würde man beispielsweise bei einem Einbau neuer Formeln gleichzeitig
auch die Fehlerkontrolle und die Schrittweiten- und Ordnungssteuerung ändern,
so wäre der Gedanke, daß die neuen Formeln nun günstiger wären, als die
<a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">zyklischen Formeln</a> von Joel Marvin Tendler, möglicherweise
naheliegend, aber dennoch irrig.
Hinter alle dem könnte sich letztlich die banale Erkenntnis
verbergen, daß ein Programm umso besser wird, desto mehr Pflege man ihm
angedeihen läßt.</p>
<p>Denn möglicherweise hätte man das alte Programm in seiner Wirksamkeit
ebenso verbessern können und zwar ohne an den Einbau neuer Formeln überhaupt
zu denken.</p>
<p>Diese Ausführungen sollen nun nicht den Eindruck erwecken, als ob ein Einbau
neuer Formeln als solches schädlich sei.</p>
<p>Die Ausführungen beleuchten lediglich, daß gewisse Folgerungen aus Testläufen,
mögen sie auch noch so umfangreich sein,
vorsichtig gezogen werden müssen,
damit sie nicht in die falsche Richtung weisen.
Hinter alle dem steckt das grundsätzliche Dilemma, daß gewisse statistische
Tests nicht anwendbar sind, falls Variablen nicht voneinander unabhängig
sind.</p>
<h2>2. Alternativen zum Prädiktor<a id=Alternativen></a></h2>
<p><strong>1.</strong> Um einen groben Überblick zu bekommen, ob es sich überhaupt rechnet einen
Prädiktorschritt der Korrektoriteration voranzustellen, seien einige
Erläuterungen gegeben.
Bekanntermaßen kann selbst ein Korrektor mit leerem Stabilitätsgebiet,
mit Hilfe eines vorgeschalteten Prädiktors im Falle eines
Picard-$P(EC)^i\{E\}$-Verfahrens, zu einem Gesamtverfahren werden,
welches einen akzeptablen Stabilitätsbereich aufweist.
Insbesondere kann durch geschickte Wahl eines Prädiktors, der
Stabilitätsbereich eines Picard-$P(EC)^i\{E\}$-Verfahrens vergrößert werden,
siehe <a href="https://www.amazon.de/numerische-Behandlung-gew%C3%B6hnlicher-Differentialgleichungen-Ber%C3%BCcksichtigung/dp/3112728440?__mk_de_DE">Albrecht (1979)</a>, §9.7, S.128–131 und <a href="https://juser.fz-juelich.de/record/842404/files/J%C3%BCl_1274_Albrecht.pdf?version=1">Albrecht (1976)</a>, §9.5.2.</p>
<p>Diese Eigenschaft ist insoweit besonders hervorhebenswert, da für die
$D$-Stabilität eines Picard-$P(EC)^i\{E\}$-Verfahrens die Prädiktorformel
völlig unerheblich ist, insbesondere braucht die Prädiktorformel nicht
selber $D$-stabil zu sein.
Erkennt man nun das Potential der möglichen Effizienzsteigerung und der
Stabilitätsverbesserung durch Benutzung eines Prädiktors, so kann man nach
dem besten unter allen Prädiktoren fragen für einen gegebenen Korrektor.
Oder aber man fragt nach der besten Kombination von
Prädiktor/Korrektor.
“Besser” wäre: größeres Stabilitätsgebiet, besseres Rundungsfehlerverhalten, etc.
Diese Frage wird hier nirgends beantwortet.</p>
<p>Da sich die Picard Iteration (mit $J=0$) als Spezialfall des modifizierten
Newton-Kantorovich Iterationsverfahren auffassen läßt und zusätzlich
die Anzahl der Iterationsschritte beim augenblicklich verwendeten
Newton-Verfahren im Programm TENDLER sehr gering ist (meistens 1, selten 2,
ganz selten 3 und mehr Iterationsschritte), liegt die Vermutung nahe,
daß die Ergebnisse, die für Picard-$P(EC)^i\{E\}$-Verfahren gelten, in
wenn auch abgeschwächter Form, ebenso für das modifizierte
Newton-Kantorovich-$P(EC)^i\{E\}$-Verfahren gelten.
Erneut taucht die Frage auf, welche Kombination von Prädiktor, Korrektor
und Iterationsverfahren unter allen anderen Verfahren das beste und
günstigste ist.</p>
<p>“Besser” hier im Sinne von: Minimierung der Anzahl der Iterationen,
größere Stabilitsgebiete, Rundungsfehlereigenschaften, u.s.w.
Auch diese Frage wird hier nirgends beantwortet.</p>
<p>Nicht selten haben <em>explizite</em> lineare Mehrschrittverfahren erheblich kleinere
Stabilitätsgebiete als (von der Ordnung) vergleichbare <em>implizite</em> lineare
Mehrschrittverfahren.
Dies ist einer der maßgeblichen Gründe für die Verwendung impliziter
linearer Verfahren, anstelle rein expliziter Methoden.</p>
<p>Hinzu kommt ferner, daß die Fehlerkonstanten das implizite Verfahren
favorisieren.
Typisches Beispiel sind hier die Adams-Formeln (Adams/Moulton
vers. Adams/Bashforth).</p>
<p><strong>2.</strong> Es gibt verschiedene Interpretationsmöglichkeiten für den Sinn der
Benutzung eines Prädiktors.
Einmal könnte man denken, daß der Prädiktor die Lösung der
Differentialgleichung “voraussagen” soll.
In diesem Falle könnte man meinen, daß eine explizite Prädiktorformel,
eben aufgrund seines kleinen Stabilitätsbereiches (wenn überhaupt) sehr
ungenaue Voraussagungen macht.
Dem dieser ersten Interpretation mögliche innewohnende Trugschluß, nämlich
instabile Stufe gleich ungenaue Näherungenswerte des gesamten mehrstufigen
Verfahrens, soll hier nicht weiter betrachtet werden.
Ein Picard- oder Newton-$P(EC)^i\{E\}$-Verfahren ist nämlich als
Gesamtverfahren auffaßbar als zusammengesetztes, mehrstufiges Verfahren.
Eine andere Deutungsmöglichkeit liegt darin, daß der Prädiktor möglichst
nahe der Lösung von $y=h\gamma f(y)+\psi$ liegen sollte.</p>
<p>Wegen der ersten Deutungsmöglichkeit könnte man vorschlagen, statt
einer i.a. ohnehin instabilen Prädiktorformel, einfach faute de mieux den
zuletzt akzeptierten Näherungswert für die Lösung der Differentialgleichung
als Startwert für die Iteration zu wählen.
Dieser Vorschlag wird zumeist im Zusammenhang mit dem
Newton-$P(EC)^i\{E\}$-Verfahren gemacht, nicht jedoch im Zusammenhang mit der
Picard Iteration.
Dennoch, aufgrund der engen Verwandtschaft beider Iterationsvorschriften,
scheint es angebracht, diesen Vorschlag des Startwertes anhand der
Picard Iteration zu prüfen, wenn man sich der Beschränkung bewußt ist,
die damit einhergeht.
Hinzu kommt, daß Steifheit und Instabilität von Formeln letztlich aus
gleicher Quelle gespeist werden.</p>
<p>Wählt man das explizite Euler-Verfahren $y_{n+1}=y_n+hf_n$ als Prädiktor
und das implizite Euler-Verfahren $y_{n+1}=y_n+hf_{n+1}$ als Korrektor,
so lieferte für die Differentialgleichung $\dot y=\lambda y$, das
$PECE$-Verfahren die Näherungen</p>
<div class=math>
$$
    y_{n+1}=(1+H+H^2)y_n,
$$
</div>
<p>mit $H=h\lambda$.</p>
<p>Hingegen entartet der Korrektor mit dem Startwert $y_{n+1}^0=y_n$ zum
expliziten Euler-Verfahren, also genau dem Verfahren, dem man durch die
veränderte Wahl eines Startwertes zu entrinnen versuchte.
Dank des $H^2$-Terms hat das $PECE$-Verfahren die Möglichkeit einen
negativen $H$-Wert noch “in's Positive zu ziehen”.
Erwartungsgemäß hat das $PECE$-Verfahren einen größeren Stabilitätsbereich
und dies obwohl der Prädiktor als Einzelverfahren betrachtet, seinen
Stabilitätsbereich schon verlassen haben könnte.
Dieses Verhalten ist typisch für $P(EC)^i\{E\}$-Verfahren.
Bei Verwendung von $y_{n+1}^0=y_n$ und Einsetzung, hat man ohnehin ein neues
explizites Verfahren vor sich, welches mit seiner Konsistenzordnung weit
hinter der Konsistenzordnung des Korrektors abfallen <em>könnte</em> und somit
zahlreiche Picard Iterationen benötigen könnte.</p>
<p>Auch noch von einer anderen Seite wurde dem Prädiktor Aufmerksamkeit
gewidmet.
Tischer/Gupta (1983) (s.u.), §2.5.1, S.10–17, und §3.2, S.38–42, untersuchten, ob die Verwendung
linear impliziter Prädiktoren eine signifikante Leistungssteigerung in dem
Programm ODIOUS bewirken konnte.
Auch mit diesem Prädiktor konnte das Programm ODIOUS basierend auf
den zyklischen Formeln von Tischer (1983) (Dissertation s.o.) und
<a href="https://doi.org/10.1137/0904051">Tischer/Sacks-Davis (1983)</a> das Programm LSODE in
seiner allgemeinen Leistungsfähigkeit nicht klar überbieten.
Dies zeigt, w.o. schon erwähnt, nicht die Untauglichkeit dieser Maßnahme
als solches.
Es deutet jedoch an, daß noch andere Segmente eines Programmes
erheblichen Einfluß auf die Effizienz haben und somit eine einseitige
Konzentration der Anstrengungen auf den Prädiktor, nicht zum erhofften
Ziele führen.</p>
<ol>
<li><p>Tischer, Peter E.: “The Cyclic Use of Linear Multistep
Formulas for the Solution of Stiff Differential Equations”, Ph.D. Thesis,
Department of Computer Science, Monash University, Clayton, Victoria,
Australia, August 1983, <em>x</em>+180 S.</p>
</li>
<li><p>Tischer, Peter E. und Gupta, Gopal K.:
“A Cyclic Method Stiff ODE Solver”, Technical Report 38,
Department of Computer Science, Monash University, Clayton,
Victoria, Australia, June 1983, <em>i</em>+45 S.</p>
</li>
</ol>
<h2>3. Verwebung von Prädiktor und Korrektor<a id=Verwebung></a></h2>
<blockquote>
<p>It may look a bit formidable at first glance; pointers fly most
alarmingly.
$\ldots$ the doubly linked list is the representational technique of choice
in many circumstances.</p>
<p><a href="https://www.amazon.com/Fundamental-Structures-Computer-Science-William/dp/0201087251">W.A. Wulf, M. Shaw, L. Flon, P.N. Hilfinger (1981)</a></p>
</blockquote>
<p><strong>1. Anzahl Stufen pro Zyklus.</strong>
Die Anzahl der Stufen pro Zyklus ist in einem Konstantenvektor abgespeichert,
der z.Z. wie folgt aussieht:</p>
<pre class="line-numbers"><code class="language-C">stgs_per_order[8] = {*,3,3,3,3,4,4,4};
</code></pre>
<p>Die Fehlerfaktoren sind in den beiden Konstantenvektoren abgelegt:</p>
<pre class="line-numbers"><code class="language-C">alfa_div_gamma[8][4] = { ... };
errconst[8] = { ... };
</code></pre>
<p>Für die Fixpunktiteration wird $\gamma_i=\beta_{ii}/\alpha_{ii}$ benötigt,
abgespeichert in <code>beta_div_alfa[8][5]</code>.</p>
<p>Für den Hindmarsh-Test und für die modifizierte Newton-Kantorovich Iteration
wird <code>meanbetalf[8]</code> benötigt, als Mittelwert der $\gamma_i$.
Die hier vorzunehmenden Änderungen hängen allein einzig von den verwendeten
Formeln ab und sind offensichtlich.</p>
<p>Benötigen die Formeln zyklusfremde Ableitungen, wie dies beispielsweise bei
den Formeln von Tischer (1983) (Dissertation) und
<a href="https://doi.org/10.1137/0904051">Tischer/Sacks-Davis (1983)</a>
der Fall ist, bzw. sinngemäß bei den Adams-Formeln, so müssen <code>adapthz()</code>
und <code>newbdf()</code> angepasst werden, damit diese Ableitungen für das neue Gitter
bereitgestellt werden können.</p>
<p>Weiterhin muß in diesem Falle die Funktion <code>actbdft()</code> modifiziert werden,
damit pro erfolgreichem Schritt eine entsprechende Differenzentabelle für
die Ableitungen mit aufgebaut wird.
Diese Änderungen, die über das reine Ändern von Konstanten hinaus gehen,
sind durch entsprechende Kommentare im Programm gekennzeichnet.
U.U. ist auch mehr Speicherplatz bereitzustellen.</p>
<p><strong>2. Schreibweise.</strong> Nicht mehr ganz so offensichtlich sind die Änderungen für die neuen
Formelpaare selber.
Hierzu folgen nun Beispiele, wie anhand konkreter Formeln entsprechende
Werte gesetzt werden müssen.
Es ist zu beachten, daß die einzusetzenden Konstanten vom verwendeten
Prädiktor abhängen.
Hierzu beobachtet man die folgenden Relationen.</p>
<p>Zur notationellen Vereinfachung sei die Funktion $f$ in autonomer
Schreibweise angenommen, und es sei abkürzend geschrieben $z = hf(y).$
Die zugrunde liegende Mehrschrittformel laute</p>
<div class=math>
$$
    \sum_{i=0}^\kappa \alpha_i y_{n+i-\kappa+1}
    = h \sum_{i=0}^\kappa \beta_i f_{n+i-\kappa+1} .
$$
</div>
<p>Mit</p>
<div class=math>
$$
    y_{n+1} = h\gamma f(y_{n+1})+\psi = \gamma z_{n+1}+\psi
$$
</div>
<p>erhält man für den Wert $z_{n+1}$ dann</p>
<div class=math>
$$
    z_{n+1} = {1\over\gamma}(y_{n+1} - \psi),
$$
</div>
<p>insbesondere</p>
<div class=math>
$$
    z_{n+1}^0 = {1\over\gamma}(y_{n+1}^0 - \psi).
$$
</div>
<p>Dies ist die ganz zentrale und entscheidende Formel.</p>
<p>Bei den weiteren Überlegungen wird diese Formel immer wieder auftauchen.
Es gilt $z_{n+1}^0$ zu bestimmen, dabei sollen für $y$ rückwärtsgenommene
Differenzen verwendet werden.</p>
<p>Der Wert $\psi$ sammelt bei einem linearen Mehrschrittverfahren alle
schon vorher berechneten Terme auf, es ist also</p>
<div class=math>
$$
    \psi = {1\over\alpha_i} \sum_{i=0}^{\kappa-1}\left(-\alpha_iy_{n+i-\kappa+1} + h\beta_ihf_{n+i-\kappa+1}\right).
$$
</div>
<p>Berücksichtigt man die Stelle der Stufe innerhalb des Zykluses, so hätte man
zu schreiben</p>
<div class=math>
$$
    \psi_{ij} = {1\over\alpha_{ii}} \sum_{j=-\kappa+i}^{i-1} \left( -\alpha_{ij} y_{m\ell+j} + h \beta_{ij} f_{m\ell+j} \right) .
$$
</div>
<p>Zur Schreibvereinfachung seien Indizes unterdrückt, solange dies nicht
zu Mißverständnissen führen kann.</p>
<p>Weiter sei zur Vereinfachung der Schreibweise folgende Vereinbarung
eingeführt.
Der Term $\psi$, der also die vergangenen Werte der $y_i$ und $z_i$
enthält, wird weiter aufgespalten in die beiden Summanden $\psi_y$
und $\psi_z$, wobei $\psi_y$ die Summe der vergangenen $y_i$ Werte enthält
und $\psi_z$ diejenigen Werte für $z_i$.</p>
<p>Z.B. ist für das implizite Euler-Verfahren $\psi_y=y_n$ und
$\psi_z=0$.</p>
<p>Es folgen nun eine Reihe von Beispielen, die einem das Gefühl vermitteln,
welche Rechnungen durchzuführen sind und wie diese konkret aussehen.
Dabei werden auch nebenbei einige praktische Hinweise gegeben.</p>
<p><strong>3. Beispiel für Ordnung 1:</strong>  Für das implizite Euler-Verfahren</p>
<div class=math>
$$
    y_{n+1} = y_n + hf_{n+1} = y_n + z_{n+1}
$$
</div>
<p>mit dem expliziten Euler-Verfahren $y^0_{n+1}=y_n+z_n$ als Prädiktor ergibt
sich</p>
<div class=math>
$$
    z^0_{n+1}=(y^0_{n+1}-\psi)/\gamma=z_n+0y_n, \hbox{ wegen } \psi=y_n .
$$
</div>
<p><strong>4. Beispiel für Ordnung 2:</strong>  Bei dem Zyklus zweiter Ordnung, bei dem alle Stufen
untereinander gleich sind und zwar gleich der BDF2, gehen die Rechnungen wie
folgt vor sich.
Die BDF2 lautet</p>
<div class=math>
$$
    3y_{n+1}\underbrace{-4y_n+y_{n-1}}_{\displaystyle{-3\psi_y}} = 2z_{n+1}
$$
</div>
<p>und der Prädiktor sei</p>
<div class=math>
$$
    y^0_{n+1} = y_{n-1}+2z_n.
$$
</div>
<p>Es ist also $\gamma=2/3$, und damit rechnet man</p>
<div class=math>
$$
\eqalign{
    z_{n+1}^0 &= {1\over\gamma}(y^0_{n+1}-\psi)\cr
              &= {3\over2}\biggl[(y_{n-1}+2z_n)-{1\over3}(4y_n-y_{n-1})\biggr]\cr
              &= -2y_n+2y_{n-1}+3z_n.\cr
}
$$
</div>
<p>Die führende Stelle ist hier natürlich wieder $p/\gamma$.
Der Anteil mit $y$ in $z^0_{n+1}$ wird umgeformt in die Darstellung
mit Hilfe rückwärtsgenommener Differenzen durch</p>
<div class=math>
$$
    \tilde\alpha = \hat P^\top\alpha =
    \pmatrix{1 & 1\cr 0 & -1\cr}\pmatrix{-2\cr 2\cr} = \pmatrix{0\cr -2\cr}.
$$
</div>
<p><strong>5. Beispiel für Ordnung 3:</strong>  Für die erste Stufe im Zyklus der Ordnung $p=3$,
also BDF3, mit</p>
<div class=math>
$$
    11y_{n+1}\underbrace{-18y_n+9y_{n-1}-2y_{n-2}}_{\displaystyle-11\psi_y}
    = 6z_{n+1}
$$
</div>
<p>und dem Prädiktor</p>
<div class=math>
$$
    y^0_{n+1} = {1\over2}\bigl(-3y_n+6y_{n-1}-y_{n-2}\bigr)+3z_n
$$
</div>
<p>ergibt sich mit $\psi=\psi_y$ und $p/\gamma=11/2$</p>
<div class=math>
$$
\eqalign{
    z_{n+1}^0 &= {1\over\gamma}(y_{n+1}^0-\psi)\cr
        &= {11\over6}\biggl[(-{3\over2}y_n+3y_{n-1}-{1\over2}y_{n-2})
            -{1\over11}(18y_n-9y_{n-1}+2y_{n-2})+3z_n\biggr]\cr
        &= \bigl(-{23\over4}y_n+7y_{n-1}-{5\over4}y_{n-2}\bigr)+{11\over2}z_n.\cr
}
$$
</div>
<p>Schließlich ergibt die Umrechnung in die Darstellung mit Hilfe
rückwärtsgenommener Differenzen</p>
<div class=math>
$$
    \tilde\alpha = \pmatrix{1 & 1 & 1\cr 0 & -1 & -2\cr 0 & 0 & 1\cr}
    \pmatrix{-23/4\cr 7\cr -5/4\cr} = \pmatrix{0\cr -9/2\cr -5/4\cr}.
$$
</div>
<p><strong>6. Beispiel für Ordnung 4:</strong>  Die erste Stufe im Zyklus der Ordnung $p=4$ lautet</p>
<div class=math>
$$
    25y_{n+1}\underbrace{-48y_n+36y_{n-1}-16y_{n-2}+3y_{n-3}}_{=-25\psi_y}
    =12z_{n+1},
$$
</div>
<p>welches natürlich gerade die BDF4 ist.
Hierbei ist der Wert $\gamma$ definiert durch</p>
<div class=math>
$$
    \gamma = {\beta_{n+1}\over\alpha_{n+1}}.
$$
</div>
<p>$\psi_z$ ist Null.
In anderer Formulierung läßt sich die obige Formel also schreiben zu</p>
<div class=math>
$$
    % 25y_{n+1}=12z_{n+1}+25\psi_y\qquad\hbox{also}\qquad
    y_{n+1} = {12\over25}z_{n+1} + \psi_y.
$$
</div>
<p>Mit $z_{n+1}^0 = (y_{n+1}^0-\psi)/\gamma$ und dem Prädiktor für $y_{n+1}^0$ zu</p>
<div class=math>
$$
    y_{n+1}^0 = {1\over3}(-10y_n+18y_{n-1}-6y_{n-2}+y_{n-3})+4z_n,
$$
</div>
<p>ergibt sich jetzt zunächst für den Anteil mit $z$-Werten der entsprechende
Prädiktorwert für $z_{n+1}^0$ zu</p>
<div class=math>
$$
    z_{n+1}^0\bigl|_z = {1\over\gamma}(y_{n+1}^0\bigl|_z-\psi_z)
        = {25\over12}(4z_n-0) = {25\over3}z_n,
$$
</div>
<p>also, wie zu erwarten, der Wert $p/\gamma$, aufgrund der speziellen Wahl des
Prädiktors für $y$.
Dieser Wert, also $25/3$, wird nun abgespeichert in dem Vektor
<code>zpredbeta[3][0][0]</code>.
Für den Anteil mit $y$ erhält man mit der gleichen Überlegung</p>
<div class=math>
$$
\eqalign{
    z_{n+1}^0\bigl|_y &= {1\over\gamma}(y_{n+1}^0\bigl|_y-\psi_y)\cr
        &= {25\over12}\biggl[{1\over3}(-10y_n+18y_{n-1}-6y_{n-2}+y_{n-3})
           -{1\over25}(+48y_n-36y_{n-1}+16y_{n-2}-3y_{n-3})\biggr]\cr
        &= -{197\over18}y_n+{31\over2}y_{n-1}-{11\over2}y_{n-2}
           +{17\over18}y_{n-3}.\cr
}
$$
</div>
<p>Dieser Wert muß jetzt noch in die Darstellung der rückwärtsgenommenen
Differenzen umgeformt werden.</p>
<p>Zwischen der Darstellung in Ordinatendarstellung und Darstellung in Form
rückwärtsgenommener Differenzen herrscht der Zusammenhang $Y=\hat P\nabla Y$,
oder ausgeschrieben</p>
<div class=math>
$$
    \pmatrix{y_n\cr y_{n-1}\cr y_{n-2}\cr \vdots\cr y_0\cr}
    =
    \pmatrix{
        1      &        &           &        & \cr
        1      & -1     &           &        & 0\cr
        1      & -2     & 1         &        & \cr
        \vdots & \vdots & \vdots    & \ddots & \cr
        1      & -n     & n\choose2 & \ldots & (-1)^n\cr}
    \pmatrix{\nabla^0y_n\cr \nabla^1y_n\cr \nabla^2y_n\cr \vdots\cr \nabla^ny_n\cr} .
$$
</div>
<p>Mit dieser Beziehung berechnet man nun, mit den Vektoren</p>
<div class=math>
$$
    Y_n := \pmatrix{y_n\cr y_{n-1}\cr y_{n-2}\cr y_{n-3}\cr}
        \qquad\hbox{und}\qquad
    \alpha := \pmatrix{-197/18\cr 31/2\cr -11/2\cr 17/18\cr}
$$
</div>
<p>und der Gleichungskette</p>
<div class=math>
$$
    z_{n+1}^0 = \alpha^\top Y_n = (\hat P^\top\alpha)^\top \nabla Y_n
        = \tilde\alpha^\top \nabla Y_n,
$$
</div>
<p>schließlich den Wert $\tilde\alpha$ einfach durch
$\tilde\alpha=\hat P^\top\alpha$, also</p>
<div class=math>
$$
    \pmatrix{
        1 &  1 &  1 &  1\cr
        0 & -1 & -2 & -3\cr
        0 &  0 &  1 &  3\cr
        0 &  0 &  0 & -1\cr}
    \pmatrix{-197/18\cr 31/2\cr -11/2\cr 17/18\cr}
    =
    \pmatrix{0\cr -22/3\cr -8/3\cr -17/18\cr}.
$$
</div>
<p>Dieser Wert wird dann auch tatsächlich abgespeichert.
Die einzige Erklärung, die jetzt noch verbleibt zu geben, ist, daß
aufgrund der Konsistenz des Prädiktors mindestens der Ordnung $p=1$, die
oberste Komponente immer Null sein muß, wegen der speziellen
Beschaffenheit der Matrix $\hat P^\top$, nämlich der zuobersten
“Einerzeile” wie bei der Konsistenzmatrix $C_{p,k}$.
Mit den offensichtlichen Vereinfachungen, werden diese Rechnungen am
besten mit Formelmanipulationssystemen durchgeführt.</p>
<p>In der Sprache <a href="https://en.wikipedia.org/wiki/MuMATH">muMATH</a> z.B. würde man eingeben</p>
<pre><code>AS: P.(Y-PSIY)/GAMMA;
</code></pre>
<p><strong>7. Beispiel für Ordnung 6:</strong>  Die zweite Stufe im Zyklus der Ordnung $p=6$ lautet</p>
<div class=math>
$$
    2930y_{n+1}\underbrace{-7277y_n+9150y_{n-1}-8100y_{n-2}+4550y_{n-3}
        -1455y_{n-4}+202y_{n-5}}_{\displaystyle -2930\psi_y}
    = 1200z_{n+1}-60z_n.
$$
</div>
<p>Der Prädiktor für diese Stufe mit entsprechender Konsistenzordnung ist</p>
<div class=math>
$$
    y^0_{n+1} = {1\over10}(-77y_n+150y_{n-1}-100y_{n-2}+50y_{n-3}-15y_{n-4}
        +2y_{n-5})+6z_n
$$
</div>
<p>Es ist also $\gamma=1200/2930$ und $\psi_z=-60/2930\cdot z_n$.
Der Anteil mit $z$ für den Prädiktor $z^0_{n+1}$ ist somit</p>
<div class=math>
$$
    z_{n+1}^0\bigl|_z = {1\over\gamma}(y^0_{n+1}\bigl|_z-\psi_z)
        = {2930\over1200}(6z_n+{60\over2930}z_n) = {147\over10}z_n
$$
</div>
<p>und für den Anteil mit $y$ erhält man</p>
<div class=math>
$$
    z_{n+1}^0\bigl|_y = {1\over\gamma}(y_{n+1}^0\bigl|_y-\psi_y)
        = -{4973\over200}y_n+{177\over4}y_{n-1}-{187\over6}y_{n-2}
          +16y_{n-3}-{117\over24}y_{n-4}+{197\over300}y_{n-5}.
$$
</div>
<p>Umrechnung dieses Wertes in Form von rückwärtsgenommenen Differenzen liefert</p>
<div class=math>
$$
    \tilde\alpha =
    \pmatrix{
        1 & 1  & 1  & 1  & 1  & 1\cr
        0 & -1 & -2 & -3 & -4 & -5\cr
        0 & 0  & 1  & 3  & 6  & 10\cr
        0 & 0  & 0  & -1 & -4 & -10\cr
        0 & 0  & 0  & 0  & 1  & 5\cr
        0 & 0  & 0  & 0  & 0  & -1\cr}
    \pmatrix{-4973/200\cr 177/4\cr -187/6\cr 16\cr -117/24\cr 197/300\cr}
    =
    \pmatrix{0\cr -137/10\cr -117/20\cr -46/15\cr -191/120\cr -197/300\cr}.
$$
</div>
<p><strong>8. Zyklusfremde Näherungen.</strong> Bei den <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">Formeln von Tendler</a>, siehe auch <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>, sind die
Formeln für $p\le 3$ stets von der Gestalt</p>
<div class=math>
$$
    A_0u_n+A_1u_{n+1} = B_0z_n+B_1z_{n+1},
    \qquad\hbox{mit}\quad B_0=0,
$$
</div>
<p>und für $p\ge 4$:</p>
<div class=math>
$$
    A_0u_{n-1}+A_1u_n+A_2u_{n+1} = B_0z_{n-1}+B_1z_n+B_2z_{n+1},
    \qquad\hbox{mit}\quad B_0=B_1=0.
$$
</div>
<p>Also die zyklischen Formeln benutzen keine zyklusfremden Näherungen für
Ableitungen.
Die verwendeten Ableitungen stammen sämtlich aus dem aktuellen Zyklus.
Die Prädiktoren für alle Ordnungen benutzen nur eine einzige Ableitung
aus dem vorhergehenden Zyklus und zwar die letztmögliche Ableitungsnäherung.
Diese spezielle Wahl der Matrizen $B_i$ hat nun entscheidende Konsequenzen:
Ist das Verfahren $A[\alpha]$- bzw. $S[\delta]$-stabil, so ist es
automatisch auch
$A_\infty^0[\alpha]$- bzw. $S_\infty^0[\delta]$-stabil.</p>
<p>I.d.S. sind also die Formeln von J.M. Tendler die <em>natürliche Verallgemeinerung</em> der BDF.
Dieser Automatismus ist ein äußerst einfacher Weg zur Sicherstellung von
$A_\infty^0[\alpha]$- bzw. $S_\infty^0[\delta]$-Stabilität.</p>
<p>Von mindestens ebenso großen Nutzen ist der enorme rechnerische,
speicherplatzmässige und programmiermässige Vorteil.
Die innerhalb eines Zykluses generierten Näherungswerte für die Ableitungen
können nach Beendigung des Zykluses einfach vergessen werden, also
überschrieben werden und vielmehr:
Sie bedürfen keinerlei Aktualisierungsaufwand, wie beispielsweise die
rückwärtsgenommenen Differenzen der $y$-Werte.
Jede neuberechnete Stufennäherung innerhalb eines Zykluses fügt einen
weiteren $y$-Wert hinzu und daher muß die Differenzentabelle im Speicher
um eine Spalte erweitert werden.
Dies sind die Werte $\nabla y, \nabla^2y, \ldots, \nabla^py$.
Dieser Rechenaufwand entfällt völlig für die Ableitungsnäherungen bei den
Formeln von <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>, insbesondere bei den
BDF, wenn man sie in der Darstellung rückwärtsgenommener Differenzen
o.ä. programmiert.</p>
<p>Von weiterem großen Vorteil ist aber nicht nur der verringerte
Aktualisierungsaufwand pro Schritt, sondern der halbierte Aufwand bei
der Interpolation von Zwischengitterpunkten bei einem Schrittweitenwechsel.
Benötigt nämlich die Formel zyklusfremde Ableitungswerte, so sind natürlich
auch diese auf einem neuen Gitter zur Verfügung zu stellen.
Genau dies ist eine der Aufgaben der Differenzentabelle.
Man könnte zwar auch daran denken ohne Differenzentabelle zu interpolieren,
jedoch ist eine mehrfache Interpolation erforderlich, sodaß sich eine
Differenzentabelle besonders anbietet.
Diese Differenzentabelle für die Ableitungen belegt aber nicht nur
zusätzlichen Speicherplatz, benötigt zusätzliche Rechenzeit, sondern
läßt sich auch nicht so einfach vermeiden, da bei einer
Schrittweitenverkleinerung auf jeden Fall interpoliert werden muß.</p>
<p>Eine Schrittweitenverkleinerung kann nach jeder Stufe vonnöten sein,
je nach dem wie man die Fehlerkontrolle organisiert hat.
Die Summe dieser Nachteile, falls also $B_0\ne0$
bzw. $\left|B_0\right|^2+\left|B_1\right|^2\ne0$, kann nur dann aufgewogen
werden, wenn die Stabilitäts- und Fehlereigenschaften neuer <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">Formeln</a>
signifikant besser sind, als diejenigen von
<a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>.
Die Formeln von Tischer (1983) (Dissertation) und
<a href="https://doi.org/10.1137/0904051">Tischer/Sacks-Davis (1983)</a> sind auch tatsächlich
<em>keine</em> Verallgemeinerung der BDF.
Bei diesen zweistufigen zyklischen Verfahren sind die $B_i\ne0$
($i$ geeignet).</p>
<h2>4. Speicherung des Prädiktors im Programm TENDLER<a id=Speicherung></a></h2>
<blockquote>
<p>Pointers have been lumped with the <code>goto</code> statement as a marvelous
way to create impossible-to-understand programs.
This is certainly true when they are used carelessly, and it is easy
to create pointers that point somewhere unexpected.
With discipline, however, pointers can also be used to achieve
clarity and simplicity.
This is the aspect that we will try to illustrate.</p>
<p><a href="https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/C_Book_2nd.pdf">B.W. Kernighan, D.M. Ritchie (1978)</a></p>
</blockquote>
<p>Da für den nicht-steifen Falle, also im Programm TENDLER bei
Picard Iteration, eine Prädiktorformel sinnvoll ist, wurde dieses Vorgehen
sinngemäß übertragen für den steifen Fall, also im Programm
TENDLER Verwendung eines modifizierten
Newton-Kantorovich Iterationsverfahren.
Also, sowohl im steifen als auch im nicht-steifen Modus werden die gleichen
Prädiktorformeln verwendet.</p>
<p><strong>1. Prädiktor für $y$.</strong> Die Variable <code>ypred[][]</code> ist als <code>static</code> <code>real</code> <code>ypred[7][7]</code> definiert.
Vorbesetzt wird sie mit den Werten der expliziten BDF.
Diese Werte werden niemals im Programm verändert.
Im Sine von C++ sind sie also <code>static</code> <code>const</code> <code>real</code>.</p>
<div class=math>
$$
\begin{array}{cccccc}
\displaystyle 1 & \cr
\displaystyle 1 & \displaystyle{(1-2)\over1}\cr
\displaystyle 1 & \displaystyle{(1-3)\over1} & \displaystyle{(2-3)\over2}\cr
\displaystyle 1 & \displaystyle{(1-4)\over1} & \displaystyle{(2-4)\over2} & \displaystyle{(3-4)\over3}\cr
\displaystyle 1 & \displaystyle{(1-5)\over1} & \displaystyle{(2-5)\over2} & \displaystyle{(3-5)\over3} & \displaystyle{(4-5)\over4}\cr
\displaystyle 1 & \displaystyle{(1-6)\over1} & \displaystyle{(2-6)\over2} & \displaystyle{(3-6)\over3} & \displaystyle{(4-6)\over4} & \displaystyle{(5-6)\over5}\cr
\displaystyle 1 & \displaystyle{(1-7)\over1} & \displaystyle{(2-7)\over2} & \displaystyle{(3-7)\over3} & \displaystyle{(4-7)\over4} & \displaystyle{(5-7)\over5} & \displaystyle{(6-7)\over6}\cr
\end{array}
$$
</div>
<p>Für die Initialisierung der Konstanten <code>zpredalfa[][][]</code> und <code>zpredbeta[][][]</code>
ist folgendes zu beachten.
Die Einträge liegen dabei “linksbündig” vor, da sie ja später bei
einer Matrix-Vektor-Multiplikation mit der Matrix</p>
<div class=math>
$$
    \left(y,{\mskip 3mu}  \nabla y,{\mskip 3mu}  \nabla^2 y,{\mskip 3mu}  \ldots,  \nabla^{p-1} y\right)
$$
</div>
<p>gebraucht werden.</p>
<p>Es sei daran erinnert, daß die rückwärtsgenommene Differenz $(p-1)$-ter
Ordnung insgesamt $p$ Werte benutzt.</p>
<p>Die Bedeutung der Indizes für $\mathtt{zpredalfa[}p\mathtt{][}\ell\mathtt{][}i\mathtt{]}$ ist nun:</p>
<ol>
<li>$p$ für die Ordnung des augenblicklich benutzten Verfahrens,</li>
<li>$\ell$ für die Stufe und</li>
<li>$i$ für den $i$-ten Koeffizienten des Verfahrens.</li>
</ol>
<p><strong>2. Prädiktor für $z$.</strong>
Die Variable <code>zpredalfa[][][]</code> ist definiert als
<code>static</code> <code>real</code> <code>zpredalfa[7][4][6]</code>
und verhält sich in ihrem Zugriff wie die Variable <code>ypred[][]</code>.</p>
<p>Ein Stern <code>*</code> deutet an, daß hier ein Wert gesetzt wird, der als
unmöglich erkannt wird, falls diese Speicherstelle dennoch angesprochen wird,
zumindestens im <code>DEBUG</code> Modus.</p>
<p>Der Wert für $\nabla^0y$ braucht natürlich nicht abgespeichert werden, da
er aufgrund der Konsistenz des Prädiktors verschwindet.</p>
<p>Ordnung 1: Für <code>zpredalfa[0][][]</code> wird nun die folgende konstante Matrix fest abgelegt:</p>
<div class=math>
$$
\begin{array}{cccccc}
    * & * & * & * & * & * \cr    % p = 1
    * & * & * & * & * & * \cr
    * & * & * & * & * & * \cr
    * & * & * & * & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 2: Die Matrix <code>zpredalfa[1][][]</code> enthält die Teilmatrix:</p>
<div class=math>
$$
\begin{array}{cccccc}
    -2 & * & * & * & * & * \cr      % p = 2
    -2 & * & * & * & * & * \cr
    -2 & * & * & * & * & * \cr
     * & * & * & * & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 3: Für <code>zpredalfa[2][][]</code> werden die Konstanten wie folgt gesetzt:</p>
<div class=math>
$$
\begin{array}{cccccc}
    \displaystyle{-{9\over2}} & \displaystyle{-{5\over4}} & * & * & * & * \cr    % p = 3
    \displaystyle{-{9\over2}} & \displaystyle{-{5\over4}} & * & * & * & * \cr
    \displaystyle{-{15\over2}} & \displaystyle{-{3\over4}} & * & * & * & * \cr
    * & * & * & * & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 4: Für <code>zpredalfa[3][][]</code> die Werte:</p>
<div class=math>
$$
\begin{array}{cccccc}
    \displaystyle{-{22\over3}} & \displaystyle{-{8\over3}} & \displaystyle{-{17\over18}} & * & * & * \cr % p = 4
    \displaystyle{-{22\over3}} & \displaystyle{-{8\over3}} & \displaystyle{-{17\over18}} & * & * & * \cr
    \displaystyle{-9} & \displaystyle{-{9\over4}} & \displaystyle{-{7\over8}} & * & * & * \cr
    * & * & * & * & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 5: <code>zpredalfa[4][][]</code></p>
<div class=math>
$$
\begin{array}{cccccc}
    \displaystyle{-{125\over12}} & \displaystyle{-{101\over24}} & \displaystyle{-{71\over36}} & \displaystyle{-{37\over48}} & * & * \cr        % p = 5
    \displaystyle{-{125\over12}} & \displaystyle{-{101\over24}} & \displaystyle{-{71\over36}} & \displaystyle{-{37\over48}} & * & * \cr
    \displaystyle{-{253\over24}} & \displaystyle{-{1001\over240}} & \displaystyle{-{707\over360}} & \displaystyle{-{123\over160}} & * & * \cr
    \displaystyle{-{57\over4}} & \displaystyle{-{25\over8}} & \displaystyle{-{17\over10}} & \displaystyle{-{169\over240}} & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 6: Für <code>zpredalfa[5][][]</code> werden besetzt:</p>
<div class=math>
$$
\begin{array}{cccccc}
    \displaystyle{-{137\over10}} & \displaystyle{-{117\over20}} & \displaystyle{-{46\over15}} & \displaystyle{-{191\over120}} & \displaystyle{-{197\over300}} & * \cr  % p = 6
    \displaystyle{-{137\over10}} & \displaystyle{-{117\over20}} & \displaystyle{-{46\over15}} & \displaystyle{-{191\over120}} & \displaystyle{-{197\over300}} & * \cr               % \lt -------
    \displaystyle{-{353\over25}} & \displaystyle{-{571\over100}} & \displaystyle{-{1819\over600}} & \displaystyle{-{79\over50}} & \displaystyle{-{3919\over6000}} & * \cr
    \displaystyle{-{3529\over200}} & \displaystyle{-{1889\over400}} & \displaystyle{-{1609\over600}} & \displaystyle{-{3527\over2400}} & \displaystyle{-{931\over1500}} & * \cr
\end{array}
$$
</div>
<p>Ordnung 7: Schließlich für <code>zpredalfa[6][][]</code> werden die folgenden Werte in
die Teilmatrix hineingeschrieben.</p>
<div class=math>
$$
\begin{array}{cccccc}
    \displaystyle{-{343\over20}} & \displaystyle{-{303\over40}} & \displaystyle{-{253\over60}} & \displaystyle{-{589\over240}} & \displaystyle{-{101\over75}} & \displaystyle{-{23\over40}} \cr  % p = 7
    \displaystyle{-{343\over20}} & \displaystyle{-{303\over40}} & \displaystyle{-{253\over60}} & \displaystyle{-{589\over240}} & \displaystyle{-{101\over75}} & \displaystyle{-{23\over40}} \cr
    \displaystyle{-{266\over15}} & \displaystyle{-{221\over30}} & \displaystyle{-{749\over180}} & \displaystyle{-{73\over30}} & \displaystyle{-{803\over600}} & \displaystyle{-{103\over180}} \cr
    \displaystyle{-{1316\over75}} & \displaystyle{-{1151\over150}} & \displaystyle{-{3689\over900}} & \displaystyle{-{121\over50}} & \displaystyle{-{4003\over3000}} & \displaystyle{-{257\over450}} \cr
\end{array}
$$
</div>
<p><strong>3.</strong>
Es folgt nun die Variable <code>zpredbeta[][][]</code> definiert zu</p>
<pre class="line-numbers"><code class="language-C">static real zpredbeta[7][4][4];
</code></pre>
<p>Die Reihenfolge der Indizes ist wie bei der Variablen <code>zpredalfa[][][]</code>.</p>
<p>Die Variable <code>zpredbeta[][][]</code> ist wie folgt initialisiert.</p>
<p>Ordnung 1: <code>zpredbeta[0][][]</code></p>
<div class=math>
$$
\begin{array}{cccc}
    1 &    * & * & * \cr     % p = 1
    0 &    1 &    * & * \cr
    0 &    0 &    1 &    * \cr
    * & * & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 2: <code>zpredbeta[1][][]</code></p>
<div class=math>
$$
\begin{array}{cccc}
    3 &    * & * & * \cr     % p = 2
    0 &    3 &    * & * \cr
    0 &    0 &    3 &    * \cr
    * & * & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 3: <code>zpredbeta[2][][]</code></p>
<div class=math>
$$
\begin{array}{cccc}
    \displaystyle{11\over2} & * & * & * \cr     % p = 3
    0 &    \displaystyle{11\over2} & * & * \cr
    0 &    2 &    \displaystyle{13\over2} & * \cr
    * & * & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 4: <code>zpredbeta[3][][]</code></p>
<div class=math>
$$
\begin{array}{cccc}
    \displaystyle{25\over3} & * & * & * \cr     % p = 4
    0 &    \displaystyle{25\over3} & * & * \cr
    0 &    \displaystyle{5\over4} &  \displaystyle{35\over4} & * \cr
    * & * & * & * \cr
\end{array}
$$
</div>
<p>Ordnung 5: <code>zpredbeta[4][][]</code></p>
<div class=math>
$$
\begin{array}{cccc}
    \displaystyle{137\over12} & * &   * &    * \cr   % p = 5
    0 & \displaystyle{137\over12} & * &    * \cr
    0 & \displaystyle{1\over10} &   \displaystyle{1373\over120} &* \cr
    0 & \displaystyle{-{1\over20}} &  3.1 &  \displaystyle{61\over5}\cr
\end{array}
$$
</div>
<p>Ordnung 6 <code>zpredbeta[5][][]</code></p>
<div class=math>
$$
\begin{array}{cccc}
    \displaystyle{147\over10} & *  & * & * \cr   % p = 6
    0 & \displaystyle{147\over10}  & * & * \cr
    0 & \displaystyle{7\over20}    & \displaystyle{1477\over100} & * \cr
    0 & \displaystyle{-{3\over20}} & \displaystyle{17\over5} &    \displaystyle{3079\over200}\cr
\end{array}
$$
</div>
<p>Ordnung 7: <code>zpredbeta[6][][]</code></p>
<div class=math>
$$
\begin{array}{cccc}
    \displaystyle{363\over20} & * &   *        & * \cr       % p = 7
    0 & \displaystyle{363\over20} & *          & * \cr
    0 & \displaystyle{1\over2}   & \displaystyle{547\over30} & * \cr
    0 & \displaystyle{-{1\over5}} & \displaystyle{1\over2}   & \displaystyle{2737\over150}\cr
\end{array}
$$
</div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms</link>
		<guid>https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms</guid>
		<title>TENDLER: 2. Benutzung des Programmes</title>
		<category>mathematics</category>
		<category>C / C++</category>
		<pubDate>Mon, 17 Nov 2025 16:00:00 +0100</pubDate>
		<description><![CDATA[
<p>Fortsetzung der TENDLER Programmbeschreibung.</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-16-tendler-1-grobaufbau-und-prinzipielle-ueberlegungen">TENDLER: 1. Grobaufbau und prinzipielle Überlegungen</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms">TENDLER: 2. Benutzung des Programmes</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-18-tendler-3-der-praediktor">TENDLER: 3. Der Prädiktor</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-30-tendler-4-die-korrekturiteration">TENDLER: 4. Die Korrektoriteration</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2026/03-10-tendler-5-die-fehlerkontrolle">TENDLER: 5. Die Fehlerkontrolle</a></li>
</ol>
<hr>
<ul>
<li><a href="#Definition">1. Definition der Differentialgleichung</a></li>
<li><a href="#Loesung">2. Lösung der Differentialgleichung</a></li>
<li><a href="#Extras">3. Extras</a></li>
</ul>
<p>Das Programm TENDLER dient zur näherungsweisen Lösung von gewöhnlichen
Differentialgleichungssystemen erster Ordnung und zwar von
Anfangswertproblemen.
Differentialgleichungen höherer Ordnung lassen sich leicht in Gleichungen
erster Ordnung überführen durch Anhebung der Dimension.
I.a. werden die vom Programm TENDLER gelieferten Näherungswerte “etwas
ungenauer” sein, als <a href="https://eklausmeier.goip.de/blog/2016/11-22-operation-costs-measured-in-cpu-clock-cycles">eingebaute Funktionen</a>, wie z.B. $\sin$, $\cos$, etc.
I.a. werden dafür auch Lösungen schneller berechnet.
Z.B. die Differentialgleichung, welche $\sin$ und $\cos$ als Lösung besitzt,
<a href="https://eklausmeier.goip.de/blog/2016/04-05-performance-comparison-c-vs-lua-vs-luajit-vs-java">kann schneller gelöst</a> werden, als die mehrfache Auswertung der eingebauten
Sinus- und Kosinusfunktion.
Dies ist beispielsweise interessant für graphische Anwendungen.
Diese Ausführungen sollten allerdings nur als grober Hinweis angesehen werden.</p>
<p>Herkömmliche Löser, wie z.B. <a href="https://computing.llnl.gov/projects/odepack">LSODE</a>, <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a>, u.s.w., offerieren dem Benutzer
letztlich ein einziges Unterprogramm, welches wiederholt aufgerufen wird.
Dieses eine Unterprogramm wird dann durch eine Vielzahl von Parametern
gesteuert.
Bei dem Programm TENDLER ist dies anders.
In <a href="https://computing.llnl.gov/projects/sundials/cvode">CVODE</a> ist dies auch anders.
Definition eines Problems und Lösung desselben werden beim Programm
TENDLER auch als solches unterschiedlich behandelt.
Also für jeden Bereich existiert auch ein separates Unterprogramm, welches
demzufolge weitaus weniger Parameter enthält.
Dies hat weitreichende Folgen.
Zum einen ist diese Vorgehensweise etwas effizienter (weniger Rechenzeit) und zum
anderen ist diese Vorgehensweise für den Anwender auch wesentlich bequemer.</p>
<p>Das Programm TENDLER liefert lediglich Näherungswerte für die exakte
Lösung des Anfangswertproblems.
Eine Garantie, daß die Lösung bis auf Maschinengenauigkeit exakt berechnet
wird, kann nicht gegeben werden.
Die Programme LSODE, CVODE, DE/STEP, etc., versprechen dies übrigens auch nicht.</p>
<p>Sämtliche TENDLER Unterprogramme fangen mit dem Präfix <em>tdl</em> an.</p>
<h2>1. Definition der Differentialgleichung<a id=Definition></a></h2>
<p><strong>1. Zweck.</strong> Das Programm TENDLER dient in der augenblicklichen Fassung zur Lösung von</p>
<div class=math>
$$
    \dot y = f(t,y), \qquad y(a) = y_0 \in \mathbb{R}^n, \qquad (a,t\in\mathbb{R}).
$$
</div>
<p>Dabei ist zu fordern, daß $f$ mindestens acht Mal stetig differenzierbar ist.
Bei unstetigen rechten Seiten kann es zu Schwierigkeiten kommen.
Für unstetige $f$, für Randwertaufgaben, für partielle Differentialgleichungen,
für stochastische Differentialgleichungen ist das Programm TENDLER nicht
direkt einsetzbar.</p>
<ol>
<li>Bei Unstetigkeiten zweiter Art (Sprüngen) kann man sich, wenn man weiß wo
die Sprungstellen liegen, u.U. dadurch behelfen, daß man den Löser bei den
Sprungstellen neu startet.</li>
<li>Für Randwertaufgaben kann man das Programm TENDLER als Unterprogramm in
einem Mehrfachschießverfahren einsetzen.</li>
<li>Gewisse partielle Differentialgleichungen lassen sich durch Diskretisierung
umformulieren zu einer gewöhnlichen Differentialgleichung, entweder als
Rand- oder aber als Anfangswertproblem.</li>
<li>Stochastische Differentialgleichung lassen sich u.U. durch wiederholtes Lösen
angehen.</li>
</ol>
<p>Die Erweiterung des Programmes TENDLER für die Behandlung von
$g$-stop Problemen der Form</p>
<div class=math>
$$
    g\colon \mathbb{R}\times\mathbb{R}^n\times\mathbb{R}^n \to \mathbb{R}^m,
        \qquad g(t,y,\dot y) = 0,
$$
</div>
<p>ist berücksichtigt, aber nicht eingebaut.
Differentialgleichungsprobleme mit impliziter Zeitvorgabe werden
gelegentlich auch $g$-stop Probleme genannt.</p>
<p>Das Programm TENDLER besteht aus mehr als 100 Unterprogrammen.
Davon sind jedoch nur ein Teil für den Anwender i.d.R. direkt von Interesse.
Dies sind maßgeblich <code>tdldefsys()</code>, <code>tdldefivp()</code> und <code>tdlundefsys()</code> zur
An- und Abmeldung eines Anfangswertproblems.
Die C-Prototypen hierzu befinden sich in <code>&quot;ode.h&quot;</code>.</p>
<p><strong>2.</strong> <code>dd = tdldefsys (n, func, jac, m, g)</code> :</p>
<ol>
<li><code>n</code> ist die Dimension der Differentialgleichung.</li>
<li><code>func</code> ist der Name des Unterprogrammes zur Berechnung der Funktion $f$.</li>
<li><code>jac</code> ist der Name des Unterprogrammes zur Berechnung der Jacobimatrix $f_y$.</li>
<li><code>m</code> ist $m$ bei $g$, und <code>g</code> ist das Unterprogramm für die Berechnung
von $g$.</li>
</ol>
<p><code>tdldefsys()</code> dient also zur Definition der Differentialgleichung ohne die
Anfangswerte.
Intern wird Speicherplatz via <a href="https://man.archlinux.org/man/calloc.3"><code>calloc()</code></a> reserviert.</p>
<p>Der zurückgelieferte Wert <code>dd</code> dient im weiteren zur Identifikation des
Problems, <em>differential equation descriptor</em>.
Jetzt wird auch ersichtlich, warum es so einfach ist, beliebig viele
Differentialgleichungen gleichzeitig zu lösen.</p>
<p>Man würde wie folgt vorgehen:</p>
<div class=math>
$$
\eqalign{
    \mathtt{dd1} &= \mathtt{tdldefsys} (n_1, f_1, J_1, m_1, g_1);\cr
    \mathtt{dd2} &= \mathtt{tdldefsys} (n_2, f_2, J_2, m_2, g_2);\cr
}
$$
</div>
<p>Wenn die Jacobimatrix nicht berechnet werden soll oder kann
(man vgl. z.B. NC5, <a href="https://doi.org/10.1137/0709052">nonstiff C5</a>), so übergibt man <code>nojac</code>, also</p>
<pre class="line-numbers"><code class="language-C">dd = tdldefsys(n, f, nojac, m, g);
</code></pre>
<p>Da z.Z. <em>keine</em> $g$-stop Probleme gelöst werden können, muß $m$ immer Null
und $g$ auf jeden Fall <code>nogstop</code> sein, also</p>
<pre class="line-numbers"><code class="language-C">dd = tdldefsys(n, f, J, 0, nogstop);
</code></pre>
<p>Ist $m\ne0$ und/oder $g\ne\mathtt{nogstop}$, so erzeugt die augenblickliche
Fassung des Programmes TENDLER eine Fehlermeldung.
Durch eine Fehlspezifikation werden also niemals falsche Werte erzeugt.</p>
<p>$n$ und $f$ müssen immer angegeben werden.
Inkorrekt wäre also</p>
<pre class="line-numbers"><code class="language-C">dd = tdldefsys(n, NULL, J, 0, nogstop);    /* wrong */
</code></pre>
<p>Gute Übersetzer würden dies auch schon anhand der Prototypen erkennen.</p>
<p><strong>3.</strong> <code>tdldefivp (dd, a, b, y0)</code> :</p>
<ol>
<li><code>dd</code> ist die obige Identifzierung um welche Differentialgleichung es sich
handelt.</li>
<li><code>a</code> und <code>b</code> sind Integrationsgrenzen und <code>y0</code> der Anfangswertvektor.</li>
<li><code>a</code> ist $a$.</li>
<li><code>b</code> ist an für sich unerheblich.</li>
</ol>
<p>Es dient lediglich dazu, den Größenordnungsbereich und die
Integrationsrichtung (links oder rechts) anzugeben.
Es darf über <code>b</code> hinaus integriert werden.
Umgekehrt muß <code>b</code> auch nicht unbedingt erreicht werden.
Intern wird <code>b</code> zur Berechnung einer Anfangs- und Maximalschrittweite benutzt.
Zum Schalten wird <code>b</code> nicht benutzt.
Es ist möglich und auch effizient, bei einer Differentialgleichung, aber
mehreren verschiedenen Anfangswerten, das Unterprogramm <code>tdldefivp()</code> mehrfach
aufzurufen, z.B. im Rahmen eines Schießverfahrens.
<code>tdldefsys()</code> wird hierzu nicht benötigt.</p>
<p><strong>4.</strong> <code>tdlundefsys (dd)</code> :
Dies ist das Gegenstück zu <code>tdldefsys()</code>.
Es meldet die Kennung <code>dd</code> ab, insbesondere wird der belegte Speicherplatz
wieder frei gegeben.
Die Funktion <code>tdlundefsys()</code> ruft hierzu <a href="https://man.archlinux.org/man/free.3"><code>free()</code></a> auf.</p>
<p>Das Aufrufen von <code>tdlundefsys()</code> kann entfallen, wenn nur eine Differentialgleichung
gelöst wird und anschließend im Hauptprogramm nichts weiter berechnet wird.
Dies ist eine Eigenschaft von <a href="https://man.archlinux.org/man/calloc.3"><code>calloc()</code></a> und <a href="https://man.archlinux.org/man/free.3"><code>free()</code></a> und wird nicht durch
das Programm TENDLER erzwungen.</p>
<p><code>tdlundefsys()</code> ist eigentlich nur bei großdimensionalen Problemen wirklich
interessant.
<code>tdldefsys()</code> und <code>tdlundefsys()</code> entsprechen in ihrer Funktionalität in etwa
<a href="https://man.archlinux.org/man/fopen.3"><code>fopen()</code></a> und <a href="https://man.archlinux.org/man/fclose.3"><code>fclose()</code></a>.</p>
<h2>2. Lösung der Differentialgleichung<a id=Loesung></a></h2>
<p>Bisher wurde lediglich das Problem definiert, also noch kein einziger Wert
berechnet.
Es könnte so aussehen, als hätte das Programm TENDLER bisher nichts
Sinnvolles geleistet.
In Wirklichkeit wurden die Daten auf Fehlerfreiheit und innere Konsistenz
untersucht und intern eine Reihe von Voreinstellungen wirksam.
Nun sollen tatsächlich Näherungen berechnet werden.
Es gibt hier zwei Möglichkeiten.</p>
<ol>
<li>Die Punkte $t_i$, an denen Näherungen ausgegeben werden sollen, sind
vom Benutzer vorgegeben.
Hierzu dient <code>tdlsolve()</code>.</li>
<li>Die Gitterpunkte $t_i$ werden vom Programm TENDLER gewählt.
Hierzu dienen <code>tdlmeagersol()</code> (“Magerstufe”) und <code>tdlautosol()</code>.</li>
</ol>
<p><strong>1.</strong> <code>y = tdlsolve (dd, t)</code> :</p>
<ol>
<li><code>dd</code> ist w.o. die Kennung (<em>differential equation descriptor</em>), und</li>
<li><code>t</code> ist ein beliebiger Wert, an dem die Lösung gesucht wird.</li>
</ol>
<p>Zurückgeliefert wird ein Vektor $y\in\mathbb{R}^n$.
Wünscht man an der Stelle $t=\pi$ einen Näherungswert,
so schriebe man</p>
<pre class="line-numbers"><code class="language-C">y = tdlsolve(dd,3.141592653589793238462643383279502884197);
</code></pre>
<p>Bei <em>zwei</em> voneinander unabhängigen Gleichungen $y_1$ und $y_2$ schriebe man</p>
<div class=math>
$$
\eqalign{
    y_1 &= \mathtt{tdlsolve} (\mathtt{dd1}, t);\cr
    y_2 &= \mathtt{tdlsolve} (\mathtt{dd2}, t);\cr
}
$$
</div>
<p>Der Wert $t=a$ ist zulässig, ebenso $t&gt;b&gt;a$ (analog: $t&lt;b&lt;a$).
<code>tdlsolve()</code> entspricht in seiner Funktionalität in etwa <a href="https://man.archlinux.org/man/fgetc.3"><code>fgetc()</code></a>.</p>
<p><strong>2.</strong> <code>y = tdlmeagersol (dd, &amp;t)</code> :</p>
<ol>
<li>Genau wie <code>tdlsolve()</code>, bloß, daß in <code>t</code> ein vom Programm TENDLER erzeugter
Gitterpunkt übergeben wird.</li>
<li>In <code>y</code> befindet sich wiederum der Lösungsvektor $\in\mathbb{R}^n$.
Die vom Programm TENDLER gewählten Gitterpunkte brauchen nicht äquidistant
zu sein.</li>
</ol>
<p>Die Funktion <code>tdlmeagersol()</code> ist nützlich, wenn man über die Lösung, außer
ihrer Existenz, nichts weiter weiß.
Beispielsweise ist für die Sinuskurve auf $\left[0,100\pi\right]$ ein Gitter
$0,\pi,2\pi,3\pi,\ldots$ i.a. nicht so interessant.
Dies weiß man häufig allerdings erst nach der Lösung einer Differentialgleichung.
Der erste von <code>tdlmeagersol()</code> zurückgegebene Wert ist nicht $y_0$ und $t\ne a$.</p>
<p><strong>3.</strong> <code>y = tdlautosol (dd, &amp;t)</code> :
Genau wie <code>tdlmeagersol()</code>.
Das Gitter liegt nur enger, ist i.a. auch wieder nicht äquidistant.
<code>tdlautosol()</code> ist gut geeignet für Plotten.
<code>tdlmeagersol()</code> wiederum ist besser geeignet für zahlenmässiges Drucken.
Die von den Funktionen <code>tdlsolve()</code>, <code>tdlmeagersol()</code> und <code>tdlautosol()</code>
zurückgegebenen Vektoren können zwischen Aufrufen dieser Funktionen
beliebig überschrieben werden.
Will man jedoch einen Vektor über mehrere Aufrufe hinweg speichern, so muß
man den Vektor puffern, da das Programm TENDLER diesen Vektor
u.U. überschreiben kann.</p>
<p><strong>4.</strong> Mit den bisher beschriebenen Routinen <code>tdldefsys()</code>, <code>tdldefivp()</code>
und <code>tdlsolve()</code>, lässt sich ein Großteil von Differentialgleichungen lösen.
Bei diesen Routinen wurde nur das an Angaben verlangt, was das mathematische
Problem beschreibt.
Interessant ist hierbei, daß dies unabhängig von der verwendeten
Lösungsmethode ist, hier zyklischen Mehrschrittverfahren.
Ein Programm basierend auf Runge-Kutta Formeln könnte man mit völlig
gleichlautenden Unterprogrammen genauso aufrufen.
Von Dingen wie Anfangsschrittweite, Steifheit, Speicherplatzbedarf, etc.,
wurde der Benutzer entlastet.
Es ist möglich, daß die Genauigkeit, die das Programm TENDLER liefert,
zu hoch ist, also man letztlich daran interessiert ist, die
Rechengeschwindigkeit zu erhöhen.
Umgekehrt kann die gelieferte Genauigkeit zu gering sein.
Eine Anhebung der Genauigkeit ist prinzipiell möglich.
Es gibt weitere Unterprogramme im Programm TENDLER, mit denen sich dies
bewerkstelligen lässt.
Zuvor jedoch ein vollständiges Beispiel in ANSI C.</p>
<p><strong>5. Beispiel:</strong>  Zu lösen sei $\dot y=-y$, $y(0)=1$.
Die Funktion $f(t,y)=-y$ ist</p>
<pre class="line-numbers"><code class="language-C">int f (double t, double y[], double ydot[])  {
    ydot[0] = -y[0];
}
</code></pre>
<p>Gute Übersetzer, oder <a href="https://en.wikipedia.org/wiki/Lint_(software)">lint</a>, werden eine Warnung ausgeben, daß in
<code>f</code> der Parameter <code>t</code> nicht benutzt wird und kein Rückgabewert explizit
übergeben wird.
Diese Warnungen können in diesem Falle natürlich ignoriert werden.
Gesucht sei $y(2)$.</p>
<pre class="line-numbers"><code class="language-C">#include &lt;stdio.h&gt;      /* für printf() */
#include &quot;ode.h&quot;        /* für tdldefsys(), tdldefivp(), tdlsolve(), nojac, nogstop */

int main (void) {
    double *y, yi[]={1.0};
    void *dd = tdldefsys (1, f, nojac, 0, nogstop);

    tdldefivp (dd, 0.0, 3.0, yi);
    y = tdlsolve (dd, 2.0);
    printf (&quot;%e\n&quot;, y[0]);
    return 0;
}
</code></pre>
<p>Der Wert 3 bei <code>tdldefivp()</code> ist im großen und ganzen willkürlich.
Der Wert 0.5 wäre hier ebenfalls akzeptabel gewesen.</p>
<p>Ganz allgemein haben die Funktionen <code>func</code> und <code>jac</code> in <a href="https://en.wikipedia.org/wiki/ANSI_C">ANSI C</a> das
Aussehen</p>
<pre class="line-numbers"><code class="language-C">int func (double t, double y[], double ydot[]);
</code></pre>
<p>bzw.</p>
<pre class="line-numbers"><code class="language-C">int jac (double t, double y[], double J[]);
</code></pre>
<p>Tatsächlich ist <code>J[]</code> und nicht <code>J[][]</code> anzugeben!</p>
<p>Die Elemente von $J$, also $J_{ik}$, sind <em>spaltenweise</em> in <code>J[]</code> abzulegen,
d.h.</p>
<div class=math>
$$
    \mathtt{J[i+n*k]} = J_{ik}, \qquad\hbox{falls } 0\le i,k\lt n,
$$
</div>
<p>bzw.</p>
<div class=math>
$$
    \mathtt{J[(i-1)+n*(k-1)]} = J_{ik}, \qquad\hbox{falls } 1\le i,k\le n.
$$
</div>
<p>Diese Form der Speicherung ist <em>nicht</em> die standardmäßige Speicherungsform für C Matrizen!
Vielmehr entspricht sie der Speicherung wie sie in Fortran üblich ist.</p>
<p><strong>6. Beispiel:</strong>  Für die lineare Differentialgleichung</p>
<div class=math>
$$
    \dot y = \pmatrix{
        -10 & \alpha\cr
        -\alpha & -10\cr
    } y
    %{-10,\: \alpha\choose -\alpha,{\mskip 3mu}-10}y
$$
</div>
<p>würde man <code>jac</code> wie folgt programmieren:</p>
<pre class="line-numbers"><code class="language-C">int jac (double t, double y[], double J[]) {
    J[0] = J[3] = -10,  J[1] = -α, J[2] = α;
}
</code></pre>
<p>Auch hier wäre eine Warnung bzgl. <code>t</code>, <code>y[]</code> und des Rückgabewertes ignorierbar.
Ggf. würde man vor den Zuweisungen noch einfügen:</p>
<pre class="line-numbers"><code class="language-C">static int loaded = 0;
if (loaded) return;
loaded = 1;
</code></pre>
<h2>3. Extras<a id=Extras></a></h2>
<p><strong>1.</strong> Der erfahrene Benutzer wird ggf. wünschen die Genauigkeitsanforderung für
den lokalen Fehler, die Maximalordnung, die Anfangsschrittweite, die
Maximalschrittweite, etc., selber bereitzustellen.
Dies ist möglich.
Hierzu dienen die Unterprogramme <code>tdlsetaccuracy()</code>, <code>tdlsetstep()</code> und
<code>tdlsetmodes()</code>.
Die Parameterlisten erklären hinreichend, was gesetzt wird:</p>
<ol>
<li><code>tdlsetaccuracy (dd, tol, ordmax, nfemax)</code>,</li>
<li><code>tdlsetstep (dd, minh, maxh, nexth)</code>,</li>
<li><code>tdlsetmodes (dd, jacm, iterm, printmode, errcm)</code>.</li>
</ol>
<p>I.a. wird lediglich <code>tdlsetaccuracy()</code> aufgerufen und zwar in der Form</p>
<pre class="line-numbers"><code class="language-C">tdlsetaccuracy (dd, newtol, AUTO_SELECT, AUTO_SELECT);
</code></pre>
<p>Die anderen Optionen, die durch <code>tdlsetstep()</code> und <code>tdlsetmodes()</code> verändert
werden können, erhalten durch das Programm TENDLER Vorbesetzungen, die
es sich i.a. nicht lohnt zu ändern.</p>
<p>Ist $f$ lediglich $k$-mal stetig differenzierbar, so ist eine Begrenzung
der Maximalordnung auf $k-1$ anzuraten, wobei hier</p>
<div class=math>
$$
    k\in\{2,\ldots,8\}.
$$
</div>
<p>Eine Begrenzung der Maximalordnung <code>ordmax</code> empfiehlt sich u.U. auch dann, wenn
man Kenntnis vom maximal zulässigen Widlund-Winkel besitzt, was bei linearen,
zeitinvarianten Differentialgleichungen nicht gänzlich ungewöhnlich wäre.</p>
<p>Diese Unterprogramme sollten i.a. nach <code>tdldefivp()</code> verwendet werden.
Sie können zwischen Aufrufen von <code>tdlsolve()</code> oder <code>tdlmeagersol()</code>/<code>tdlautosol()</code>
beliebig oft, in beliebiger Reihenfolge aufgerufen werden.
I.a. ist dies nicht ratsam, es sei denn, man hat bereits einen sehr
detaillierten Kenntnisstand über den Lösungsverlauf.</p>
<p>Übliche Werte</p>
<ol>
<li>für die Toleranz sind $10^{-4}$ bis $10^{-12}$,</li>
<li>für die Maximalordnung 3 bis 5,</li>
<li>für die maximale Anzahl der Funktionsauswertungen 1000–30000.</li>
</ol>
<p>Minimale und maximale Schrittweite hängen von $t$ ab.
Bei einem Integrationsintervall von $10^{30}$ bis $10^{60}$ ist
<code>minh</code>=$10^3$ als sehr klein zu betrachten.</p>
<p>Überhaupt sind diese Einstellungen abhängig von der zu lösenden
Differentialgleichung.</p>
<p>Für <code>tdlsetaccuracy()</code> ist $\mathtt{tol}&gt;0$ und $1\le\mathtt{ordmax}\le7$ einzuhalten.</p>
<p>Für <code>tdlsetstep()</code> muß gelten</p>
<div class=math>
$$
    0 \lt  \mathtt{minh} \le \mathtt{nexth} \le \mathtt{maxh} .
$$
</div>
<p><code>tdlsetmodes()</code> ist unterteilt in Exklusivoptionen und Inklusivoptionen.
Die Exklusivoptionen sind aus den Wertemengen</p>
<div class=math>
$$
\eqalign{
    \mathtt{jacm}  &\in \{\mathtt{EXACTJ}, \mathtt{APPROXJ}\},\cr
    \mathtt{iterm} &\in \{\mathtt{MNI}, \mathtt{MNIFLOAT}, \mathtt{FIX}, \mathtt{FIXFLOAT}, \mathtt{FIXPECE}, \mathtt{SWITCHING}\},\cr
    \mathtt{errcm} &\in \{\mathtt{ECEVSTAGE}, \mathtt{ECEOC}\},\cr
}
$$
</div>
<p>und für die Inklusivoptionen muß gelten</p>
<div class=math>
$$
    \mathtt{printmode} \in \{\mathtt{PMCVGCE}, \mathtt{PMSSOC}, \mathtt{PMSTAT}, \mathtt{PMWARN}, \mathtt{PMERREX}, \mathtt{PMDUMP}\} .
$$
</div>
<p>Exklusivoptionen sind Schaltervariablen, die nur <em>einen</em> der angegebenen Werte
annehmen können.
<code>iterm</code>=<code>MNI</code> und gleichzeitig <code>iterm</code>=<code>FIX</code> ist unzulässig.</p>
<p>Eine suggestive Bedeutungsbeschreibung für Inklusivoptionen lautet:
Inklusivoptionen sind Schaltervariablen, die mehrere Werte gleichzeitig
inne haben können.</p>
<p>Beispielsweise ist <code>printmode</code>=<code>PMSSOC</code> und gleichzeitig
<code>printmode</code>=<code>PMERREX</code> zulässig und sinnvoll.</p>
<p>Genauer: Inklusivoptionen sind Teilmengen aus der Potenzmenge der o.a. angegebenen
Menge, also mengenwertige Schaltervariablen.</p>
<p><strong>2.</strong> Mit dem Unterprogramm <code>tdlsetaccuracy()</code> lässt sich leicht eine Schätzung des
globalen Fehlers realisieren, durch Vergleich von Lösungen berechnet mit
<em>verschiedenen</em> Genauigkeiten.</p>
<p>Man definiert sich zwei Kennungen für eine einzige Differentialgleichung:
$g$ (genau) und $u$ (ungenau).
Man programmiert</p>
<div class=math>
$$
\eqalign{
    &g = \mathtt{tdldefsys} (n, f, \mathtt{nojac}, 0, \mathtt{nogstop});\cr
    &u = \mathtt{tdldefsys} (n, f, \mathtt{nojac}, 0, \mathtt{nogstop});\cr
    &\mathtt{tdldefivp} (g, a, b, y_0);\cr
    &\mathtt{tdldefivp} (u, a, b, y_0);\cr
    &\mathtt{tdlsetaccuracy} (g, \varepsilon_g, \mathtt{AUTO\_SELECT}, \mathtt{AUTO\_SELECT});\cr
    &\mathtt{tdlsetaccuracy} (u, \varepsilon_u, \mathtt{AUTO\_SELECT}, \mathtt{AUTO\_SELECT});\cr
}
$$
</div>
<p>Es sei hierbei $\varepsilon_g &lt; \varepsilon_u$.</p>
<p>Man löst somit die Differentialgleichung $\dot y=f(t,y)$, $y(a)=y_0$ zweimal:</p>
<ol>
<li>einmal mit der Genauigkeit $\varepsilon_g$ und</li>
<li>einmal mit $\varepsilon_u$.</li>
</ol>
<p>Der Vorteil ein und dieselbe Differentialgleichung <em>zweimal gleichzeitig</em> zu
lösen, liegt darin, daß man nun sehr leicht die Abweichung berechnen kann,
nämlich durch Berechnen der Normdifferenz der beiden Vektoren</p>
<div class=math>
$$
\eqalign{
    y_g &= \mathtt{tdlsolve} (g, t);\cr
    y_u &= \mathtt{tdlsolve} (u, t);\cr
}
$$
</div>
<p>Würde man die Differentialgleichung zweimal hintereinander lösen, so fielen
Pufferungsprobleme an.
I.a. wird die Lösung korrespondierend zu $\varepsilon_g$ genauer sein.
Allerdings insbesondere bei sehr hohen Genauigkeitsanforderungen
(Grenzgenauigkeit) bringt eine weitere Verkleinerung von $\varepsilon_g$
grundsätzlich keine weitere Steigerung der Genauigkeit.
Diese Grenzgenauigkeit hängt von der Differentialgleichung ab und wird vom
Programm TENDLER ständig berechnet um zu überprüfen, ob sie auch nicht
unterschritten wird.</p>
<p><strong>3.</strong> <code>iterm</code> dient dazu die Iterationsart fest vorzugeben, außer
natürlich bei <code>iterm</code>=<code>SWITCHING</code>, wo es gerade erlaubt ist zu schalten.
Dieses Fixieren auf eine Iterationsart kann nützlich sein, wenn man
z.B. weiß, daß die Differentialgleichung nur schwach steif ist und es daher
ratsam ist, eine der Iterationsarten <code>FIX</code>, <code>FIXFLOAT</code>, <code>FIXPECE</code> von
vorneherein vorzugeben.</p>
<p>Es ist erlaubt, daß in <code>tdldefsys()</code> die Jacobimatrix angegeben wird, aber mit
<code>tdlsetmodes()</code> numerische Differentiation vorgeschrieben wird.
In gelegentlichen Fällen ist dies nützlich.
Z.B. wenn die Jacobiamtrix, die in <code>tdldefsys()</code> übergeben, nicht die
eigentliche Jacobimatrix $f_y$ ist, sondern eine geschickt gewählte Näherung
hiervon, die darauf bedacht sein könnte, Bandstrukturen, Rechenvorteile,
o.ä. auszunutzen.
Mit der numerischen Differentiation kann man auf einem kurzen Intervall
schnell überprüfen, ob die Näherungen mit exakter Jacobimatrix mit den
Näherungen der abgekürzten Jacobimatrix hinreichend übereinstimmen.
Wie man erkennt, ist dies ein sehr spezieller Fall.</p>
<p><strong>4.</strong> Statistiken lassen sich erzeugen durch den Aufruf von
<code>tdlprtstat(dd)</code>.
Die Ausgabe der Statistiken ist in mehrere Abschnitte eingeteilt.</p>
<p>Ein Dump wird durch <code>tdldddump(dd)</code> erzeugt.</p>
<p>Für den sehr an Details interessierten Benutzer ist folgende Information
möglicherweise interessant:</p>
<ol>
<li>Es ist zulässig und sinnvoll <code>ptdlrtstat()</code> bzw. <code>dtdlddump()</code> aufzurufen, aber
in <code>tdlprintmode</code> die Schalterstellungen <code>PMSTAT</code> bzw. <code>PMDUMP</code> zu
deaktivieren.
Es werden dann keine Statistiken bzw. es wird kein Dump gedruckt.</li>
<li>Sobald die Kennung <code>dd</code> mit <code>tdldefsys()</code> erlangt wurde, kann zu jeder Zeit
<code>tdlprtstat()</code> aufgerufen werden.
Interessant sind diese Daten i.a. nur am Ende einer Integration.</li>
</ol>
<p>Die Statistiken sind für jede Kennung verschieden und völlig unabhängig
voneinander.
Dies gilt auch für die Schaltervariablen, ob Inklusiv- oder Exklusivoptionen.
Bei dem obigen Beispiel der simplen Schätzung des globalen Fehlers mit Hilfe
von $g$ und $u$, werden, falls gewünscht, zwei verschiedene Statistiken ausgegeben.
Man erkennt dann, daß i.a. die Berechnung von $g$ aufwendiger ist, d.h. es
werden i.d.R. mehr Funktionsauswertungen, Jacobimatrixauswertungen,
$LU$-Zerlegungen, etc., durchgeführt.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/11-16-tendler-1-grobaufbau-und-prinzipielle-ueberlegungen</link>
		<guid>https://eklausmeier.goip.de/blog/2025/11-16-tendler-1-grobaufbau-und-prinzipielle-ueberlegungen</guid>
		<title>TENDLER: 1. Grobaufbau und prinzipielle Überlegungen</title>
		<category>mathematics</category>
		<category>C / C++</category>
		<pubDate>Sun, 16 Nov 2025 14:00:00 +0100</pubDate>
		<description><![CDATA[
<p>TENDLER Programmbeschreibung.</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-16-tendler-1-grobaufbau-und-prinzipielle-ueberlegungen">TENDLER: 1. Grobaufbau und prinzipielle Überlegungen</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-17-tendler-2-benutzung-des-programms">TENDLER: 2. Benutzung des Programmes</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-18-tendler-3-der-praediktor">TENDLER: 3. Der Prädiktor</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/11-30-tendler-4-die-korrekturiteration">TENDLER: 4. Die Korrektoriteration</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2026/03-10-tendler-5-die-fehlerkontrolle">TENDLER: 5. Die Fehlerkontrolle</a></li>
</ol>
<hr>
<ul>
<li><a href="#SpracheC">1. Die Sprache C</a></li>
<li><a href="#OOProgrammierung">2. Objektorientierte Programmierung</a></li>
<li><a href="#Evolution">3. Evolution von Differentialgleichungslösern</a></li>
<li><a href="#Organisation">4. Statische und dynamische Organisation des Programmes TENDLER</a></li>
<li><a href="#Programmrealisierungen">5. Programmrealisierungen von Mehrschrittformeln</a></li>
<li><a href="#Speicherplatz">6. Speicherplatzaufwand bei Mehrschrittformeln</a></li>
</ul>
<hr>
<blockquote>
<p>In the late 1960's we witnessed a “software crisis”, which many
people thought was paradoxical because programming was supposed to be
so easy.
As a result, people are now beginning to renounce every feature of
programming that has become guilty by association with difficulties;
not only <em>goto</em> statements are being questioned, but we also hear
complaints about floating-point calculations, global variables,
semaphores, pointer variables, even assignment statements.
Soon we might be restricted to only a dozen or so programs that
are sufficiently simple as to be allowable; then we will be
almost certain that these programs cannot lead us into trouble,
but of course we won't be able to solve many problems.
$\ldots$ and I do consider assignment statements and pointer
variables to be among computer science's “most valuable treasures”.</p>
<p><a href="https://dl.acm.org/doi/pdf/10.1145/356635.356640">D.E. Knuth (1974)</a></p>
</blockquote>
<blockquote>
<p>C procides the infinitely abusable goto statement, and labels
to branch to. Formally, the <code>goto</code> is never necessary, and in
practise it is almost easy to write code without it.
We have not used <code>goto</code> in this book.</p>
<p><a href="https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/C_Book_2nd.pdf">B.W. Kernighan, D.M. Ritchie (1978)</a></p>
</blockquote>
<p>Hier werden zuerst einige Eigenschaften der Sprache C in tabellarischer
Form aufgelistet um das Verständnis weiterer Abschnitte zu erleichtern.
Auch ein sehr kurzer Überlick über den Entstehungsverlauf moderner
Löser für gewöhnliche Differentialgleichungen wird angegeben.
Anschliessend wird der grundsätzliche Aufbau des Programmes
TENDLER beschrieben, welches auf zyklischen Formeln basiert.
Der hier gegebene Überblick ist lediglich kursorisch, da erst in den
folgenden Abschnitten genauer auf die Einzelheiten der verschiedenen
Segmente eingegangen wird.
Schließlich werden Analogien zu Regelsystemen aufgezeigt.</p>
<p>Differentialgleichungslöser benötigen nicht unerheblichen Speicherplatz
zur Erfüllung der ihnen aufgetragenen Aufgaben.
An dieser Stelle soll genauer aufgeschlüsselt werden wie sich der
Speicherplatzbedarf ändert in Abhängigkeit von der Höchstordnung und
der Anzahl der Stufen innerhalb eines Zykluses.
Zugleich wirken die verschiedenen Datenorganisationen zurück auf die
Effizienz mit der gewisse Operationen, die notgedrungen bei einer
vollautomatischen Lösung anfallen, wie z.B. Interpolation, durchgeführt
werden können.
Zahlreiche Differentialgleichungslöser haben sich zu umfangreichen
Programmpaketen entwickelt.
Diese Entwicklung geschah nicht auf einen Schlag, sondern die Programme
entwickelten sich immer stückchenweise weiter.
Es ist aus diesem Grunde von Interesse zu beleuchten wie sich verschiedene
Versionen eines Programmes unterscheiden.</p>
<p>Biographpisch.</p>
<ol>
<li><a href="https://en.wikipedia.org/wiki/Donald_Knuth">Donald Ervin Knuth</a> (*1938)</li>
<li><a href="https://en.wikipedia.org/wiki/Brian_Kernighan">Brian Wilson Kernighan</a> (*1942)</li>
<li><a href="https://en.wikipedia.org/wiki/Dennis_Ritchie">Dennis Mike Ritchie</a> (1941–2011)</li>
<li><a href="https://en.wikipedia.org/wiki/Bjarne_Stroustrup">Bjarne Stroustrup</a> (*1950)</li>
</ol>
<h2>1. Die Sprache C<a id=SpracheC></a></h2>
<blockquote>
<p>C was chosen as the base language for C++ because it</p>
<ol>
<li>is versatile, terse, and relatively low-level;</li>
<li>is adequate for most system programming tasks;</li>
<li>runs everywhere and on everything; and</li>
<li>fits into the UNIX programming environment.</li>
</ol>
<p>B. Stroustrup (1986)</p>
</blockquote>
<blockquote>
<p>There are several morals to this story.
First don't pick the most complex language to add
nonstandard arithmetic to.
Secondly, don't depend on compiler writers.
Thirdly, develop the package so it can be adapted to other
systems as easily as possible.</p>
<p>C.B. Dunham (1971)</p>
</blockquote>
<p>Entwicklungssprache des Programmes TENDLER ist C.</p>
<p>Konzeptionell wurden jedoch zahlreiche Funktionen von der Sprache C++
beeinflußt.</p>
<p>Für die Sprache ist das Buch “The C Programming Language” von <a href="https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/C_Book_2nd.pdf">Kernighan/Ritchie (1988)</a> maßgeblich.
Die Sprache C++ wird beschrieben in dem Buch von <a href="https://chenweixiang.github.io/docs/The_C++_Programming_Language_4th_Edition_Bjarne_Stroustrup.pdf">Stroustrup (2013)</a>, erste Auflage von 1986.</p>
<p>Eine vergleichsweise ausführliche Bibliographie über UNIX und die Sprache C
findet man in dem Übersichtsaufsatz von <a href="https://doi.org/10.1007/BF01086178">A.N. Maslov (1987)</a>.</p>
<p>Die Liste der reservierten Schlüsselwörter in der Sprache C und C++ lautet:</p>
<pre class="line-numbers"><code class="language-cpp">asm          auto       break        case        char
class(2)     const(1)   continue     default     delete(2)
do           double     else         enum(1)     extern
float        for        friend(2)    goto        if
inline(2)    int        long         new(2)      operator(2)
overload(2)  public(2)  register     return      short
sizeof       static     struct       switch      this(2)
typedef      union      unsigned     virtual(2)  void(1)
while

(1) nicht in oldstyle C
(2) nur in C++
</code></pre>
<p>Die Schlüsselwörter <code>signed</code> und <code>volatile</code> sind in C++ für spätere
Versionen reserviert, sind aber augenblicklich undefiniert.
Das Schlüsselwort <code>entry</code> wurde von oldstyle C für spätere Versionen
reserviert, ist aber nicht benutzt.
<code>fortran</code> ist bei einigen Übersetzern ebenfalls reserviert.
<code>asm</code> ist in C++ reserviert, in C allerdings lediglich potentiell reserviert.
In C ist u.U. <code>noalias</code> ebenfalls als Schlüsselwort reserviert.
<code>volatile</code> ist in C reserviert, nicht jedoch in oldstyle C.</p>
<p>Gewisse nicht-graphische Zeichen können durch die folgenden
Ersatzsymbolfolgen dargestellt werden.</p>
<table>
<thead>
<tr>
<th>Zeichen</th>
<th>Abk.</th>
<th>C code</th>
</tr>
</thead>
<tbody>
<tr>
<td>Zeilenvorschub</td>
<td>NL (LF)</td>
<td><code>\n</code></td>
</tr>
<tr>
<td>Horizontaler Tabulator</td>
<td>HT</td>
<td><code>\t</code></td>
</tr>
<tr>
<td>Vertikaler Tabulator</td>
<td>VT</td>
<td><code>\v</code></td>
</tr>
<tr>
<td>Zeichen zurück</td>
<td>BS</td>
<td><code>\b</code></td>
</tr>
<tr>
<td>Zeilenvorschub</td>
<td>CR</td>
<td><code>\r</code></td>
</tr>
<tr>
<td>Seitenvorschub</td>
<td>FF</td>
<td><code>\f</code></td>
</tr>
<tr>
<td>akustische Meldung</td>
<td>BEL</td>
<td><code>\a</code></td>
</tr>
<tr>
<td>umgekehrter Schrägstrich</td>
<td><code>\</code></td>
<td><code>\\</code></td>
</tr>
<tr>
<td>Fragezeichen</td>
<td><code>?</code></td>
<td><code>\?</code></td>
</tr>
<tr>
<td>Hochkomma</td>
<td>'</td>
<td><code>\'</code></td>
</tr>
<tr>
<td>Anführungsstriche</td>
<td><code>&quot;</code></td>
<td><code>\&quot;</code></td>
</tr>
<tr>
<td>Bitmuster (oktal)</td>
<td><code>0ddd</code></td>
<td><code>\</code><em>ddd</em></td>
</tr>
<tr>
<td>Bitmuster (sedezimal)</td>
<td><code>0xddd</code></td>
<td><code>\x</code><em>ddd</em></td>
</tr>
</tbody>
</table>
<p>Hiervon wird in sehr eingeschränktem Maße bei den Statistiken Gebrauch
gemacht.</p>
<p>Wichtig ist ferner die Operatorenreihenfolge.
Hierbei gilt: Unäre Operatoren und Zuweisungsoperatoren sind
rechts-assoziativ, alle anderen sind links-assoziativ.
D.h. <code>a=b=c</code> bedeutet <code>a=(b=c)</code>, <code>a+b+c</code> bedeutet <code>(a+b)+c</code>,
und <code>*p++</code> bedeutet <code>*(p++)</code>, keinesfalls <code>(*p)++</code>.</p>
<p>Die Vorrangregeln und die Reihenfolgen des Auswertens lauten wie nachstehend.</p>
<table>
<thead>
<tr>
<th>Operator</th>
<th>Assoziativität</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>()</code>     <code>[]</code>     <code>-&gt;</code>     <code>.</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>!</code>     <code> </code>     <code>++</code>     <code>--</code>     <code>-</code>     <em>(Typ)</em>     <code>*</code>     <code>&amp;</code>     <code>sizeof</code></td>
<td>rechts nach links</td>
</tr>
<tr>
<td><code>*</code>     <code>/</code>     <code>%</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>+</code>     <code>-</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>&lt;&lt;</code>     <code>&gt;&gt;</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>&lt;</code>     <code>&lt;=</code>     <code>&gt;</code>     <code>&gt;=</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>==</code>     <code>!=</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>&amp;</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>^</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>|</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>|</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>||</code></td>
<td>links nach rechts</td>
</tr>
<tr>
<td><code>?:</code></td>
<td>rechts nach links</td>
</tr>
<tr>
<td><code>=</code>     <code>+=</code>     <code>-=</code>      etc.</td>
<td>rechts nach links</td>
</tr>
<tr>
<td><code>,</code></td>
<td>links nach rechts</td>
</tr>
</tbody>
</table>
<h2>2. Objektorientierte Programmierung<a id=OOProgrammierung></a></h2>
<blockquote>
<p>The crew was about to go into this dump sequence when all four of our
flight computer machines locked up and went “catatonic.”
Had this been the real thing, the Shuttle would probably have had
difficulty landing. $\ldots$ but there it was: Our machines all stopped.
Our greatest fear had materialized---a generic software problem.</p>
<p><a href="https://dl.acm.org/doi/pdf/10.1145/358234.358246">Jack F. Clemons (1984)</a></p>
</blockquote>
<p><strong>1.</strong> Nicht nur bei interaktiven Programmen, häufig unter Umgebungen mit
graphischer Oberfläche, sondern auch bei anderen komplizierteren
Software-Systemen ist das Prinzip der objektorientierten Programmierung
sehr nützlich.
Als Beispiel sei das Programm TENDLER angeführt.
Hier gibt es eine Fülle von Anwendungsmöglichkeiten, von denen hier
einige genannt werden sollen.
Von Funktionszeigern wird schon jetzt sehr stark Gebrauch gemacht,
nämlich bei der Auswahl der Iterationsarten, bei der Steuerung des
Hauptprogrammes und natürlich bei den Aufrufen der Funktion und der
Jacobimatrix.</p>
<p>Die objektorientierte Sichtweise für die Korrektoriteration:</p>
<ol>
<li>Daten: Jacobimatrix $J$, Iterationsmatrix $W$, Startiterationswert $y^0$</li>
<li>Operation: Lieferung einer Näherung $y^\nu$ für $y^*$, mit $y^*=h\gamma f(y^*)+\psi$</li>
<li>Nebenindikatoren: Versagen, fehlerhafte Eingaben, Schaltinformation</li>
</ol>
<p>Ausführung in Pseudo-C++.
Drei Punkte “<code>...</code>” heißt in diesem Falle nicht variable Anzahl an
Argumenten, sondern deutet hier lediglich nicht weiter interessierende
Programmteile an.</p>
<pre class="line-numbers"><code class="language-cpp">class correct {
    real *rw,   // Iterationsmatrix $W=I-h\gamma J$
         *rj;   // Jacobimatrix $J$
    index* intpivot;
    friend ecfunc(...);  // ...
    // ...
public:
    iwtype setconv(...,itr);
    virtual itfunc(...,real tau);
    // ...
    correct(...);   // Konstruktor
    ~correct(...);  // Destruktor
};
</code></pre>
<p>Zu beachten ist, daß ein anderer Programmierstil die Probleme nicht
selbstständig löst, mag der Programmierstil auch noch so neumodisch klingen.
Ein neues Programmierparadigma ermöglicht jedoch u.U. eine bessere und
leichtverständlichere Gliederung des Programmes.
Bei der objektorientierten Programmierung geht es maßgeblich um
eine Gliederung und das Verdeutlichen einer übergreifenden Ordnung.
Nicht selten jedoch werden die Programme auch erheblich kürzer.</p>
<p>Objektorientierte Sichweise für die Fehlerkontrolle und die
Schrittweiten- und Ordnungssteuerung:</p>
<ol>
<li>Daten: Differenzentabelle (Differenzenmatrix)
$(\nabla^0 y,{\mskip 3mu}\ldots,\nabla^{p+2}y)$ in unmodifizierter Darstellung
oder modifizierte Darstellung in der Form
$(\phi_1,{\mskip 3mu}\ldots,\phi_{p+2})$</li>
<li>Operationen: Aktualisierung der Differenzentabelle,
Bereitstellen von Schätzwerten für die Ableitungen der Ordnung $p-1$,
$p$ und $p+1$, Interpolation</li>
<li>Nebenindikatoren: Versagen, fehlerhafte Eingabe</li>
</ol>
<p>Problem: Berücksichtigung von Statistiken.
Zum einen könnte man sie als globale Variablen auffassen, oder aber besser
man deklariert sie als <code>friend</code> aller wichtigen Klassen.</p>
<p>Ein alternativer Realisierungsvorschlag für die Korrektoriteration
wäre beispielsweise:</p>
<pre class="line-numbers"><code class="language-cpp">class correct {
    friend ecfunc(...);  // ...
    // ...
public:
    iwtype setconv(..., int itr);
    // ...
    virtual itfunc(...);
    correct(...);
     correct(...);
};
</code></pre>
<p>Die abgeleitete Klasse kontrolliert den Zugriff auf $J$ und $W$,
beispielsweise</p>
<pre class="line-numbers"><code class="language-cpp">class mni: public correct {
    real *rw, *rj;
    index* intpivot;
    // ...
public:
    itfunc(..., real tau);
    // ...
    mni(...);   // Konstruktor für mni
    ~mni(...);  // Destruktor für mni
}
</code></pre>
<p><strong>2.</strong> Siehe <a href="https://chenweixiang.github.io/docs/The_C++_Programming_Language_4th_Edition_Bjarne_Stroustrup.pdf">Bjarne Stroustrup (2013)</a>.
Worin besteht nun der Unterschied zwischen einer Klasse und einem Modul?
Das Unsichtbarmachen von Daten und Operationen, und eine gegliederte
Benutzerschnittstelle erhält man auch durch Module (in C und C++: files as
module technique; in Modula: <code>MODULE</code>).</p>
<p>Eine Klasse ist ein Datentyp, im abstrakten Sinne.
Um eine Klasse zu benutzen muß man eine <em>Inkarnation</em> der Klasse schaffen,
also Objekte dieser Klasse erzeugen, sogenannte Instanzen.
Man kann hierbei beliebig viele Objekte dieser Klasse erzeugen.</p>
<p>Im Gegensatz hierzu ist ein Modul selbst ein Objekt.
Um ein Modul zu benutzen ist es lediglich zu initialisieren, allerdings
gibt es dann auch nur ein einziges Objekt.</p>
<p>Durch Klassen wird eine Vielzweckverwendbarkeit erreicht, wie man sie
mit Modulen nicht erreichen kann.</p>
<p>Z.B. in einem Übersetzer, in dem man sich eine Klasse deklariert hat,
welche eine Symboltabelle implementiert, kann man sich danach beliebig
viele Symboltabellen durch Definition erzeugen: eine für globale Variablen,
eine für Schlüsselwörter, eine für lokale Variablen, u.s.f.
Die ringzyklische Liste für $(\nabla^iy)_i$ und für $z=hf$ ließen
sich gut als abgeleitete Klasse einer generischen, zyklischen Ringliste
darstellen.
Dies als primitives Beispiel.</p>
<p><strong>3.</strong> Ein weiteres Beispiel für Klassen, abgeleitete Klassen und <code>virtual</code>
functions bei interaktiven graphischen Arbeiten folgt im weiteren,
man vgl. auch <a href="https://chenweixiang.github.io/docs/The_C++_Programming_Language_4th_Edition_Bjarne_Stroustrup.pdf">Stroustrup (2013)</a>.
Es soll ein Programm geschrieben werden, welches geometrische Figuren
auf dem Bildschirm darstellt.
Die gemeinsamen Eigenschaften aller Figuren seien repräsentiert durch
eine Klasse <code>shape</code>, und die den einzelnen Figuren inhärenten
Eigenschaften sind in abgeleiteten Klassen abgelegt.</p>
<pre class="line-numbers"><code class="language-cpp">class shape {
    point center;
    color col;
    // ...
public:
    void move(point to) { center=to; draw(); }
    point where() { return center; }
    virtual void draw();
    virtual void rotate(int);
    // ...
};
</code></pre>
<p>Funktionen, welche keinen besonderen Bezug auf die speziellen Eigenschaften
der Figuren nehmen, können jetzt wie üblich deklariert werden.
Der Rest wird als <code>virtual</code> deklariert, d.h. die eigentliche
Definition erfolgt in einer abgeleiteten Klasse.
Beispielsweise für einen Kreis</p>
<pre class="line-numbers"><code class="language-cpp">class circle: public shape {
    int radius;
public:
    void draw();
    void rotate(int i); { /* do nothing */ }
    // ...
};
</code></pre>
<p>Wenn nun <code>shape_vec[]</code> ein Vektor von Figuren ist, so kann man wie folgt
vorgehen, um sämtliche Figuren auf dem Schirm um $45^\circ$ zu drehen.</p>
<pre class="line-numbers"><code class="language-C">for (int i=0; i&lt;no_of_shapes; ++i)
    shape_vec[i].rotate(45);
</code></pre>
<p>Die typische Operation, die ein Benutzer vollzieht, ist, daß er auf ein
Objekt zeigt und fragt was es ist und dieses Objekt sich entprechend
verhalten soll, ohne daß man jedes Detail genauer spezifizert und ohne daß
man Typusinformationen beisteuert.
Das Programm muß diese selber ausfindig machen.</p>
<p><strong>4.</strong> <a href="https://doi.org/10.5555/90482.90491">Jerrell (1990)</a> hat eine sehr elegante
Möglichkeit vorgeschlagen, in der Sprache C++ automatisch zu differenzieren,
ohne Rückgriff auf numerische Verfahren oder Formelmanipulationssprachen.
Zwei Eigenschaften machen diese Realisierung in C++ ggü. anderen Sprachen
besonders vorteilhaft: einmal das Operator <code>overload</code>ing und das
<code>class</code>-Konzept.
Die grundsätzliche Idee ist hierbei einfach: Funktionen wie $\sin$, $\cos$,
etc., und Operatoren $\pm$, u.s.w., werden einfach überladen.
Genauer:</p>
<pre class="line-numbers"><code class="language-cpp">overload log, exp, sin, cos;

class ad {                       // class for automatic differentiation
    double value;                // $f(x)$
    double gradient[NVAR];       // $\nabla f$
    double hessian[NVAR][NVAR];  // $\mathop{\rm Hess}f=(\partial^2f/\partial x_i\partial y_j)_{ij}$
public
    ad (double, int);     // Initialisierung der Variablen
    ...
    friend ad operator + (ad, ad);
    friend ad operator + (double, ad);
    friend ad operator + (ad, double);
    ...
    double log (double);
    friend ad log (ad);
    ...
}
</code></pre>
<p>Für die automatische Differentiation von $f(x_1,x_2)=x_1+x_2+\ln x_1x_2$
an der Stelle $(x_1,x_2)=(1.0,2.0)$ schriebe man einfach</p>
<pre class="line-numbers"><code class="language-C">#define  NVAR  2
#include &quot;ad.hpp&quot;
int main (void) {
    ad x1(1.0, 1),  x2(2.0, 2);
    ad z = x1 + x2 + log(x1 * x2);
    ...
}
</code></pre>
<p>Für $f(x_1,x_2)=\exp(x_1^2+x_2^2)$ schriebe man ganz entsprechend</p>
<pre class="line-numbers"><code class="language-C">ad z = exp (x1^2 + x2^2);
</code></pre>
<p>Diese automatische Erzeugung der Ableitungen hat viele Vorteile:</p>
<ol>
<li>sie ist i.a. wesentlich genauer als die numerische Differentiation,</li>
<li>i.d.R. leichter zu programmieren und</li>
<li>fehlerunanfälliger für den Anwender.</li>
</ol>
<p>Wird $f$ korrekt ausgewertet, so wird gleichzeitig auch $f'$ und $f''$
korrekt ausgewertet.</p>
<p>Für das Programm TENDLER wären offensichtliche Modifikationen nötig, um zum
einem nicht ständig bei jeder Funktionsauswertung eine Jacobimatrixauswertung
zu veranlassen und zum anderen werden die zweiten Ableitungen bei den
zyklischen Formeln von J.M. Tendler grundsätzlich nicht benötigt.
Diese Modifikationen sind völlig problemlos zu realisieren,
genauso einfach wie die notwendige variable Dimensionierung.</p>
<p>Die grundsätzlichen Ideen lassen sich auch für die Programmiersprachen C,
Pascal und Fortran übernehmen, allerdings müssen gewisse Umwege in Kauf
genommen werden, siehe <a href="https://dl.acm.org/doi/pdf/10.1145/1057967.1057968">Jerrell (1989)</a>.</p>
<p>Die grundsätzliche Idee des obigen Ansatzes ist schon älter und in der
Literatur mehrfach wiederentdeckt worden.
Bei obiger Klasse <code>ad</code> ist <code>hessian[][]</code> eine quadratische Matrix.
Wenn $f\colon\mathbb{R}^n\to\mathbb{R}$ zweimal stetig differenzierbar ist (es genügen
aber auch leicht schwächere Voraussetzungen), so ist $\mathop{\rm Hess} f$
eine symmetrische Matrix.
Es werden daher nur, wenn es darauf ankommt, nur $(n+1)n/2$ Speicherstellen
benötigt.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://www.legacy.com/us/obituaries/azdailysun/name/max-jerrell-obituary?id=34816064">Max E. Jerrel</a>, <a href="https://www.researchgate.net/scientific-contributions/Max-E-Jerrell-27928833">ResearchGate</a></li>
</ol>
<h2>3. Evolution von Differentialgleichungslösern<a id=Evolution></a></h2>
<blockquote>
<p>Although there are a few limitations of computers such as the amount
of memory and processor speed, these limitations do not matter for
a large collection of programs.
Instead, the limitations encountered in programming are most often
related to our own, very human capabilities: The principal limitations
on the programs we write are often imposed by our inability to
comprehend the design — not by physical capabilities of computers.</p>
<p>W.A. Wulf, M. Shaw, P.N. Hilfinger (1981)</p>
</blockquote>
<p>Der Übergang vom Programm <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">DIFSUB</a>, zum Programm <a href="https://computing.llnl.gov/sites/default/files/dlsode.f">LSODE</a> geschah nicht ruckartig
und plötzlich, sondern vollzog sich in einzelnen Zwischenschritten, wobei das
Programm GEAR einen Zwischenschritt markiert.
Das Programm GEAR ist allerdings nicht in irgend einer Form lediglich ein
Zwischenprodukt, sondern selbst universell einsetzbar.</p>
<p>Der Übergang von <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362573">DIFSUB</a> zu GEAR ist maßgeblich gekennzeichnet durch die
folgenden Stichworte:</p>
<ol>
<li>Die variable Dimensionierung im Programm DIFSUB wurde aufgegeben
zugunsten einer statischen Dimensionierung in <code>common</code>-Blöcken.
Eine Differentialgleichungsdimension von größer als 20 erfordert eine
völlige Neuübersetzung des Programmes GEAR.
Dies ist nicht so wesentlich, wie man vermuten könnte, da zum einen das
Programm GEAR vergleichsweise kurz ist und zum anderen, da eine neue
Funktion ohnehin eine Übersetzung dieser (einzelnen) Funktion benötigt.
Im letzteren Falle können dann auch im <code>common</code> Block einige Konstanten
gesetzt werden und gleich das gesamte Programm GEAR mitübersetzt werden.</li>
<li>Veränderte heuristische Parameter beim Korrektor-Konvergenztest
(Hindmarsh-Test) und bei der Fehlerkontrolle.</li>
<li>Kein anfängliches Abspeichern in <code>save</code>.
Dies wurde so im Programm DIFSUB gemacht, was natürlich relativ schnell
geht (Datentransport, keine Rechnung).
Bei einem Konvergenztestversagen oder einem Fehlertestversagen ist dann
lediglich eine Kopie dieses <code>save</code> Bereiches zurückzuspeichern.
Im Programm GEAR werden die alten Werte in der Nordsieck-Darstellung
zurückberechnet.
Der Vorteil liegt hierbei darin, daß weniger Speicher benötigt wird.
Der Nachteil ist darin zu suchen, daß durch zusätzliche Rechnung zum
einen die Werte im Nordsieck-Vektor weiter verfälscht werden und
zum anderen damit ein Versagen etwas aufwendiger wird.
Doch ist es gerade die Aufgabe der Schrittweiten- und Ordnungssteuerung
dies zu vermeiden.
Auf Vektorrechnern hätte das Programm DIFSUB aufgrund seiner gewählten
Datenorganisation ggü. dem Programm LSODE stellenweise prinzipielle,
leichte Vorteile.
Natürlich wird das Programm LSODE auf einer Cray erheblich schneller
ablaufen als das Programm DIFSUB.
Zum einen weil das Programm LSODE Compiler-Direktiven für die Cray
enthält und zum anderen weil die Unterprogrammsammlung LINPACK
vektorisiert auf der Cray zur Verfügung steht.
(LSODE verwendet LINPACK.)</li>
<li>$LU$-Zerlegung anstatt Matrixinvertierung bei steifen Verfahren.</li>
</ol>
<p>Der Übergang von GEAR zu LSODE.
Gelegentlich wird von Benutzern dieser beiden Programme berichtet, daß sich
die Ergebnisse beider Löser fast überhaupt nicht unterscheiden.
Hierzu <a href="https://www.researchgate.net/publication/223520135_Remarks_on_the_choice_of_a_stiff_ordinary_differential_equation_solver">Skip Thompson (1986)</a>:</p>
<blockquote>
<p>There is no real reason to switch solvers in programs using the
older codes, however.</p>
</blockquote>
<p>Innerlich unterscheiden sich diese beiden Programme jedoch enorm.
U.a. ist das Programm LSODE erheblich umfangreicher als das
Programm GEAR.</p>
<ol>
<li>Erweiterte Fehlerabprüfungen und Fehlerbehandlungen.
Allgemein erweitertes “user-interface”.
Numerisch wird jedoch genau das gleiche Verfahren verwendet.</li>
<li>Geringfügig veränderte heuristische Parameter, wie
Anfangskonvergenzrate, Strategiefaktoren bei der Fehlerkontrolle und
bei der Schrittweiten- und Ordnungssteuerung.</li>
<li>Benutzung von LINPACK-Routinen anstatt optimierter,
“selbstgemachter” $LU$-Zerlegungen.</li>
<li>Stärkere Untergliederung in Unterprogramme und
Funktionsunterprogramme.</li>
</ol>
<p>Der Übergang von dem Programm STINT zu dem Programm TENDLER ist in
gewisser Hinsicht wesentlich markanter.
Hauptentwicklungsziel war neben einem schaltfähigen Programm, ein
leicht zu veränderndes Programm.
Dies ist u.a. interessant bei dem Vergleich neuerer Versuche, Taktiken,
etc., bei der Programmierung zyklischer linearer Mehrschrittformeln.</p>
<ol>
<li>Das ganze Programm ist in der Programmiersprache C programmiert,
anstatt in Fortran.</li>
</ol>
<ol>
<li>Starke Einkapselung von Aufgaben und entsprechende Kommentierung.
Data hiding.
Profiling und statistics.</li>
<li>Statt einer Triade (Hypermatrix) wird eine ringzyklische
Liste als zentrale Datenstruktur verwendet.
Dadurch wird ein Fehlschlag der Korrektoriteration oder der
Fehlerkontrolle etwas einfacher zu behandeln.</li>
<li>Der Benutzer erhält wesentlich mehr Informationen zurück.</li>
<li>Bequemere Benutzung durch eine Vielzahl von Treibern.
Die Parameterlisten zum Aufruf von Treibern sind kurz.
Irgendeine Einschränkung bei der Dimension der Differentialgleichung
besteht allerdings keineswegs, wie etwa bei dem Programm GEAR.
Rigorose Kontrolle von Eingabedaten.</li>
<li>Portabel: Übersetzer-spezifische Details (wie <code>NULL</code>, <code>size_t</code>, etc.)
sind in einer Header-Datei zentral zusammengefaßt.</li>
<li>Über 78 statistische Zähler inklusive einer Auswertung der
hierduch gewonnenen Daten.</li>
<li>Es können nun beliebig viele Differentialgleichungen gleichzeitig
gelöst werden.</li>
<li>Das Programm TENDLER ist <em>type-insensitive</em>.</li>
<li>Vollständige Vektorisierung.</li>
<li>5 verschiedene Korrektorarten in einem Programm.
Hinzufügung weiterer Iterationsarten einfach: Funktionszeiger.</li>
<li>1000 Zeilen $\longrightarrow$ 10000 Zeilen.</li>
</ol>
<p>Wie das Programm LSODE und die entsprechenden Modifikationen dieses
Programmes, z.B. LSODAR, so hat auch das Programm TENDLER von den
beiden Vorgängerprogrammen DIFJMT, siehe <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Tendler (1973)</a>, und STINT,
siehe Tendler/Bickart/Picel (1976), siehe <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">Tendler/Bickart/Picel (1978)</a>,
als auch von weiteren Programmen, Ideen und Konzepte übernommen, erweitert
und verfeinert.</p>
<p>Bibliographisch:</p>
<ol>
<li><a href="https://www.researchgate.net/profile/Joel-Tendler/research">Joel Marvin Tendler</a>: “<a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">A Stiffly Stable Integration Process Using Cyclic Composite Methods</a>”, Ph.D. Diss., Syracuse University, Syracuse, New York, 26-Feb-1973</li>
<li>Tendler, Joel Marvin und Bickart, Theodore A. und Picel, Zdenek:
“STINT: STiff ordinary differential equations INTegrator. Program and User Manual”,
Electrical and Computer Engineering Department, Syracuse University,
Syracuse, New York 13210, USA, and Department of Electrical Engineering,
Delft University of Technology, Delft, The Netherlands,
Technical Report TR-76-12, December 1976, <em>ii</em>+85 pages</li>
<li>Tendler/Bickart/Picel (1978): <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">A Stiffly Stable Integration Process Using Cyclic Composite Methods</a></li>
</ol>
<p>Der <a href="https://sundials.readthedocs.io/en/v5.8.0/introduction/History.html">Entstehungsbaum</a> für die beiden Programme LSODE und TENDLER ist in untenstehendem Diagramm angegeben.</p>
<div class=mermaid>
flowchart TD
    DIFSUB(DIFSUB, 1971)
    DIFBDF(DIFBDF)
    DIFJMT(DIFJMT, 1973)
    STINT(STINT, 1976)
    TENDLER(TENDLER V1, 1990)
    TENDLER2(TENDLER V2, 2026)
    GEAR(GEAR, GEARB, GEARS, GEARBI, GEARBIL, GEARIB, GEARV, GEARST, 1976)
    LSODE(LSODE, LSODA, LSODAR, LSODES, 1980)
    VODE(VODE, 1989)
    CVODE(CVODE, 1995)
    IDA(IDA, 1999)
%% Dependencies
    DIFSUB --> TendlerPhD
    TendlerPhD --> STINT
    STINT --> TENDLER
    TENDLER --> TENDLER2
    subgraph TendlerPhD
        direction LR
        DIFBDF --> DIFJMT
    end
    DIFSUB --> GEAR
    GEAR --> LSODE --> VODE --> CVODE --> IDA
</div>
<p>Die Jahresangaben in Klammern geben nicht notwendigerweise das
Entstehungsjahr der Erstversion an.</p>
<h2>4. Statische und dynamische Organisation des Programmes TENDLER<a id=Organisation></a></h2>
<blockquote>
<p>The program consists of a number of small, essentially unconnected
modules for code generation, a simple lexical analyzer, a canned parser
which we did not have to write, and some miscellany associated with
input files and the macro facility.
There are only about 15 global variables.
The program is currently about 1000 lines of C.
About 20 percent of these lines are “print” statements, generating the
output code.
To our everlasting shame, there are two GOTOs in the program.</p>
<p>B.W. Kernighan, L.L. Cherry (1976)</p>
</blockquote>
<p>Der statische, programmmässige Aufbau ist</p>
<ol>
<li>Prädiktor,</li>
<li>Korrektor,</li>
<li>Fehlerkontrolle und</li>
<li>Schrittweiten- und Ordnungssteuerung.</li>
</ol>
<p>Jeder dieser vier Segmente wird im weiteren ausführlicher beschrieben.</p>
<p>Der dynamische Aufbau ist jetzt für ein vierstufiges Verfahren</p>
<ol>
<li>$P(EC)^{i_1}$,</li>
<li>$P(EC)^{i_2}$, Fehlerkontrolle,</li>
<li>$P(EC)^{i_3}$, Fehlerkontrolle,</li>
<li>$P(EC)^{i_4}$, Fehlerkontrolle und
Schrittweiten- und Ordnungssteuerung,</li>
</ol>
<p>mit</p>
<div class=math>
$$
    1 \le i_k \le \mathtt{MAX}\alpha\mathtt{ITERAT}, \quad \alpha\in\{\mathtt{mni}, \mathtt{fix}\},
    \qquad k=1,\ldots,4.
$$
</div>
<p>In welcher Stufe eine Fehlerkontrolle durchgeführt werden soll, kann ebenfalls
gezielt gesteuert werden.
In diesem Falle wird deutlich, daß die erste Stufe anders behandelt wird als
die restlichen.
Der $P(EC)^{i_k}$-Modus ist lediglich illustrativ.
Ebenso gut hätte hier <em>PECE</em> stehen können.
Der Benutzer des Programmes TENDLER kann entscheiden, <em>welcher</em> Modus
verwendet werden soll, oder aber kann diese Entscheidung dem Programm
selber überlassen.</p>
<p>Der Start spielt hierbei eine Sonderrolle.
Die Statistiken überwachen das gesamte Geschehen, bleiben aber selbst stets
inaktiv, werden also nicht zu Entscheidungen mit hinzugezogen.
Der Schaltteil erkennt Steifheit, reagiert auf Steifheit, antwortet auf
Veränderungen und zwar in potentiell jedem Schritt.</p>
<p>Der Vergleich mit einem Regelkreis liegt sehr nahe.
Dieser Gedanke wird sogar auch fruchtbar angewendet und zwar bei den
Arbeiten von <a href="https://doi.org/10.1007/BF01418332">Deuflhard (1983)</a> und bei
<a href="https://lucris.lub.lu.se/ws/files/47936558/7358.pdf">Gustafsson/Lundh/Söderling (1988)</a>.
Siehe auch das Buch “<a href="https://link.springer.com/book/10.1007/978-0-387-21582-2">Scientific Computing with Ordinary Differential Equations</a>” von <a href="https://link.springer.com/book/10.1007/978-0-387-21582-2">Deuflhard/Bornemann (2002)</a>.</p>
<table>
<thead>
<tr>
<th>Terminologie Regelkreis</th>
<th>Löser</th>
</tr>
</thead>
<tbody>
<tr>
<td>Regelgröße/Zustandsgröße</td>
<td>vom Programm berechnete Näherungswerte</td>
</tr>
<tr>
<td>Führungsgröße</td>
<td>exakte Lösung</td>
</tr>
<tr>
<td>Stellgrößen</td>
<td>Schrittweite, Ordnung, Iterationsarten</td>
</tr>
<tr>
<td>Latenzzeit/Totzeit</td>
<td>1–8 Stufen</td>
</tr>
<tr>
<td>Hilfsstellgrößen/Hilfsregelgrößen</td>
<td>Fehlerkontrolle</td>
</tr>
</tbody>
</table>
<p>Wie üblich ist die exakte Lösung i.a. nicht verfügbar.
Es sei bemerkt, daß sich <a href="https://de.wikipedia.org/wiki/Schweinezyklus">Schweinezyklen</a> bzgl. des Schaltens im Programm
TENDLER gut beobachten lassen.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://de.wikipedia.org/wiki/Peter_Deuflhard">Peter Jochen Deuflhard</a> (1944 – 2019)</li>
<li><a href="https://www.researchgate.net/scientific-contributions/Kjell-Gustafsson-2037529642">Gustafsson, Kjell</a></li>
<li><a href="https://www.researchgate.net/scientific-contributions/Michael-Lundh-77706462">Lundh, Michael</a></li>
<li><a href="https://www.researchgate.net/profile/Gustaf-Soederlind">Söderling, Gustaf</a></li>
</ol>
<h2>5. Programmrealisierungen von Mehrschrittformeln<a id=Programmrealisierungen></a></h2>
<blockquote>
<p>Es gilt das Gesetz von der Erhaltung der Mühsal.</p>
<p><a href="https://de.wikipedia.org/wiki/Joachim_Treusch">Prof. Dr. Joachim Treusch</a> (1984)</p>
</blockquote>
<p>Neben den verschiedenen Formeln, welche lineare Mehrschrittverfahren in
zahlreiche Lager trennt, erfolgt eine weitere Untergliederung durch die
Art und Weise der Programmrealisierung.
Hier sei vorwiegend an die Darstellung der Lösung gedacht.
Maßgeblich sind hier die Darstellung in Form klassischer
rückwärtsgenommener Differenzen, modifizierten rückwärtsgenommenen
Differenzen und die Nordsieck-Darstellung.
Jeder dieser Darstellungen entfaltet in gewissen Situationen seine
ganz besonderen Vorzüge.
Jedoch hat auch jede Darstellung seine Nachteile.
Anhand ganz konkreter Programme, wie TENDLER, DIFSUB und DE/STEP, sollen
die benötigte Anzahl gewisser signifikanter Rechenoperationen verglichen
werden.</p>
<p>VOP heiße im folgenden <em>Vektoroperation</em>.</p>
<p><strong>1. Aktualisierungsaufwand pro Schritt/Stufe.</strong>
Zur Pflege und Erhaltung benötigt jede Darstellung der Lösung einen
gewissen Verwaltungsaufwand.
Dieser berücksichtigt das Fortschreiten der Lösung in der Zeit.
Im einzelnen fallen hier jeweils an:</p>
<p><strong>TENDLER:</strong>
$\nabla^{i+1}y_1=\nabla^iy_1-\nabla^iy_0$, für $i=1,\ldots,p$.
Insgesamt also $p$ VOPs.</p>
<p><strong>DE/STEP:</strong>
Hier sind stets $p+2$ VOPs durchzuführen und zwar</p>
<div class=math>
$$
    \varphi_{p+1} \gets \mathtt{yp}-\varphi_{p+2},\quad
    \varphi_{p+2} \gets \varphi_{p+1}-\varphi_{p+2},\qquad
    \varphi_i \mathrel{\mathtt{+=}} \varphi_{p+1},\quad i=1,\ldots,p.
$$
</div>
<p><strong>DIFSUB:</strong>
Hier sind $p-2$ VOPs durchzuführen und zwar</p>
<div class=math>
$$
    y_i\gets y_i+a_i{\mskip 3mu}\mathtt{error}_i, \qquad i=3,\ldots,p+1.
$$
</div>
<p><strong>2. Prädiktorbildung.</strong>
Zur Berechnung eines Startwertes für die Picard- oder
Newton-Kantorovich Iteration wird ein explizites Mehrschrittverfahren
benutzt, genannt Prädiktor.</p>
<p><strong>TENDLER:</strong> Hier sind $2p+4$ VOPs nötig.</p>
<p><strong>DE/STEP:</strong> Ebenfalls $2p+4$ VOPs.</p>
<p><strong>DIFSUB:</strong> Es sind hier am meisten Rechenoperationen nötig, nämlich $(p+1)p/2$ VOPs.
Berechnet wird</p>
<div class=math>
$$
    \left(y_{p+j-j_1} \mathrel{\mathtt{+=}} y_{p+j-j_1+1},\quad j_1=j,\ldots,p+1\right)
    \qquad j=2,\ldots,p+1.
$$
</div>
<p><strong>3. Korrektoriteration.</strong>
Die eigentliche Iteration erfordert ebenfalls gewissen Rechenaufwand, neben
der Auswertung der Funktion.
Zur Vereinfachung sei zuerst hier lediglich der Fall der
$P(EC)E$-Picard Iteration betrachtet.</p>
<p><strong>TENDLER:</strong> 3 VOPs, für $y^{\nu+1}\gets y^\nu+\gamma(hf(y^\nu)-z^\nu)$</p>
<p><strong>DE/STEP:</strong> 3 VOPs, für $x\gets y+\lambda(z-u)$.</p>
<p><strong>DIFSUB:</strong> ca. 4 VOPs, für</p>
<div class=math>
$$
    \mathtt{save}_9 \gets y_2-h{\mskip 3mu} \mathtt{save}_{10},\quad
    y_1 \mathrel{\mathtt{+=}} a_1{\mskip 3mu} \mathtt{save}_9,\quad
    y_2\mathrel{\mathtt{-=}} \mathtt{save}_9,\quad
    \mathtt{error} \mathrel{\mathtt{+=}} \mathtt{save}_9
$$
</div>
<p><strong>4. Neue, veränderte Schrittweite nach erfolgreichem Schritt.</strong>
Nach erfolgreichem Durchlaufen eines Schrittes oder eines gesamten
Zykluses, kann die Schrittweiten- und Ordnungssteuerung vorschlagen,
daß die Schrittweite und die Ordnung geändert werden sollen.
Hierfür sind dann jedoch Startwerte auf einem anderen Gitter nötig, oder
die Formel muß sich ändern.
Erneut geschieht diese Änderung nicht kostenfrei, sondern erfordert
gewisse Rechenschritte.</p>
<p><strong>TENDLER:</strong>
Das Programm TENDLER berechnet die neuen benötigten Startwerte durch
Interpolation.
Es ist hierbei $p-1$ mal zu interpolieren, wobei $p$ die neue Ordnung ist.
Nachdem die neuen zurückliegenden Werte durch Interpolation bestimmt
wurden, ist die Differenzentabelle neu aufzubauen.
$y_{m\ell}$ ist schon bekannt, darum muß man nur $(p-1)$-mal interpolieren,
anstatt $p$-mal.
Hierzu wird $p-1$ mal die Funktion <code>newtform()</code> aufgerufen, welche
jeweils $p+1$ VOPs benötigt.
Die Neugenerierung der Differenzentabelle in der Funktion <code>formbackdiff()</code>
benötigt $(p+1)p/2$ VOPs.
Schließlich ist für den nächsten Prädiktorschritt noch $z=hf$ auf die
neue Schrittweite anzupassen: Die Funktion <code>adapthz()</code> benötigt genau eine
VOP.
Insgesamt also</p>
<div class=math>
$$
    (p-1)(p+1)+{(p+1)p\over2}+1 = {3\over2}p^2+{1\over2}p.
$$
</div>
<p><strong>DE/STEP:</strong>
Sei $s$ die Anzahl der Schritte mit konstanter Schrittweite $h$.
Falls $p&gt;s$, dann $p-(s+1)$ VOPs, wegen</p>
<div class=math>
$$
    \bigl(\varphi_{s+1},{\mskip 3mu}\ldots,{\mskip 3mu}\varphi_p\bigr)\cdot
        \mathop{\rm diag}\left(\beta_{s+1},\ldots,\beta_p\right).
$$
</div>
<p>Im Grenzfalle hat man also</p>
<div class=math>
$$
    (p-2)+(p-3)+\cdots+2+1={(p-2)(p-1)\over2}={\cal O}\left(p^2\over2\right).
$$
</div>
<p><strong>DIFSUB:</strong>
Die Nordsieck-Darstellung zeigt hier <em>deutliche</em> Vorteile.
Stets sind $p$ VOPs nötig, wegen</p>
<div class=math>
$$
    \bigl(y_2,{\mskip 3mu}\ldots,{\mskip 3mu}y_{p+1}\bigr)\cdot
        \mathop{\rm diag}\left(\omega,\omega^2,\ldots,\omega^p\right)
$$
</div>
<p><strong>5. Zurückgewiesener Schritt.</strong>
Wird ein Schritt von der Fehlerkontrolle, oder im Falle von steifen
Differentialgleichungen von der Newton-Kantorovich-Korrektor Iteration,
zurückgewiesen, so ist eine neue Schrittweite und ggf. eine neue
Ordnung zu wählen.
Ähnlich wie bei einem akzeptierten Schritt mit einer von der Schrittweiten-
und Ordnungssteuerung vorgeschlagenen Schrittweite und Ordnung, sind jetzt
ebenfalls neue Startwerte zu besorgen.
In diesem Falle ist nicht nur die theoretische Darstellung von Interesse,
sondern zusätzlich die Art der Speicherung, also die Speicherorganisation.</p>
<p><strong>TENDLER:</strong>
Gleiche Anzahl wie bei neuer, veränderter Schrittweiter nach erfolgreichem
Schritt, also insgesamt ${\cal O}(3p^2/2)$ VOPs.</p>
<p><strong>DE/STEP:</strong>
Genau wie bei dem Programm TENDLER, also ${\cal O}(3p^2/2)$, im ungünstigsten (!) Falle.</p>
<p><strong>DIFSUB:</strong> Hier sind lediglich $(p+1)$ VOPs nötig und zwar lediglich eine Umspeicherung einer Matrix.</p>
<p><strong>GEAR:</strong>
Obwohl das Programm GEAR die gleichen Formeln und die gleiche
Darstellungsform wählt, sind hier aufgrund eines kompakteren
Speicherschematas, nun in diesem Falle <em>mehr</em> VOPs nötig.
Zu berechnen ist jetzt</p>
<div class=math>
$$
    \left(y_{p+j_1-j_2} \mathrel{\mathtt{-=}}y_{p+j_1-j_2+1},
        \quad j_2=j_1,\ldots,p\right)
    \quad j_1=1,\ldots,p.
$$
</div>
<p>Dies wird auch genau so in dem Programm LSODE und seinen Varianten
vollzogen.
Der Vorteil ist hierbei, daß weniger Speicher benötigt wird, als in dem
Program DIFSUB.
Der Nachteil ist, daß durch diese zusätzlichen Rechnungen Rundungsfehler
eingeschleppt werden und es natürlich mehr Rechenarbeit kostet.
Jedoch sind zurückgewiesene Schritte eher selten.
Wären sie auffallend häufig, so wäre dies ein deutliches Indiz dafür, daß
die Schrittweiten- und Ordnungssteuerung nicht zur vollen Zufriedenheit
arbeitet.</p>
<h2>6. Speicherplatzaufwand bei Mehrschrittformeln<a id=Speicherplatz></a></h2>
<p>Jede verschiedene Programmausführung eines linearen Mehrschrittverfahrens,
oder eine zyklische Kombination eines solchen Verfahrens, benötigt zur
Verwaltung der interenen Abläufe, wie Fehlerkontrolle und
Korrektoriteration beispielsweise, einen gewissen Speicherraum.
Dieser benötigte Speicherbedarf ist sogar bei Programmen, die die gleichen
Formeln benutzen, unterschiedlich.
Maßgeblich wird der Speicherplatzaufwand von der Darstellungsart der
Lösung beeinflußt.
Bei der numerischen Lösung steifer gewöhnlicher Differentialgleichungen
überwiegt natürlich der Speicherplatzbedarf zur Speicherung der
Iterationsmatrizen und ggf. noch der Jacobimatrix.</p>
<p>Es ist $n$ stets die Dimension der Differentialgleichung, $p$ bezeichnet
immer die Ordnung, $p_\max$ ist die maximal mögliche Ordnung,
$\ell$ ist die Anzahl der Stufen innerhalb eines Zykluses und $\ell_\max$ ist
die Höchstanzahl der Stufen innerhalb eines Zykluses über alle Ordnungen
betrachtet, die zugelassen sind.
Bei einem Programm basierend auf den BDF ist die maximal mögliche Ordnung
immer durch 6 nach oben beschränkt, da oberhalb der Ordnung 6, die BDF
nicht mehr nullstabil sind, also erst recht nicht mehr steif-stabil sind.
Die meisten Programme, die auf den BDF basieren, begrenzen sogar die
Höchstordnung auf 5, da die BDF6 einen sehr kleinen Widlund-Winkel besitzt.</p>
<p><strong>1. Der Speicherplatzbedarf in Abhängigkeit von $p$ und $\ell$.</strong>
Durch Wahl entsprechender Eingabeargumente kann der Benutzer die
Höchstordnung $p_\max$ und damit einhergehend ggf. die Höchstanzahl der
Stufen $\ell_\max$ begrenzen.
Der Speicherplatzbedarf hängt direkt von diesen beiden Größen ab.</p>
<p><strong>TENDLER:</strong> Maximal werden $2n^2+52n$ Speicherzellen benötigt, falls
$p=p_\max=7$ und $\ell=\ell_\max=4$.
Hierbei ist</p>
<div class=math>
$$
    \ell=3+\left\lfloor p\over5\right\rfloor=\cases{
        3,&falls $p\le4$,\cr
        4,&falls $p\ge5$,\cr
    }\qquad p\le p_\max=7.
$$
</div>
<p>Im einzelnen schlüsselt sich der Speicherplatzbedarf wie folgt auf:</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Speicherbedarf</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>rw</code></td>
<td>$n^2$</td>
</tr>
<tr>
<td><code>rj</code></td>
<td>$n^2$</td>
</tr>
<tr>
<td><code>yr</code></td>
<td>$(p+2)(\ell+1)n$</td>
</tr>
<tr>
<td><code>hfr</code></td>
<td>$(\ell+1)n$</td>
</tr>
<tr>
<td><code>intpivot</code></td>
<td>$n$</td>
</tr>
<tr>
<td><code>ymax</code></td>
<td>$n$</td>
</tr>
</tbody>
</table>
<p>Dies macht zusammen dann also
$2n^2+\bigl[(\ell+1)(p+3)+2\bigr]n$.</p>
<p><strong>DIFSUB:</strong> Im Höchstfalle werden $n^2+23n$ Speicherzellen benötigt.
Dies schlüsselt sich auf in</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Speicherbedarf</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>pw</code></td>
<td>$n^2$</td>
</tr>
<tr>
<td><code>error</code></td>
<td>$n$</td>
</tr>
<tr>
<td><code>y</code></td>
<td>$(p+1)n$</td>
</tr>
<tr>
<td><code>save</code></td>
<td>$[(p+1)+4]n$</td>
</tr>
<tr>
<td><code>ipiv</code></td>
<td>$n$</td>
</tr>
<tr>
<td><code>ymax</code></td>
<td>$n$</td>
</tr>
</tbody>
</table>
<p>Insgesamt ergibt dies $n^2+\bigl[2(p+1)+7\bigr]n$.</p>
<p>In dem ursprünglichen Programm DIFSUB wurde aus vermeintlichen
Effizienzgründen keine $LU$-Zerlegung durchgeführt, sondern explizit
die Inverse der Iterationsmatrix bestimmt und dann das
Matrix-Vektor-Produkt inline berechnet.
Der besseren Vergleichbarkeit wegen wurde deshalb ein Indizesvektor <code>ipiv</code>
hinzugefügt, welcher die Permutationsindices der $LU$-Zerlegung
enthält.</p>
<p><strong>STINT:</strong> Im Höchstfalle werden $2n^2+51n$ Speicherzellen benötigt.
Es ist $p_\max=7$ und $\ell_\max=4$.</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Speicherbedarf</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>rw</code></td>
<td>$n^2$</td>
</tr>
<tr>
<td><code>rj</code></td>
<td>$n^2$</td>
</tr>
<tr>
<td><code>y</code></td>
<td>$(p+1)\ell n$</td>
</tr>
<tr>
<td><code>dy</code></td>
<td>$\ell n$</td>
</tr>
<tr>
<td><code>save</code></td>
<td>$[(p+1)+3+2]n$</td>
</tr>
<tr>
<td><code>ipivot</code></td>
<td>$n$</td>
</tr>
<tr>
<td><code>ymax</code></td>
<td>$n$</td>
</tr>
</tbody>
</table>
<p>Dies summiert sich zu $2n^2+\bigl[(\ell+1)(p+1)+\ell+7\bigr]n$.</p>
<p><strong>DE/STEP:</strong> Es ist bei diesem Programm <em>nicht</em> vorgesehen, daß der Benutzer den
Speicherplatzbedarf der Höchstordnung anpasst.
Benötigt werden $22n$ Speicherzellen.
Es ist $p_\max=12$.
Die Aufschlüsselung des Speicherbedarfs ist</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Speicherbedarf</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>y</code>, <code>yy</code>, <code>wt</code>, <code>p</code>, <code>yp</code>, <code>ypout</code></td>
<td>$n$</td>
</tr>
<tr>
<td><code>phi</code></td>
<td>$(p+4)n$</td>
</tr>
</tbody>
</table>
<p>Also insgesamt $(p+10)n$.
Nur <code>de()</code> ruft <code>intrp()</code> auf.</p>
<p><strong>LSODAR:</strong> Im Höchstfalle werden $4n_g+18n+n^2$ Speicherzellen benötigt.</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Speicherbedarf</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>y</code>, <code>iwork</code></td>
<td>$n$</td>
</tr>
<tr>
<td><code>jroot</code></td>
<td>$n_g$</td>
</tr>
<tr>
<td><code>rwork</code></td>
<td>$\displaystyle{ \max(16,n+9)n+3n_g=\cases{ (p+4)n+3n_g,&amp;falls Adams\cr (p+4)n+n^2+3n_g,&amp;falls BDF\cr } }$</td>
</tr>
</tbody>
</table>
<p>Der Speicherplatz kann sich um $2n$ Speicherzellen erhöhen, wenn man für
jede Komponente der Lösung getrennte relative (<code>rtol</code>) und absolute (<code>atol</code>)
Genauigkeitsbedingungen stellt.</p>
<p><strong>DDASSL:</strong> Im Höchstfalle werden $n^2+12n$ Speicherzellen benötigt.
Es ist $p_\max=5$.</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Speicherbedarf</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>y</code></td>
<td>$n$</td>
</tr>
<tr>
<td><code>yprime</code></td>
<td>$n$</td>
</tr>
<tr>
<td><code>rwork</code></td>
<td>$(p+4)n+n^2$</td>
</tr>
<tr>
<td><code>iwork</code></td>
<td>$n$</td>
</tr>
</tbody>
</table>
<p>Dies summiert sich auf zu $n^2+(p+7)n$.
Auch hier ggf. ein Mehr von $2n$ Zellen bei besonderen
Genauigkeitsforderungen.</p>
<p><strong>2. Der temporäre Speicherplatzbedarf.</strong>
Zwischen den Aufrufen wird ein Teil des angeforderten Speichers wieder frei.
Dieser temporäre Speicherraum eignet sich daher maßgeblich nur für
Zwischenrechnungen, welche zwischen den Aufrufen des Lösers anfallen.
Insbesondere beim Programm TENDLER liegen im vermeintlich temporären
Speicher Nutzinformationen vor.
Jedoch kann der Benutzer diese Nutzinformationen überschreiben, ohne die
Fortsetzbarkeit der Integration zu behindern.</p>
<p><strong>TENDLER:</strong> Insgesamt $13n$ Speicherzellen werden frei.
Von <code>yr</code> werden $(p+2)n$ und von <code>hfr</code> werden $\ell n$ Speicherzellen frei.
Insgesamt also $(\ell+p+2)n$ Speicherzellen.</p>
<p><strong>DIFSUB:</strong> Hier werden $12n$ Zellen frei, wegen <code>save</code>, mit seinen
$[(p+1)+4]n$ Zellen.</p>
<p><strong>STINT:</strong> Hier werden $16n$ Zellen frei, wegen <code>dy</code> mit $(\ell-1)n$ Zellen und
<code>save</code> mit $(p+6)n$ Zellen.</p>
<p><strong>DE/STEP:</strong> Insgesamt $3n$ Speicherzellen, wegen <code>y</code>, <code>yp</code>, $\varphi_{15}$ und
$\varphi_{16}$ mit jeweils $n$ Zellen.</p>
<p><strong>LSODAR:</strong> $n+n_g$ Zellen werden frei, wegen <code>y</code> mit $n$ und <code>jroot</code> mit
$n_g$ Zellen.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/11-03-erfahrungsmaterial-mit-bisherigen-loesern</link>
		<guid>https://eklausmeier.goip.de/blog/2025/11-03-erfahrungsmaterial-mit-bisherigen-loesern</guid>
		<title>Erfahrungsmaterial mit bisherigen Lösern</title>
		<category>mathematics</category>
		<pubDate>Mon, 03 Nov 2025 18:40:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#Strategien">1. Strategien und Rechnergenauigkeit</a></li>
<li><a href="#STINTvsGEAR">2. STINT vers. GEAR und EPISODE</a></li>
<li><a href="#STINTvsLSODE">3. STINT versus LSODE</a></li>
<li><a href="#RationalisierteSchrittweite">4. Rationalisierte Schrittweiten und dessen Einfluß</a></li>
</ul>
<p>Es gibt eine Fülle von Differentialgleichungslösern, sowohl für steife, als
auch für nicht-steife Gleichungen.
Allerdings sind nicht alle Löser auch gleich gut für jeden Zweck geeignet.
Es gibt auch Löser für Gleichungen mit speziellen Eigenschaften.
Teilweise konnte man mit den Programmen zur Lösung von gewöhnlichen
Differentialgleichungen besondere Auffälligkeiten feststellen, welche nicht
nur löserspezifisch sind, sondern allgemeiner beobachtet werden konnte.
Hier wird u.a. über Testergebnisse berichtet, die mit dem Programm STINT
durchgeführt wurden.
Diese Ergebnisse sind auch für das Programm TENDLER von Interesse,
da ja beide Programme, wie das Programm <a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">DIFJMT</a>, die gleichen zyklischen
Formeln verwenden.
Zudem kamen zahlreiche Ergebnisse und Erfahrungsberichte, die mit dem
Programm STINT gewonnen wurden, dem Programm TENDLER zugute.</p>
<p>Es zeigt sich, daß mit dem Programm STINT ein Löser vorliegt, der sich
mit anderen bekannten Lösern in seiner Leistungsfähigkeit durchaus
messen lassen kann.
Dennoch offenbart das Programm STINT einige besonders hervorhebenswerte
Andersartigkeiten, denen hier Raum gegeben wird.
Zuerst wird die Unstetigkeit der Schrittweiten- und Ordnungssteuerung
anhand bekannter Testergebnissen dargestellt.
Anschliessend werden die Testdaten von <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">Tendler/Bickart/Picel (1978)</a> in
knapper Form angegeben und interpretiert.
Schließlich wird auf die Testläufe von <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a> eingegangen.
Zum Abschluß wird ein wenig bekannter Effekt von rationalisierter Schrittweite
anhand eines Beispieles dargestellt.</p>
<h2>1. Strategien und Rechnergenauigkeit<a id=Strategien></a></h2>
<p>Als Testdifferentialgleichung sei gewählt das abgewandelte Kontrollproblem,
zurückgehend auf E.J. Davison,</p>
<div class=math>
$$
    \dot y=Ay+Bu, \qquad y(0)=0\in\mathbb{R}^{80},
$$
</div>
<p>mit</p>
<div class=math>
$$
    A = \pmatrix{
        -a^{79} & c & c & \ldots & c\cr
        b & -a^{78} & c & \ldots & c\cr
        c & b & -a^{77} & \ldots & c\cr
        \vdots & & \ddots & \ddots & \vdots\cr
        c & c & \ldots & b & -a^0\cr},
    \qquad A\in\mathbb{R}^{80\times 80},
$$
</div>
<p>wobei hier $a={3/2}$, $b=1/10$ und $c=1/100$ ist.
Die $80\times80$ Matrix $A$ enthält also auf der Diagonalen
$a_{ii}=-a^{80-i}$, $i=1,\ldots80$, auf der Subdiagonalen $a_{i+1,i}=b$
und der Rest ist gleichmässig mit $c$ gefüllt.
Die Steuerung des Problems geschieht mit</p>
<div class=math>
$$
    B = (0,\ldots,0,1)^\top, \qquad u(t)={4\over\pi}\sum_{i=0}^4
        {\sin(2i+1)\pi t\over 2i+1}.
$$
</div>
<p>Die Funktion $u({}\cdot{})$ ist hierbei eine Näherung für eine
Rechteckkurve mit der Amplitude 1 und der Periode $2\pi$.
Es gibt bessere Approximationen für diese Funktion, die jedoch
weiterhin die Unstetigkeit vermeiden.</p>
<p><a href="https://dl.acm.org/doi/pdf/10.1145/355780.355784">Enright (1978)</a> und <a href="https://dl.acm.org/doi/pdf/10.1145/355853.355855">Enright/Kamel (1979)</a>
geben nun die folgenden Meßresultate an für das Programm EPISODE und MOD-EPISODE.</p>
<p>Letzteres benutzt Enright's update technique.</p>
<table>
<thead>
<tr>
<th align="left">Problem</th>
<th align="center">$\varepsilon$</th>
<th align="right">Zeit<br>A</th>
<th align="right">Zeit<br>B</th>
<th align="right">#Fkt<br>A</th>
<th align="right">#Fkt<br>B</th>
<th align="right">#Jac<br>A</th>
<th align="right">#Jac<br>B</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">EPISODE</td>
<td align="center">$10^{-2}$</td>
<td align="right">5.72</td>
<td align="right">10.27</td>
<td align="right">44</td>
<td align="right">43</td>
<td align="right">11</td>
<td align="right">13</td>
</tr>
<tr>
<td align="left">&quot;</td>
<td align="center">$10^{-4}$</td>
<td align="right">20.19</td>
<td align="right">39.15</td>
<td align="right">322</td>
<td align="right">350</td>
<td align="right">31</td>
<td align="right">44</td>
</tr>
<tr>
<td align="left">&quot;</td>
<td align="center">$10^{-6}$</td>
<td align="right">65.36</td>
<td align="right">77.48</td>
<td align="right">817</td>
<td align="right">743</td>
<td align="right">107</td>
<td align="right">84</td>
</tr>
<tr>
<td align="left"></td>
<td align="center"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td align="left">MOD-EPISODE</td>
<td align="center">$10^{-2}$</td>
<td align="right">2.82</td>
<td align="right">2.68</td>
<td align="right">42</td>
<td align="right">41</td>
<td align="right">1</td>
<td align="right">1</td>
</tr>
<tr>
<td align="left">&quot;</td>
<td align="center">$10^{-4}$</td>
<td align="right">11.42</td>
<td align="right">13.40</td>
<td align="right">250</td>
<td align="right">272</td>
<td align="right">1</td>
<td align="right">1</td>
</tr>
<tr>
<td align="left">&quot;</td>
<td align="center">$10^{-6}$</td>
<td align="right">31.81</td>
<td align="right">32.53</td>
<td align="right">670</td>
<td align="right">597</td>
<td align="right">2</td>
<td align="right">4</td>
</tr>
</tbody>
</table>
<p>Der Buchstabe A kennzeichnet die Rechenanlage <a href="https://en.wikipedia.org/wiki/IBM_System/370_Model_165">IBM 360/165</a> und
der Buchstabe B bezeichnet die Anlage <a href="https://en.wikipedia.org/wiki/IBM_303X">IBM 3033</a>.
Benutzte Rechengenauigkeit, verwendeter Übersetzer und globale Fehler werden
in <a href="https://dl.acm.org/doi/pdf/10.1145/355780.355784">Enright (1978)</a> und <a href="https://dl.acm.org/doi/pdf/10.1145/355853.355855">Enright/Kamel (1979)</a> nicht genannt.
Man ersieht deutlich, daß bei einem <em>Wechsel der Rechenanlage</em> die Ergebnisse
sich verändern und dies sogar bei Rechenanlagen vom gleichen Hersteller.
Sind also die beiden Steuerungen einmal aus dem Takt, so finden sie
nicht mehr zusammen.
Das gleiche gilt auch für die Korrektoriteration und die Fehlerkontrolle,
wo ebenfalls unstetige Strategien zur Anwendung gelangen.</p>
<p>Ähnliche Ergebnisse wurden auch mit dem Programm STINT gemacht und zwar
maßgeblich von <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a>.
Die Unterschiede sind jedoch bei dem Programm STINT erheblich ausgeprägter,
als dies hier lediglich ansatzweise zutage tritt.</p>
<p>Noch bemerkenswerter sind die folgenden Resultate, die mit dem Programm
STINT gemacht wurden auf einer Rechenanlage Siemens 7.890-E.</p>
<p>Ein und dasselbe Programm, hier STINT, wurde viermal laufen gelassen
und zwar zweimal mit dem Siemens-Fortran-77 Übersetzer und zwei andere
Male mit dem Waterloo-Fortran-77 Übersetzer.
Beide Übersetzer laufen unter dem gleichen Betriebssystem und natürlich
auf dem gleichen Rechner.
Dennoch zeigte sich, daß die Ergebnisse nicht immer die gleichen waren.
Es ergab sich vielmehr für das Problem E4:</p>
<table>
<thead>
<tr>
<th align="left">$\varepsilon=10^{-7}$</th>
<th align="right">exakte J<br>Siemens</th>
<th align="right">num. J<br>Siemens</th>
<th align="right">exakte J<br>WATFOR</th>
<th align="right">num. J<br>WATFOR</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">#Schritte</td>
<td align="right">587</td>
<td align="right">592</td>
<td align="right">585</td>
<td align="right">610</td>
</tr>
<tr>
<td align="left">#Fktn</td>
<td align="right">810</td>
<td align="right">920</td>
<td align="right">848</td>
<td align="right">986</td>
</tr>
<tr>
<td align="left">#Jac</td>
<td align="right">16</td>
<td align="right">17</td>
<td align="right">16</td>
<td align="right">19</td>
</tr>
<tr>
<td align="left">#LU</td>
<td align="right">60</td>
<td align="right">54</td>
<td align="right">63</td>
<td align="right">58</td>
</tr>
</tbody>
</table>
<p>Diese Werte wurden ermittelt bei fast identischen globalen Fehlern und
und zwar in allen Komponenten.
Die Unterschiede sind für sich betrachtet nicht bemerkenswert groß, jedoch
die Tatsache, daß alle Ergebnisse auf ein und derselben Rechenanlage
mit ein und demselben Programm ermittelt wurden, mit lediglich
verschiedenen Übersetzern, verdeutlicht den hohen Grad an Unstetigkeit
der genannten Segmente und den nicht vernachlässigbaren Einfluß von
Geringfügigkeiten.
Zugleich wird sichtbar, daß ein Vergleich verschiedener Programme und eine
sich daran anschliessende Bewertung, diesen Gegebenheiten Rechnung
tragen muß.
Die Frage nach einem “besten” Programm wird daher weiter noch
verkompliziert, da eine Garantie der Reproduzierbarkeit von Ergebnissen
nicht mehr gewährleistet werden kann.
Ähnliche Schlüsse und Ergebnisse berichten auch
<a href="https://dl.acm.org/doi/pdf/10.1145/355626.355633">Parlett/Wang (1975)</a>
bei Programmen für Berechnungen in der linearen Algebra.</p>
<p>Bei der Lösung elliptischer, partieller Differentialgleichungen
mit der Programmsammlung bzw. Methodenbank <a href="https://docs.lib.purdue.edu/cgi/viewcontent.cgi?article=1218&amp;context=cstech">ELLPACK</a>,
welches dem Benutzer zahlreiche Diskretisierungsarten und verschiedene
Lösungsverfahren für lineare und u.U. nichtlineare Gleichungssysteme
bereitstellt,
siehe <a href="https://link.springer.com/book/10.1007/978-1-4612-5018-0">Rice/Boisvert (1985)</a>,
tritt ebenfalls das Problem auf, wie sich diese Sammlung bei einem Wechsel
der Rechenanlage und bei einem Wechsel der Übersetzer verhält.
Beobachtet werden konnte in Rice (1983)
eine Streuung von bis zu 50%.</p>
<p>Bibliographisch:</p>
<ol>
<li><a href="https://en.wikipedia.org/wiki/Beresford_Parlett">Beresford Neill Parlett</a></li>
<li>Y Wang</li>
<li><a href="https://www.researchgate.net/profile/John-Rice-19">John Richard Rice</a>, lived <a href="https://www.cs.purdue.edu/news/articles/2024/in-memoriam-professor-emeritus-john-r-rice.html">1934–2024</a>, <a href="https://www.netlib.org/bibnet/authors/r/rice-john-r.pdf">complete bibliography</a></li>
<li>Rice, John Richard: “Machine and Compiler Effects on the
Performance of Elliptic PDE Software”,
in Robert S. Stepleman, M. Carver, R. Peskin, William F. Ames and
Robert Vichnevetsky (Editors): “Scientific Computing — Applications
of Mathematics and Computing to the Physical Sciences”,
IMACS Transactions on Scientific Computation, Volume 1,
Noth-Holland Publishing Company, Amsterdam New York Oxford, 1983,
pp.97–101</li>
<li><a href="https://www.researchgate.net/profile/Ronald-Boisvert">Ronald F. Boisvert</a></li>
</ol>
<h2>2. STINT vers. GEAR und EPISODE<a id=STINTvsGEAR></a></h2>
<blockquote>
<p>However, the step size chosen by STINT is almost constant for
long intervals of the integration period.
The main reason for this is that the STINT code has failed to
recognize that methods with inadequate stability regions were
used over the interval $0.01\le t\le 25.0$.
This is a consequence of the fact that the step size and order
selection in STINT is based on error control and not on stability
analysis.
However, since none of the codes monitors stability, it is a little
surprising that STINT exhibits this difficulty.</p>
<p><a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">P.W. Gaffney (1984)</a></p>
</blockquote>
<p>Hier soll anhand der Test- und Meßresultate von <a href="https://link.springer.com/article/10.1007/BF01932994">STIFF DETEST</a> gezeigt werden,
daß ein Programm basierend auf den zyklischen Formeln von J.M. Tendler
durchaus erfolgreich mit anderen bewährten Lösern konkurrieren kann und
in speziellen Fällen sogar günstigere Ergebnisse liefern kann.
Über Schwächen des Programmes STINT wird u.a. auch noch berichtet.
Da das Programm TENDLER bei bisher allen getesteten
Differentialgleichungen effizienter arbeitet, unter günstigen Ümständen
sogar stellenweise bis zu dreimal weniger Funktionsauswertungen benötigt,
als das Programm STINT, werden ähnliche Ergebnisse auch für das Programm
TENDLER erwartet.
Zusätzlich liefert das Programm TENDLER mehr Informationen zurück, als
dies das Programm STINT tut.
Die erweiterten Informationen beziehen sich auf die generierten Statistiken
und die rückwärtsgenommenen Differenzen.
Die weiter unten stehenden Tabellen wurden dem Aufsatz von
<a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">Tendler/Bickart/Picel (1978)</a> entnommen.
Dort findet man vielfach ausführlicher, weitere Tabellen, die
zahlreichen Aufschluß über die Wirkungsweise des Programmes STINT liefern.</p>
<p>Biographisch:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/04-04-a-stiffly-stable-integration-process-using-cyclic-composite-methods">Joel Marvin Tendler</a> (1943–2022)</li>
<li>Zdenek Picel</li>
<li><a href="https://www.legacy.com/us/obituaries/coloradocommunitymedia/name/theodore-bickart-obituary?id=53536695">Theodora A. Bickart</a></li>
</ol>
<p><strong>1.</strong> Während der Entwicklung des Programmes STINT wurden eine Reihe von Test-Problemen
entworfen und das Programm STINT wurde derart abgestimmt, daß es bei dieser
Klasse von Problemen sehr effizientes Verhalten zeitigte.
Obwohl diese Probleme nur einen kleinen Querschnitt durch alle überhaupt
auftretenden Differentialgleichungen darstellen, wurde jedoch festgestellt,
daß das Programm STINT durchaus leistungsfähig ist und die Löser GEAR und
EPISODE in diesem Falle deutlich überbietet.
U.a. wurde das Programm STINT anhand des folgenden Beispieles getestet:</p>
<div class=math>
$$
    \dot y = Ay =
    \pmatrix{   -5 &    -5 & -45.5 & 45.5\cr
                -5 &    -5 & -45.5 & 45.5\cr
              45.5 &  44.5 &    -5 &    5\cr
             -44.5 & -45.5 &     5 &   -5\cr} y, \qquad
    y(0) = \pmatrix{1\cr 0\cr 0\cr 1\cr},
$$
</div>
<p>mit der exakten Lösung</p>
<div class=math>
$$
    y(t) = {1 \over 2} U g(t) = {1 \over 2}
    \pmatrix{-1 & 1 & 1 & 1\cr
             1 & -1 & 1 & 1\cr
             1 & 1 & -1 & 1\cr
             1 & 1 & 1 & -1\cr}
    \pmatrix{\sin t\cr
             \cos t\cr
             e^{-10t}\cos 90t\cr
             e^{-10t}\sin 90t\cr} .
$$
</div>
<p>und den Eigenwerten von $A$ zu
$\lambda_{1/2} = \pm i$ und $\lambda_{3/4} = -10\pm 90i$.
Für Integrationen über längere Intervalle wäre also ein Widlund-Winkel von
$\alpha&gt;83.6^\circ$ nötig, also maximal die BDF3 oder der Zyklus dritter
Ordnung.
Das Steifheitsmaß beträgt hier ungefähr $90$, wobei das Steifheitsmaß
festgelegt ist zu</p>
<div class=math>
$$
    \hbox{Steifheitsmaß }:= {\mskip 5mu}
    {\max \left|\lambda_i\right| \over \min \left|\lambda_i\right|},
        \qquad \min \left|\lambda_i\right| \ne 0.
$$
</div>
<p>Integriert man von $t_0=0$ bis $t=15$ und einer Genauigkeitsanforderung von
$\varepsilon=10^{-5}$ des lokalen Fehlers, so konnten die nachstehenden
Leistungsdaten gemessen werden:</p>
<table>
<thead>
<tr>
<th>Programm</th>
<th>Schritte</th>
<th>#Fktn</th>
<th>#Jac</th>
<th>#LU</th>
</tr>
</thead>
<tbody>
<tr>
<td>STINT</td>
<td>947</td>
<td>1016</td>
<td>6</td>
<td>23</td>
</tr>
<tr>
<td>GEAR</td>
<td>1590</td>
<td>1856</td>
<td>97</td>
<td>97</td>
</tr>
<tr>
<td>EPISODE</td>
<td>1622</td>
<td>2281</td>
<td>111</td>
<td>111</td>
</tr>
</tbody>
</table>
<p>Reduziert man die Genauigkeit auf $\varepsilon=10^{-3}$ und begrenzt man,
wegen der großen Steifheit die höchstzulässige Ordnung auf 4, so erhält
man das folgende Bild für das Programm STINT:</p>
<table>
<thead>
<tr>
<th align="center">Schritte</th>
<th align="center">#Fktn</th>
<th align="center">#Jac</th>
<th align="center">#LU</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">552</td>
<td align="center">622</td>
<td align="center">5</td>
<td align="center">14</td>
</tr>
</tbody>
</table>
<p>mit einem maximalen absoluten und maximalen relativen Fehler von
$0.0144$.
Alle Rechnungen wurden auf einer <a href="https://en.wikipedia.org/wiki/IBM_System/370_Model_165">IBM 370/165</a> und einem nicht näher
genannten Übersetzer durchgeführt.</p>
<p><strong>2.</strong> In den nun folgenden Tabellen gibt die Spalte <em>Genauigkeit</em> an, mit
welcher Genauigkeitsanforderung $\varepsilon$ das Programm gestartet wurde.
Die Spalte `Overhead' kennzeichnet dabei die Differenz der Gesamtrechenzeit
abzüglich der Zeit für</p>
<ol>
<li>die Auswertung der Funktion,</li>
<li>die Berechnung der Jacobimatrix und</li>
<li>die Bestimmung der $LU$-Zerlegung.</li>
</ol>
<p>Hierbei beachte man, daß zahlreiche Gleichungen in STDTST sehr einfach
auszuwertende Funktionen und Jacobimatrizen besitzen und Rücksubstitutionen,
Normberechnungen, etc., dem Overhead zugeschlagen werden.</p>
<p>Die Testresultate wurden unabhängig voneinander einmal für relative
Genauigkeit und beim anderen Male für die absolute Genauigkeit ermittelt.
Das Programm STINT ist konzeptionell besonders für relative Genauigkeit
angelegt und auch so programmiert.
Vergleicht man die unten folgenden Tabellen, so stellt man fest, daß das
Programm STINT für die Anzahl der Jacobimatrixauswertungen besonders
günstige Werte aufweisen kann.
Dies liegt natürlich an der besonderen Behandlung der Jacobimatrix, nämlich
deren Speicherung.</p>
<p><strong>3. Absolute Fehler.</strong>
Für das Programm STINT erhielt man die folgende Tabelle.
Einmal war hierbei der globale Fehler am Endpunkt größer als 1000.
Zwangsabbrüche aufgrund von Konvergenzversagen oder Fehlertestversagen
traten nicht auf.</p>
<table>
<thead>
<tr>
<th>$\varepsilon$</th>
<th align="right">CPU-Zeit</th>
<th align="right">Overhead</th>
<th align="right">#Fktn</th>
<th align="right">#Jac</th>
<th align="right">#LU</th>
<th align="right">Zyklen</th>
</tr>
</thead>
<tbody>
<tr>
<td>$10^{-2}$</td>
<td align="right">4.236</td>
<td align="right">3.613</td>
<td align="right">5585</td>
<td align="right">334</td>
<td align="right">708</td>
<td align="right">1027</td>
</tr>
<tr>
<td>$10^{-4}$</td>
<td align="right">8.613</td>
<td align="right">7.765</td>
<td align="right">10325</td>
<td align="right">375</td>
<td align="right">945</td>
<td align="right">1969</td>
</tr>
<tr>
<td>$10^{-6}$</td>
<td align="right">16.426</td>
<td align="right">15.040</td>
<td align="right">18670</td>
<td align="right">483</td>
<td align="right">1516</td>
<td align="right">3410</td>
</tr>
<tr>
<td>$10^{-8}$</td>
<td align="right">32.757</td>
<td align="right">30.448</td>
<td align="right">35181</td>
<td align="right">626</td>
<td align="right">2423</td>
<td align="right">6723</td>
</tr>
<tr>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td>$\Sigma$</td>
<td align="right">62.033</td>
<td align="right">56.886</td>
<td align="right">69761</td>
<td align="right">1818</td>
<td align="right">5592</td>
<td align="right">13129</td>
</tr>
</tbody>
</table>
<p>Für das Programm GEAR ergab sich das folgende.
Hier war einmal der globale Fehler am Endpunkt größer als 1000.
Abbruch der Integration aufgrund von Konvergenzschwierigkeiten bzw. aufgrund
von Fehlertestschwierigkeiten trat nicht auf.</p>
<table>
<thead>
<tr>
<th>$\varepsilon$</th>
<th align="right">CPU-Zeit</th>
<th align="right">Overhead</th>
<th align="right">#Fktn</th>
<th align="right">#Jac</th>
<th align="right">#LU</th>
<th align="right">Schritte</th>
</tr>
</thead>
<tbody>
<tr>
<td>$10^{-2}$</td>
<td align="right">1.997</td>
<td align="right">1.925</td>
<td align="right">3618</td>
<td align="right">454</td>
<td align="right">454</td>
<td align="right">2343</td>
</tr>
<tr>
<td>$10^{-4}$</td>
<td align="right">5.995</td>
<td align="right">5.830</td>
<td align="right">8946</td>
<td align="right">751</td>
<td align="right">751</td>
<td align="right">6768</td>
</tr>
<tr>
<td>$10^{-6}$</td>
<td align="right">9.031</td>
<td align="right">8.783</td>
<td align="right">13430</td>
<td align="right">1006</td>
<td align="right">1006</td>
<td align="right">10581</td>
</tr>
<tr>
<td>$10^{-8}$</td>
<td align="right">17.671</td>
<td align="right">17.271</td>
<td align="right">21718</td>
<td align="right">1398</td>
<td align="right">1398</td>
<td align="right">18409</td>
</tr>
<tr>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td>$\Sigma$</td>
<td align="right">34.694</td>
<td align="right">33.809</td>
<td align="right">47712</td>
<td align="right">3609</td>
<td align="right">3609</td>
<td align="right">38101</td>
</tr>
</tbody>
</table>
<p>Für das Programm EPISODE ergab sich nun die folgende Tabelle.
Einmal versagte die Fehlerkontrolle und führte zu einem Abbruch der gesamten
Integration, und einmal versagte das Programm gleich beim Start weg
vollständig.</p>
<table>
<thead>
<tr>
<th>$\varepsilon$</th>
<th align="right">CPU-Zeit</th>
<th align="right">Overhead</th>
<th align="right">#Fktn</th>
<th align="right">#Jac</th>
<th align="right">#LU</th>
<th align="right">Schritte</th>
</tr>
</thead>
<tbody>
<tr>
<td>$10^{-2}$</td>
<td align="right">5.684</td>
<td align="right">5.570</td>
<td align="right">5884</td>
<td align="right">821</td>
<td align="right">821</td>
<td align="right">4075</td>
</tr>
<tr>
<td>$10^{-4}$</td>
<td align="right">8.390</td>
<td align="right">8.204</td>
<td align="right">9624</td>
<td align="right">1182</td>
<td align="right">1182</td>
<td align="right">6585</td>
</tr>
<tr>
<td>$10^{-6}$</td>
<td align="right">12.389</td>
<td align="right">12.093</td>
<td align="right">15350</td>
<td align="right">1567</td>
<td align="right">1567</td>
<td align="right">9834</td>
</tr>
<tr>
<td>$10^{-8}$</td>
<td align="right">22.950</td>
<td align="right">22.488</td>
<td align="right">24764</td>
<td align="right">2098</td>
<td align="right">2098</td>
<td align="right">17445</td>
</tr>
<tr>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td>$\Sigma$</td>
<td align="right">49.413</td>
<td align="right">48.356</td>
<td align="right">41849</td>
<td align="right">5668</td>
<td align="right">5668</td>
<td align="right">37939</td>
</tr>
</tbody>
</table>
<p>Es folgen nun die Resultate für die relativen Fehler.
Hier wurden also die gleichen Testdifferentialgleichungen wie oben,
also A1 bis F5 gelöst und die dabei sich ergebenden Werte tabelliert.</p>
<p><strong>4. Relative Fehler.</strong>
Für das Programm STINT ergaben sich die folgenden Ergebnisse, die in der
untenstehenden Tabelle aufgegliedert sind.
Sechsmal war der globale Fehler am Endpunkt größer als 1000, und einmal brach
die Integration ab, weil der Korrektor nicht konvergierte.</p>
<table>
<thead>
<tr>
<th>$\varepsilon$</th>
<th align="right">CPU-Zeit</th>
<th align="right">Overhead</th>
<th align="right">#Fktn</th>
<th align="right">#Jac</th>
<th align="right">#LU</th>
<th align="right">Zyklen</th>
</tr>
</thead>
<tbody>
<tr>
<td>$10^{-2}$</td>
<td align="right">2.201</td>
<td align="right">1.713</td>
<td align="right">3117</td>
<td align="right">283</td>
<td align="right">507</td>
<td align="right">598</td>
</tr>
<tr>
<td>$10^{-4}$</td>
<td align="right">4.980</td>
<td align="right">4.273</td>
<td align="right">6363</td>
<td align="right">356</td>
<td align="right">711</td>
<td align="right">1251</td>
</tr>
<tr>
<td>$10^{-6}$</td>
<td align="right">11.411</td>
<td align="right">10.315</td>
<td align="right">13365</td>
<td align="right">412</td>
<td align="right">1019</td>
<td align="right">2727</td>
</tr>
<tr>
<td>$10^{-8}$</td>
<td align="right">21.108</td>
<td align="right">19.269</td>
<td align="right">23789</td>
<td align="right">498</td>
<td align="right">1616</td>
<td align="right">4594</td>
</tr>
<tr>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td>$\Sigma$</td>
<td align="right">39.701</td>
<td align="right">35.570</td>
<td align="right">46634</td>
<td align="right">1549</td>
<td align="right">3853</td>
<td align="right">9170</td>
</tr>
</tbody>
</table>
<p>Das Programm GEAR hatte fünfmal am Ende des Integrationsintervalls
einen Fehler produziert, der größer als 1000 war.
Auch hier gab es keine Korrektor-Konvergenzprobleme, die den Löser zum Halten
zwangen.</p>
<table>
<thead>
<tr>
<th>$\varepsilon$</th>
<th align="right">CPU-Zeit</th>
<th align="right">Overhead</th>
<th align="right">#Fktn</th>
<th align="right">#Jac</th>
<th align="right">#LU</th>
<th align="right">Schritte</th>
</tr>
</thead>
<tbody>
<tr>
<td>$10^{-2}$</td>
<td align="right">1.359</td>
<td align="right">1.311</td>
<td align="right">2375</td>
<td align="right">361</td>
<td align="right">361</td>
<td align="right">1584</td>
</tr>
<tr>
<td>$10^{-4}$</td>
<td align="right">4.842</td>
<td align="right">4.713</td>
<td align="right">6975</td>
<td align="right">652</td>
<td align="right">652</td>
<td align="right">5346</td>
</tr>
<tr>
<td>$10^{-6}$</td>
<td align="right">6.580</td>
<td align="right">6.390</td>
<td align="right">9992</td>
<td align="right">822</td>
<td align="right">822</td>
<td align="right">8057</td>
</tr>
<tr>
<td>$10^{-8}$</td>
<td align="right">11.766</td>
<td align="right">11.470</td>
<td align="right">15721</td>
<td align="right">1089</td>
<td align="right">1089</td>
<td align="right">13155</td>
</tr>
<tr>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td>$\Sigma$</td>
<td align="right">24.546</td>
<td align="right">23.884</td>
<td align="right">35063</td>
<td align="right">2924</td>
<td align="right">2924</td>
<td align="right">28142</td>
</tr>
</tbody>
</table>
<p>Das Programm EPISODE startete einmal überhaupt nicht, einmal konvergierte
die Newton-Kantorovich Iteration für den Korrektor nicht und resultierte
somit in einem Programmabbruch, und schließlich fünfmal war der Fehler zum
Schluß des Intervalls höher als 1000.</p>
<table>
<thead>
<tr>
<th>$\varepsilon$</th>
<th align="right">CPU-Zeit</th>
<th align="right">Overhead</th>
<th align="right">#Fktn</th>
<th align="right">#Jac</th>
<th align="right">#LU</th>
<th align="right">Schritte</th>
</tr>
</thead>
<tbody>
<tr>
<td>$10^{-2}$</td>
<td align="right">4.568</td>
<td align="right">4.473</td>
<td align="right">4832</td>
<td align="right">744</td>
<td align="right">744</td>
<td align="right">3740</td>
</tr>
<tr>
<td>$10^{-4}$</td>
<td align="right">5.930</td>
<td align="right">5.782</td>
<td align="right">7534</td>
<td align="right">1011</td>
<td align="right">1011</td>
<td align="right">5177</td>
</tr>
<tr>
<td>$10^{-6}$</td>
<td align="right">8.746</td>
<td align="right">8.515</td>
<td align="right">11685</td>
<td align="right">1355</td>
<td align="right">1355</td>
<td align="right">7981</td>
</tr>
<tr>
<td>$10^{-8}$</td>
<td align="right">14.940</td>
<td align="right">14.592</td>
<td align="right">17798</td>
<td align="right">1558</td>
<td align="right">1558</td>
<td align="right">12756</td>
</tr>
<tr>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td>$\Sigma$</td>
<td align="right">34.184</td>
<td align="right">33.361</td>
<td align="right">41849</td>
<td align="right">4668</td>
<td align="right">4668</td>
<td align="right">29654</td>
</tr>
</tbody>
</table>
<p><strong>5.</strong> Den oben abgedruckten Zahlen, aber auch den ausführlicheren Tabellen, die
in dem Aufsatz von <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">Tendler/Bickart/Picel (1978)</a> zu finden sind,
entnimmt man die folgenden Interpretationen der Werte.
Das Verhältnis von Zyklusanzahl zu Jacobimatrixauswertungen beträgt
für das Programm STINT $2:1$ bis $9:1$.
Bei höheren Genauigkeiten ist das Verhältnis höher.
Dies erklärt sich leicht daraus, daß bei höheren Genauigkeitsanforderungen
höhere Ordnungen benutzt werden, die ihrerseits in dem Programm STINT
dazu führen, daß die Schrittweite weniger häufig gewechselt wird.
Andererseits sind bei scharfen Genauigkeitsanforderungen die
Schrittweiten generell kleiner und die Änderungen ebenfalls.
Dies berifft dann die Iterationsmatrix $W=I-h\gamma J$, welche sich dann
weniger häufig ändert und weniger häufig einer Refaktorisierung bedarf.
Damit erhält man das Ergebnis, daß der Hindmarsh-Test in dem Programm STINT
dazu führt, daß in grobem Zahlen ausgedrückt, alle 2 bis 9 Zyklen die
Jacobimatrix neu berechnet wird.</p>
<p>Das Verhältnis von $LU$-Zerlegungen zu Jacobimatrixauswertungen beträgt
ungefähr $2:1$ bis $4:1$.
Wiederum bei höheren Genauigkeiten vergrößert sich dieses Verhältnis.
Mit anderen Worten: Doppelt so häufig bis viermal so häufig wird
die Iterationsmatrix $W=I-h\gamma J$ faktorisiert, bevor die Jacobimatrix $J$
neu berechnet wird.
Das Verhältnis von Zyklen zu $LU$-Zerlegungen beträgt ungefähr $1:1$ bis
$3:1$.
In Worten: Entweder jeden neuen Zyklus, bis zu jedem dritten Zyklus
wird die Iterationsmatrix $W$ faktorisiert.
Dies verdeutlicht, daß der Hindmarsh-Test vergleichsweise früh anzieht.</p>
<p>In den Programmen GEAR und EPISODE findet man mit zum erstenmal den
<em>Hindmarsh-Test</em>.
Das Programm DIFSUB,
siehe <a href="https://dl.acm.org/doi/pdf/10.1145/362566.362571">Gear (1971)</a>, kennt <em>keinen</em> Hindmarsh-Test und faktorisiert die
Iterationsmatrix genau dann, wenn die Ordnung gewechselt wird oder
Konvergenzschwierigkeiten auftreten.</p>
<p>A.C. Hindmarsh verwendete ursprünglich einen 30%-Test.
In dem Programm STINT wird ein 40%/80%-Test verwendet und schließlich
das Programm TENDLER benutzt einen erweiterten 40%/100%-Test.
Die Erweiterungen liegen hierbei, daß weitere Umstände, wie beispielsweise
angesammelte Minuspunkte, die Faktorisierung der Iterationsmatrix $W$ beeinflussen.</p>
<p>Bibliographisch:</p>
<ol>
<li><a href="https://history.siam.org/pdfs2/Hindmarsh_returned_%20SIAM_copy.pdf">Alan C. Hindmarsh</a> (*1942)</li>
<li><a href="https://en.wikipedia.org/wiki/C._William_Gear">Charles William Gear</a> (1935–2022)</li>
<li>C.W. Gear: “The automatic integration of ordinary differential equations”
Communications of the ACM, Volume 14, Issue 3, pp. 176 - 179,
<a href="https://doi.org/10.1145/362566.362571">https://doi.org/10.1145/362566.362571</a></li>
</ol>
<h2>3. STINT versus LSODE<a id=STINTvsLSODE></a></h2>
<blockquote>
<p>In particular, we note the sensitivity of STINT and BLEND to
changes in computer precision.
From time to time we shall use LSODE as a yardstick by which to
evaluate the above codes.</p>
<p><a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">P.W. Gaffney (1984)</a></p>
</blockquote>
<p>Nach Erscheinen des Aufsatzes von <a href="https://dl.acm.org/doi/pdf/10.1145/356502.356495">Tendler/Bickart/Picel (1978)</a>
sind eine Reihe von weiteren Programmen und Verfahren entwickelt worden,
und zudem ist das Programm GEAR weiter verfeinert und verbessert worden
zu dem Programm LSODE.
Da das Programm TENDLER dieselben Formeln benutzt wie das Programm STINT,
ist es aufschlußreich die Ergebnisse und Daten, die durch Vergleich des
Programmes STINT mit anderen Lösern ermittelt wurden, zu sammeln,
auszuwerten und schließlich mit in die Entwicklung des
Programmes TENDLER hineinfliessen zu lassen.
Getestet und beurteilt wurde das Programm STINT erneut von <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a>.
Leitgedanke dieser Messungen war nicht allein schwerpunktmässig ein Vergleich.
Jedoch liefern die gewonnenen Daten für eine Gegenüberstellung ebenfalls
im begrenzten Umfange Anhaltspunkte.</p>
<p><a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">P.W. Gaffney</a> testete die Programme:</p>
<ol>
<li>STRIDE von Burrage, implizite RK-Verfahren</li>
<li>BLEND von Skeel und Kong (blended linear multistep-methods)</li>
<li>STINT</li>
<li>DIRK von Alexander, implizite RK-Verfahren</li>
<li>LSODE von Hindmarsh</li>
</ol>
<p>Gaffney untersuchte diese Programme nicht wie
<a href="https://link.springer.com/article/10.1007/BF01932994">Enright/Hull (1975)</a> an 19 verschiedenen
Testdifferentialgleichungen oder <a href="https://dl.acm.org/doi/pdf/10.1145/355606.361868">Fox (1972)</a> an 6
verschiedenen Gleichungen, sondern nur an einer einzigen, die jedoch durch
Parameterveränderung stark variiert werde konnte.
Hiermit ergab sich eine einparametrige Schar von Testgleichungen.
P.W. Gaffney betrachtete das folgende Anfangswertproblem,
analog den Problemen B2 bis B5
$$
\dot y = \pmatrix{
-10&amp; \omega &amp; 0 &amp; 0 &amp; 0 &amp; 0\cr
-\omega&amp;-10 &amp; 0 &amp; 0 &amp; 0 &amp; 0\cr
0 &amp; 0 &amp; -4 &amp; 0 &amp; 0 &amp; 0\cr
0 &amp; 0 &amp; 0  &amp; -1 &amp; 0 &amp; 0\cr
0 &amp; 0 &amp; 0  &amp; 0 &amp; -1/2 &amp; 0\cr
0 &amp; 0 &amp; 0  &amp; 0 &amp; 0 &amp; -1/10\cr  } y, \quad
y(0) = \pmatrix{1\cr 1\cr 1\cr 1\cr 1\cr 1},
$$
wobei $\omega$ nicht nur zwischen $3$ und $100$ lief, sondern den Bereich
zwischen $1$ und $1000$ umfaßte.
Die beiden nicht-reellen Eigenwerte $\lambda_{1/2}=-10\pm i\omega$ der
Matrix überprüfen, ob die verwendeten Programme auch noch hinreichend
effizient arbeiten, wenn die Lösungen der Differentialgleichung gedämpfte,
aber stark oszillierende Schwingungen beschreiben.
Dies erfordert von den verwendeten Formeln u.a. entweder große
Widlund-Winkel, oder die Ordnungssteuerungen der Programme müssen schnell
genug in der Lage sein die gewählten Ordnungen zu verringern.
Man beachte, daß auch bei den 19 Testdifferentialgleichungen von
<a href="https://link.springer.com/article/10.1007/BF01932994">Enright/Hull (1975)</a>, einige verschiedene Gleichungen nur durch
Variation von Parametern entstehen.</p>
<p>Nicht allein entscheidend war der Vergleich der Programme, sondern die
Auswirkung der Wahl der Rechenanlage und die Wahl der Maschinengenauigkeit
auf die Ergebnisse, die dann die obigen Programme für eine partielle
Differentialgleichung lieferten.
Diese zeitabhängige partielle Differentialgleichung wurde in eine
gewöhnliche Differentialgleichung “umgewandelt”, die nun ähnliche
Eigenschaften besitzt, wie die oben angegebene Testgleichung, insbesondere
ist sie steif und erfordert sehr große Widlund-Winkel.
Die semidiskretisierte partielle Differentialgleichung ähnelt von ihrer
Schwierigkeit her den Problemen B2 bis B5, und dies ist gerade der Grund,
warum die obige Testgleichung gewählt wurde.</p>
<p>Gaffney erstellte nun u.a. die folgenden Vergleichswerte, die hier
leicht gekürzt wiedergegeben werden.
In der unten gedruckten Tabelle sind zur Gegenüberstellung u.a. die beiden
Programme STINT und LSODE angegeben.
Zu erwähnen ist, daß das Programm STINT bei der Beschränkung auf die Ordnung
$p=2$ genau die gleichen Formeln benutzt wie das Programm LSODE, nämlich die
BDF1 und BDF2.
Hier zeigt sich deutlich der Einfluß der verschieden gewählten
Darstellungsformen der Lösung, die verschiedenen zur Anwendung gelangenden
Strategien.
Das Programm STINT speichert zusätzlich zu der Iterationsmatrix
$W=I-h\gamma J$ auch die Jacobimatrix $J$, während hingegen das Programm
LSODE nur alleine die Iterationsmatrix $W$ speichert.
Das Programm LSODE besitzt daher nicht die Möglichkeit gezielt nur die
Iterationsmatrix zu refaktorisieren, ohne dabei gleichzeitig die
Jacobimatrix $J$ mitzuberechnen.
Die Refaktorisierung der Iterationsmatrix $W$ hat aber häufig ihre
alleinige Ursache in der dominanten Veränderung der Werte $h\gamma$,
nicht jedoch in einer Veränderung der Matrix $J$.
Dennoch muß dann aus Speicherplatzgründen die Jacobimatrix $J$ mitberechnet
werden.
Die Weiterentwicklung des Programmes LSODE zu dem Programm VODE trägt diesen
Ergebnissen Rechnung, als daß nun auch in VODE eine Option vorhanden ist, die
es erlaubt zu bestimmen, ob die Jacobimatrix $J$ getrennt gespeichert werden
soll oder nicht.
Die Vergleiche, die <a href="https://doi.org/10.1137/0910062">Hindmarsh/Brown/Byrne (1989)</a>
veröffentlichen, zeigen erneut, daß eine separate Speicherung von $J$ sehr
nützlich ist.</p>
<table>
<thead>
<tr>
<th align="center">$\omega$</th>
<th>Routine</th>
<th>$p$</th>
<th>$\overline p$</th>
<th align="right">#Fktn</th>
<th align="right">Schritte</th>
<th align="right">#Jac</th>
<th align="right">$\varepsilon_{\max}$</th>
<th align="right">$\varepsilon_{\rm end}$</th>
<th align="right">CPU</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">500</td>
<td>STINT</td>
<td>3</td>
<td>2.97</td>
<td align="right">2057</td>
<td align="right">1923</td>
<td align="right">9</td>
<td align="right">0.048</td>
<td align="right">0.59E-3</td>
<td align="right">0.2830</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>LSODE</td>
<td>2</td>
<td>2.00</td>
<td align="right">2869</td>
<td align="right">2053</td>
<td align="right">116</td>
<td align="right">0.056</td>
<td align="right">0.23E-3</td>
<td align="right">0.4597</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>BLEND</td>
<td>4</td>
<td>3.98</td>
<td align="right">2834</td>
<td align="right">1685</td>
<td align="right">30</td>
<td align="right">0.0014</td>
<td align="right">0.11E-5</td>
<td align="right">0.3203</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>STRIDE</td>
<td>15</td>
<td>5.00</td>
<td align="right">3473</td>
<td align="right">264</td>
<td align="right">31</td>
<td align="right">2.3E-5</td>
<td align="right">0.92E-7</td>
<td align="right">1.0872</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>DIRK</td>
<td>5</td>
<td>5.00</td>
<td align="right">3931</td>
<td align="right">256</td>
<td align="right">28</td>
<td align="right">5.4E-6</td>
<td align="right">0.88E-8</td>
<td align="right">0.2629</td>
</tr>
<tr>
<td align="center"></td>
<td></td>
<td></td>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td align="center">800</td>
<td>STINT</td>
<td>2</td>
<td>2.00</td>
<td align="right">3265</td>
<td align="right">3198</td>
<td align="right">5</td>
<td align="right">0.081</td>
<td align="right">0.14E-3</td>
<td align="right">0.4244</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>LSODE</td>
<td>2</td>
<td>2.00</td>
<td align="right">4322</td>
<td align="right">3120</td>
<td align="right">171</td>
<td align="right">0.089</td>
<td align="right">0.23E-3</td>
<td align="right">0.6969</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>BLEND</td>
<td>4</td>
<td>3.98</td>
<td align="right">3281</td>
<td align="right">2590</td>
<td align="right">26</td>
<td align="right">0.0065</td>
<td align="right">0.19E-5</td>
<td align="right">0.4103</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>STRIDE</td>
<td>15</td>
<td>4.90</td>
<td align="right">5103</td>
<td align="right">411</td>
<td align="right">36</td>
<td align="right">3.9E-5</td>
<td align="right">0.11E-6</td>
<td align="right">1.6158</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>DIRK</td>
<td>5</td>
<td>5.00</td>
<td align="right">5987</td>
<td align="right">393</td>
<td align="right">33</td>
<td align="right">8.4E-6</td>
<td align="right">0.14E-7</td>
<td align="right">0.4000</td>
</tr>
<tr>
<td align="center"></td>
<td></td>
<td></td>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td align="center">1000</td>
<td>STINT</td>
<td>2</td>
<td>2.00</td>
<td align="right">3956</td>
<td align="right">3882</td>
<td align="right">6</td>
<td align="right">0.101</td>
<td align="right">0.21E-3</td>
<td align="right">0.5140</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>LSODE</td>
<td>2</td>
<td>2.00</td>
<td align="right">5237</td>
<td align="right">3790</td>
<td align="right">206</td>
<td align="right">0.110</td>
<td align="right">0.23E-3</td>
<td align="right">0.8458</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>BLEND</td>
<td>4</td>
<td>3.97</td>
<td align="right">4144</td>
<td align="right">3327</td>
<td align="right">26</td>
<td align="right">0.084</td>
<td align="right">0.76E-6</td>
<td align="right">0.5231</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>STRIDE</td>
<td>15</td>
<td>5.10</td>
<td align="right">6443</td>
<td align="right">494</td>
<td align="right">41</td>
<td align="right">4.9E-5</td>
<td align="right">0.22E-8</td>
<td align="right">2.0431</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>DIRK</td>
<td>5</td>
<td>5.00</td>
<td align="right">7337</td>
<td align="right">483</td>
<td align="right">37</td>
<td align="right">1.0E-4</td>
<td align="right">0.23E-7</td>
<td align="right">0.4887</td>
</tr>
</tbody>
</table>
<p>Hierbei ist $p$ die maximal zulässige Ordnung, und $\overline p$ bezeichnet
die mittlere Ordnung, die vom Programm verwendet wurde.
$\varepsilon_{\max}$ ist der maximale Fehler, der überhaupt gemacht wurde,
und $\varepsilon_{\rm end}$ ist der globale Fehler am Integrationsende, in
diesem Falle bei $t=64$.
Die angegebenen Werte wurden auf einer Rechenanlage Cray-1 ermittelt.</p>
<p>Vergleicht man nun die obigen Resultate des Programmes STINT mit den
anderen Programmen, so ergibt sich das folgende Bild für STINT.</p>
<ol>
<li>Von der CPU-Zeit her ist das Programm STINT zuerst
zweitschnellstes Programm, danach
dritt- und anschließend wieder zweit-schnell-stes.
Das Programm DIRK ist hier stets am effizientesten.
Hier gilt aber zu beachten, daß die Funktionsauswertungen
und die Jacobimatrixauswertungen ausgesprochen einfach sind.</li>
<li>Bei den Jacobimatrixauswertungen bietet das Programm STINT
deutliche Vorteile ggü. allen anderen Programmen.
Dieses geht aber zu Lasten des Speichers, was bei großen
Problemen zu berücksichtigen ist.
Allerdings sind bei großdimensionalen Problemen häufig Bandstrukturen
vorhanden, sodaß sich der zusätzliche Speicherbedarf nicht im
entsprechenden Maße auswirkt.</li>
<li>Bei den Funktionsauswertungen zeigt das Programm STINT
generell deutlich Vorteile, verglichen mit sämtlichen anderen
gegenübergestellten Unterprogrammen.
Das CPU-Zeit-günstigste Programm DIRK schneidet bei dieser Betrachtung
hier jedesmal am wenigsten günstig ab.
Dies unterstreicht nocheinmal, daß bei dem gewählten Testbeispiel die
Funktion sehr einfach auszuwerten ist, es sind nämlich nur 8
Gleitkommamultiplikationen und nur 2 Gleitkommaadditionen nötig.
Die Jacobimatrix ist sogar konstant.
Bei den in der Einleitung erwähnten Homotopieverfahren können die
Funktionsauswertungen u.U. relativ aufwendig sein, sodaß das
Runge-Kutta-Verfahren DIRK in diesen Fällen nicht mehr CPU-Zeit-mässig
brauchbare Werte liefern könnte.</li>
</ol>
<p>Man beachte die sehr verschiedenen globalen Fehler, die von
den untersuchten Programmen geliefert wurden.
Dies relativiert die obigen Gegenüberstellungen, jedoch sind die beiden
Programme STINT und LSODE gut miteinander vergleichbar.
Besondere Aufmerksamkeit gebe man den sehr wenigen Schritten von den beiden
Programmen STRIDE und BLEND, d.h. es wurden sehr große Schrittweiten gewählt.
Auffällig ist, daß das Programm LSODE deutlich am meisten
Jacobimatrixauswertungen benötigte und zwar sogar mehr, als
alle anderen Programme zusammen.</p>
<p>Ein wichtiges Anliegen der Vergleiche, die Gaffney durchführte, war der
Einfluß der Rechenanlage auf die Ergebnisse der benutzen Programme.
Hierbei zeigte das Programm STINT besondere Auffälligkeiten.
Bei der nun folgenden Tabelle beobachte man, daß —abweichend vom Üblichen—
Verhalten des Programmes STINT, einmal bei Wechsel der Genauigkeit
und zum anderen beim Wechsel der Rechenanlage.
Es ist hier $\omega = 100$.
PDP10/SP beziehungsweise PDP10/DP kennzeichnet die gewählte Genauigkeit,
also single precision oder double precision auf einer Rechenanlage vom
Typ PDP10.</p>
<table>
<thead>
<tr>
<th align="center">$\varepsilon$</th>
<th>Rechenanlage</th>
<th align="right">PDP10/SP</th>
<th align="right">Cray-1</th>
<th align="right">CDC-7600</th>
<th align="right">PDP10/DP</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">$10^{-4}$</td>
<td>Schritte</td>
<td align="right">2795</td>
<td align="right">977</td>
<td align="right">977</td>
<td align="right">977</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Fktn</td>
<td align="right">2946</td>
<td align="right">1114</td>
<td align="right">1114</td>
<td align="right">1114</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Jac</td>
<td align="right">8</td>
<td align="right">8</td>
<td align="right">8</td>
<td align="right">8</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>CPU-Zeit</td>
<td align="right">6.680</td>
<td align="right">0.161</td>
<td align="right">0.576</td>
<td align="right">3.506</td>
</tr>
<tr>
<td align="center"></td>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td align="center">$10^{-5}$</td>
<td>Schritte</td>
<td align="right">815</td>
<td align="right">2917</td>
<td align="right">1186</td>
<td align="right">2278</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Fktn</td>
<td align="right">1069</td>
<td align="right">3125</td>
<td align="right">1329</td>
<td align="right">2489</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Jac</td>
<td align="right">17</td>
<td align="right">11</td>
<td align="right">12</td>
<td align="right">12</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>CPU-Zeit</td>
<td align="right">2.138</td>
<td align="right">0.470</td>
<td align="right">0.774</td>
<td align="right">8.670</td>
</tr>
<tr>
<td align="center"></td>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td align="center">$10^{-6}$</td>
<td>Schritte</td>
<td align="right">703</td>
<td align="right">3690</td>
<td align="right">3690</td>
<td align="right">3690</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Fktn</td>
<td align="right">976</td>
<td align="right">3867</td>
<td align="right">3867</td>
<td align="right">3867</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Jac</td>
<td align="right">12</td>
<td align="right">12</td>
<td align="right">12</td>
<td align="right">12</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>CPU-Zeit</td>
<td align="right">2.047</td>
<td align="right">0.572</td>
<td align="right">2.060</td>
<td align="right">13.495</td>
</tr>
</tbody>
</table>
<p>Zum Vergleich seien hier die entsprechenden Werte für das Programm
BLEND angegeben.
Die Werte für die anderen Programme findet man in dem schon erwähnten
Aufsatz von <a href="https://dl.acm.org/doi/pdf/10.1145/356068.356073">Gaffney (1984)</a>.
Es zeigt sich dabei, daß lediglich das Programm STINT besonders
auffällige Anzeichen aufweist.
Wie bei der obigen Tabelle ist hier $\omega = 100$.</p>
<table>
<thead>
<tr>
<th align="center">$\varepsilon$</th>
<th>Rechenanlage</th>
<th align="right">PDP10/SP</th>
<th align="right">Cray-1</th>
<th align="right">CDC-7600</th>
<th align="right">PDP10/DP</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">$10^{-4}$</td>
<td>Schritte</td>
<td align="right">3345</td>
<td align="right">366</td>
<td align="right">366</td>
<td align="right">366</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Fktn</td>
<td align="right">740</td>
<td align="right">8834</td>
<td align="right">8834</td>
<td align="right">8834</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Jac</td>
<td align="right">32</td>
<td align="right">28</td>
<td align="right">28</td>
<td align="right">28</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>CPU-Zeit</td>
<td align="right">1.513</td>
<td align="right">0.100</td>
<td align="right">0.493</td>
<td align="right">2.757</td>
</tr>
<tr>
<td align="center"></td>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td align="center">$10^{-5}$</td>
<td>Schritte</td>
<td align="right">389</td>
<td align="right">389</td>
<td align="right">389</td>
<td align="right">389</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Fktn</td>
<td align="right">871</td>
<td align="right">902</td>
<td align="right">902</td>
<td align="right">902</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Jac</td>
<td align="right">27</td>
<td align="right">27</td>
<td align="right">27</td>
<td align="right">27</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>CPU-Zeit</td>
<td align="right">1.947</td>
<td align="right">0.106</td>
<td align="right">0.530</td>
<td align="right">3.046</td>
</tr>
<tr>
<td align="center"></td>
<td></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
<td align="right"></td>
</tr>
<tr>
<td align="center">$10^{-6}$</td>
<td>Schritte</td>
<td align="right">547</td>
<td align="right">728</td>
<td align="right">728</td>
<td align="right">936</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Fktn</td>
<td align="right">1122</td>
<td align="right">1251</td>
<td align="right">1251</td>
<td align="right">1532</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>#Jac</td>
<td align="right">26</td>
<td align="right">32</td>
<td align="right">32</td>
<td align="right">34</td>
</tr>
<tr>
<td align="center">&quot;</td>
<td>CPU-Zeit</td>
<td align="right">2.734</td>
<td align="right">0.182</td>
<td align="right">0.976</td>
<td align="right">7.157</td>
</tr>
</tbody>
</table>
<p>Biographisch:</p>
<ol>
<li><a href="https://history.siam.org/pdfs2/Hindmarsh_returned_%20SIAM_copy.pdf">Alan C. Hindmarsh</a> (*1942), <a href="https://www.mathgenealogy.org/id.php?id=44518">math. genealogy</a></li>
<li><a href="https://scholar.google.com/citations?user=lcGXq7UAAAAJ&amp;hl=en">Peter N. Brown</a></li>
<li><a href="https://www.mathgenealogy.org/id.php?id=66">George Dennis Byrne</a></li>
</ol>
<h2>4. Rationalisierte Schrittweiten und dessen Einfluß<a id=RationalisierteSchrittweite></a></h2>
<blockquote>
<p>In einfacher Genauigkeit sind die <a href="https://en.wikipedia.org/wiki/IBM_System/360">IBM 360 Systeme</a> Maschinen mit Basis
16 und abgehackter Arithmetik, die etwa sieben Dezimalstellen mitführen.
Die Wortlängen und Rundungsfehlereigenschaften sind so schlecht, daß
einfache Genauigkeit vollständig nutzlos für die ernsthafte Lösung von
Differentialgleichungen ist (im Unterschied zu Lösungen, die als
Beispiel im Unterricht vorgeführt werden).
Andererseits ist die doppelte Genauigkeit von etwa 16 Dezimalstellen
hardwaremässig eingebaut und sie kostet nur etwa 25% mehr als einfache
Genauigkeit.
Aus diesen Gründen sollte man gewöhnlich auf dieser Serie von Maschinen
vollständig mit doppelter Genauigkeit rechnen.
(Manche wundern sich, wie billig doppelte Genauigkeit ist, andere, warum
eine so schlechte einfache Genauigkeit vorgesehen wurde.)</p>
<p><a href="https://www.researchgate.net/profile/Lawrence-Shampine">Lawrence F. Shampine</a>, M.K. Gordon, <a href="https://www.amazon.de/Computer-Solution-Ordinary-Differential-Equations/dp/0716704617">&quot;Computer Solutions&quot; (1984)</a></p>
</blockquote>
<p><a href="https://doi.org/10.1002/zamm.19730530805">Filippi/Kraska (1973)</a> machten auf den
folgenden Sachverhalt aufmerksam.
Wählt man die Startschrittweite derart, daß sie im ersten Viertel des
Rechnerwortes exakt darstellbar ist und ist ebenfalls der Anfangspunkt $t_0$
so gewählt, daß er exakt im Rechnerwort darstellbar ist und wird nun
weiterhin die Schrittweite lediglich halbiert oder verdoppelt, so ergibt
sich eine sehr wünschenswerte Genauigkeitsanhebung.
Die Einschränkung auf ein Viertel der Wortlänge dient nur zur Illustriation
und um genügende Reserven bei der Schrittweitenverdopplung oder Halbierung zu
haben.</p>
<p>Die nachstehende Tabelle enthält die Werte für die Differentialgleichung
$$
\dot y = \pmatrix{0&amp;15\cr -0.6&amp;0\cr}y, \qquad y(0)=\pmatrix{0\cr 1\cr},
\qquad t\in[0,50],
$$
mit der exakten Lösung
$$
y(t) = \pmatrix{5\sin3t\cr \cos3t\cr}, \qquad t\in[0,50].
$$
Diese Testdifferentialgleichung wurde einmal mit
<em>dual rationalisierter</em> Schrittweite und einmal
ohne diesen Effekt integriert und zwar mit von S. Filippi und E. Kraska
entworfenen Hybrid-Verfahren.
Da bei der obigen Differentialgleichung das Integrationsintervall vergleichsweise
lang ist, tritt der erwünschte Effekt besonders deutlich zutage.
Die Ergebnisse wurden auf einer Rechenanlage vom Typ <a href="https://en.wikipedia.org/wiki/CDC_6000_series#The_6400">CDC 6400</a> mit 48 bit
Mantissenlänge gewonnen.</p>
<table>
<thead>
<tr>
<th>$\varepsilon$</th>
<th>$h_0$</th>
<th>Fehler in $y_1(50)$</th>
<th>Fehler in $y_2(50)$</th>
</tr>
</thead>
<tbody>
<tr>
<td>$10^{-12}$</td>
<td>einfach</td>
<td>$7.659\cdot10^{-13}$</td>
<td>$1.657\cdot10^{-13}$</td>
</tr>
<tr>
<td>&quot;</td>
<td>angepaßt</td>
<td>$1.411\cdot10^{-13}$</td>
<td>$3.886\cdot10^{-14}$</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>$10^{-13}$</td>
<td>einfach</td>
<td>$6.371\cdot10^{-13}$</td>
<td>$1.298\cdot10^{-13}$</td>
</tr>
<tr>
<td>&quot;</td>
<td>angepaßt</td>
<td>$1.184\cdot10^{-14}$</td>
<td>$2.851\cdot10^{-15}$</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>$10^{-14}$</td>
<td>einfach</td>
<td>$6.262\cdot10^{-13}$</td>
<td>$1.272\cdot10^{-13}$</td>
</tr>
<tr>
<td>&quot;</td>
<td>angepaßt</td>
<td>$9.773\cdot10^{-16}$</td>
<td>$2.100\cdot10^{-16}$</td>
</tr>
</tbody>
</table>
<p>Wollte man diese Rationalisierung der Schrittweite in das Programm
TENDLER einbauen, so wären</p>
<ol>
<li>die Schrittweiten- und Ordnungssteuerung,</li>
<li>die Fehlerkontrolle und</li>
<li>der Konvergenztest davon betroffen.</li>
</ol>
<p>Man sollte vermerken, daß dieser Effekt mehr für sehr hohe
Genauigkeitsanforderungen konzipiert ist.
Wichtig ist, daß die Startzeit $t_0$ eine günstige Interndarstellung besitzt.
Ist dies nicht der Fall, so muß die erste Schrittweite so bemessen werden,
daß man durch $t_0+h_0$ auf eine günstige Interndarstellung kommt.
Dies zu erreichen ist einfach, wenn man Gleitkommazahlen maskieren könnte.
Weiß man um die Interndarstellung der Gleitkommazahlen im Hauptspeicher,
im Cache und in den Registern, so genügt u.U. ein einfaches §union§.</p>
<p>Biographisch.</p>
<ol>
<li><a href="https://de.wikipedia.org/wiki/Siegfried_Filippi">Siegfried Filippi</a>, <a href="https://www.genealogy.math.ndsu.nodak.edu/id.php?id=23892&amp;fChrono=1">math. genealogy</a></li>
<li><a href="https://www.genealogy.math.ndsu.nodak.edu/id.php?id=53408">Ernst Kraska</a></li>
</ol>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/10-28-praediktor-korrektor-verfahren-und-verallgemeinerungen</link>
		<guid>https://eklausmeier.goip.de/blog/2025/10-28-praediktor-korrektor-verfahren-und-verallgemeinerungen</guid>
		<title>Prädiktor-Korrektor-Verfahren und Verallgemeinerungen</title>
		<category>mathematics</category>
		<pubDate>Tue, 28 Oct 2025 13:00:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#PCVerfahren">1. Pädiktor-Korrektor-Verfahren und lineare Differenzengleichungen</a></li>
<li><a href="#NewtonIteration">2. Newton Iteration und Prädiktor-Korrektor-Verfahren</a></li>
<li><a href="#Gegenueberstellung">3. Gegenüberstellung von $\beta_\kappa/\alpha_\kappa$ für 3 Verfahren</a></li>
<li><a href="#AnzahlNewtonIterationen">4. Anzahl der Newton Iterationen und Konsistenzordnung</a></li>
</ul>
<p>Implizite lineare Mehrschrittverfahren benötigen zur Lösung der dabei
auftretenden Gleichungssysteme ein Iterationsverfahren.
Dies ist entweder die Picard Iteration oder eine der vielen Spielarten der
Newton Iteration.
Die erste Iterationsart ist leicht zu programmieren und erfordert
wenig zusätzlichen Aufwand, ist aber nicht für steife
Differentialgleichungen geeignet, da andernfalls hier eine erhebliche
Einschränkung der Schrittweite in Kauf zu nehmen wäre.
Bei dem Newton Iterationsverfahren liegen die Verhältnisse umgekehrt.
Die Schrittweite muß aus Konvergenzgründen des Iterationsverfahrens
i.d.R. nicht notwendig stark reduziert werden,
allerdings ist der programmiermässige und rechenzeitmässige Aufwand höher.
Der Startwert für die Iteration, entweder Picard- oder Newton Iteration,
wird häufig durch ein explizites Verfahren geliefert, dem sogenannten Prädiktor.
Vorgeschlagen wird auch (insbesondere bei Benutzung einer der zahlreichen
Varianten der Newton Iteration) den zuletzt akzeptierten Näherungswert für
die Integration, als Startwert für die Iteration zu verwenden.
Gelegentlich wird nur dann von Prädiktor-Korrektor-Verfahren gesprochen,
wenn mit Hilfe des Picardschen Iterationsverfahren iteriert wird.
Im Zusammenhang wird allerdings stets deutlich, welche Iterationsart
nun gemeint ist.
Hier wird, wie vielerorts üblich, keinerlei Unterschied in der
Benennung vorgenommen.</p>
<p>Im ersten Abschnitt wird die Schreibweise von Prädiktor-Korrektor-Verfahren
behandelt.
Es zeigt sich hierbei, daß es unter gewissen Umständen günstiger ist,
die Implizitheit der Korrektorformeln zu beseitigen und somit
zu einer expliziten Darstellung der berechneten Näherungslösungen der
Differentialgleichungen zu kommen.
Anschliessend werden die bei der Picard Iteration wichtigen Konstanten
$\gamma$ von mehreren Verfahren einander gegenübergestellt.
Verglichen werden hier die BDF, Adams-Verfahren und die zyklischen
Formeln von Tendler.
Schließlich wird der Startfehler-Satz von Liniger formuliert und bewiesen.
Dieser Satz verallgemeinert einen bekannten Satz über
Prädiktor-Korrektor-Verfahren, wenn nur die Picard Iteration zur
Anwendung gelangt, auf den entsprechenden Satz, wenn die
Newton-Raphson Iteration und die Newton-Kantorovich Iteration benutzt wird.
Es zeigt sich hierbei, daß bei Picard Iteration, Newton Iteration und
Newton-Kantorovich Iteration eine einzige Iteration vollkommen ausreicht
um die Konsistenzordnung des Korrektors zu bewahren, wenn sich die
Konsistenzordnungen von Prädiktor und Korrektor nur um eine Ordnung
unterscheiden.
Hiermit wird dann eine sehr gängige Rechenpraxis theoretisch abgesichert.</p>
<h2>1. Pädiktor-Korrektor-Verfahren und lineare Differenzengleichungen<a id=PCVerfahren></a></a></h2>
<p><strong>1.</strong> Bei fester Iterationsanzahl $i$ lassen sich Prädiktor-Korrektor-Verfahren
als lineare Differenzengleichungen betrachten und analysieren.
Stellt man  das resultierende Gesamtverfahren in der Form dar</p>
<div class=math>
$$
    \sum_{i=0}^\kappa A_iz_{n+i} = h\sum_{i=0}^\kappa B_iF_{n+i},\qquad
        n=0,1,\ldots,
$$
</div>
<p>so wird folgendes deutlich:</p>
<ol>
<li>Die Konvergenzvoraussetzung $\mathopen|h\gamma J\mathclose| &lt; 1$
wird zu einer Stabilitätsbedingung;</li>
<li>Es genügt <em>ein</em> Programm, welches bei gegebenen Matrizen
$A_i$ und $B_i$, den Widlund-Winkel und weitere für die
Stabilität wichtige Eigenschaften berechnet;</li>
<li>Die Berechnung des charakteristischen Polynoms mit Hilfe eines
Formelmanipulationssystems, wie z.B. <a href="https://en.wikipedia.org/wiki/Reduce_(computer_algebra_system)">REDUCE</a>,
siehe <a href="http://www.reduce-algebra.com/manual/manual.html">Anthony C. Hearn + Rainer Schöpf (2025)</a>, wird vereinheitlicht,
obwohl natürlich dieses Polynom wegen (2), von geringerem Interesse für sich
alleine ist.</li>
</ol>
<p><strong>2.</strong> Für das implizite Euler-Verfahren $y_{n+1}=y_n+hf_{n+1}$ als Korrektor
und dem expliziten Euler-Verfahren $y_{n+1}=y_n+hf_n$ als Prädiktor
ergibt sich für das $P(EC)^iE$-Verfahren</p>
<div class=math>
$$
\eqalign{
    y^0_{n+1} &= y_n + hf_n,\cr
    y^1_{n+1} &= y_n + hf_{n+1}^0,\cr
    \vdots    &  \qquad \vdots\cr
    y^{i-1}_{n+1} &= y_n + hf_{n+1}^{i-2},\cr
    y_{n+1} &= y_n + hf_{n+1}^{i-1}.\cr
}
$$
</div>
<p>Mit den Vektoren</p>
<div class=math>
$$
  z_n = \pmatrix{y^0_n\cr y^1_n\cr \vdots\cr y^{i-1}_n\cr y_n\cr},\qquad
  z_{n+1} = \pmatrix{y^0_{n+1}\cr y^1_{n+1}\cr \vdots\cr y^{i-1}_{n+1}\cr y_{n+1}\cr},
  \qquad
  F_n = \pmatrix{f^0_n\cr f^1_n\cr \vdots\cr f^{i-1}_n\cr f_n\cr},\qquad
  F_{n+1} = \pmatrix{f^0_{n+1}\cr f^1_{n+1}\cr \vdots\cr f^{i-1}_{n+1}\cr f_{n+1}\cr}
    \in\mathbb{C}^{i+1}.
$$
</div>
<p>ergeben sich für die Matrizen $A_0$, $A_1$, $B_0$ und $B_1$ die Einträge</p>
<div class=math>
$$
    A_0 = \pmatrix{
        0 & \ldots & 0 & -1\cr
        \vdots & \ddots & \vdots & \vdots\cr
        0 & \ldots & 0 & -1\cr},\: 
    A_1 = I,\quad
    B_0 = \pmatrix{
        0 & 0 & \ldots & 0 & 1\cr
        0 & 0 & \ldots & 0 & 0\cr
        \vdots & \vdots & \ddots & \vdots & \vdots\cr
        0 & 0 & \ldots & 0 & 0\cr
        0 & 0 & \ldots & 0 & 0\cr},\quad
    B_1 = \pmatrix{
        0 & 0 & \ldots & 0 & 0\cr
        1 & 0 & \ldots & 0 & 0\cr
        \vdots & \vdots & \ddots & \vdots & \vdots\cr
        0 & \ldots & 1 & 0 & 0\cr
        0 & \ldots & 0 & 1 & 0\cr}.
$$
</div>
<p><strong>3.</strong> Zum Beispiel erhält man für das $P(EC)(EC)E$-Verfahren mit den beiden
Euler-Formeln das dreistufigen Verfahren</p>
<div class=math>
$$
\eqalign{
    y^0_{n+1} &= y_n + hf_n,\cr
    y^1_{n+1} &= y_n + hf^0_{n+1},\cr
    y_{n+1}   &= y_n + hf^1_{n+1}
}
$$
</div>
<p>und mit den Vektoren</p>
<div class=math>
$$
    z_n = \pmatrix{y^0_n\cr y^1_n\cr y_n\cr}, \qquad
    z_{n+1} = \pmatrix{y^0_{n+1}\cr y^1_{n+1}\cr y_{n+1}\cr}, \qquad
    F_n = \pmatrix{f^0_n\cr f^1_n\cr f_n\cr}, \qquad
    F_{n+1} = \pmatrix{f^0_{n+1}\cr f^1_{n+1}\cr f_{n+1}\cr},
$$
</div>
<p>ergeben sich die Matrizen $A_0$, $A_1$, $B_0$ und $B_1$ wie folgt</p>
<div class=math>
$$
    A_0 = \pmatrix{
        0 & 0 & -1\cr
        0 & 0 & -1\cr
        0 & 0 & -1\cr}, \quad
    A_1 = \pmatrix{
         1 & 0 & 0\cr
         0 & 1 & 0\cr
         0 & 0 & 1\cr}, \quad
    B_0 = \pmatrix{
        0 & 0 & 1\cr
        0 & 0 & 0\cr
        0 & 0 & 0\cr}, \quad
    B_1 = \pmatrix{
        0 & 0 & 0\cr
        1 & 0 & 0\cr
        0 & 1 & 0\cr}.
$$
</div>
<p><strong>4.</strong> Für das $P(EC)^i$-Verfahren, also Auslassung der letzten Funktionsauswertung
und Benutzung des zuletzt verfügbaren Funktionswertes im neuen
zusammengesetzten Verfahren, ergibt sich ganz analog</p>
<div class=math>
$$
\eqalign{
    y^0_{n+1} &= y_n + hf_n^{i-1},\cr
    y^1_{n+1} &= y_n + hf_{n+1}^0,\cr
    \vdots    &  \qquad \vdots\cr
    y^{i-1}_{n+1} &= y_n + hf_{n+1}^{i-2},\cr
    y_{n+1}   &= y_n + hf_{n+1}^{i-1}.\cr
}
$$
</div>
<p>Mit der Schreibweise der Vektoren $z_{n+1}$, $z_n$, $F_{n+1}$ und $F_n$
wie oben, also</p>
<div class=math>
$$
    z_n = \pmatrix{y^0_n\cr y^1_n\cr \vdots\cr y^{i-1}_n\cr y_n\cr}, \qquad
    z_{n+1} = \pmatrix{y^0_{n+1}\cr y^1_{n+1}\cr \vdots\cr y^{i-1}_{n+1}\cr y_{n+1}\cr},
    \qquad
    F_n = \pmatrix{f^0_n\cr f^1_n\cr \vdots\cr f^{i-1}_n\cr f_n\cr}, \qquad
    F_{n+1} = \pmatrix{f^0_{n+1}\cr f^1_{n+1}\cr \vdots\cr f^{i-1}_{n+1}\cr f_{n+1}\cr}.
$$
</div>
<p>bleiben natürlich die Matrizen $A_0$ und $A_1$ unverändert.
Lediglich $B_0$ verändert sich und es ergibt sich</p>
<div class=math>
$$
    B_0 = \pmatrix{
        0 & \ldots & 0 & 1 & 0\cr
        0 & \ldots & 0 & 0 & 0\cr
        \vdots & \ddots & \vdots & \vdots & \vdots\cr
        0 & \ldots & 0 & 0 & 0\cr
        0 & \ldots & 0 & 0 & 0\cr}, \qquad
    B_1 = \pmatrix{
        0 & 0 & \ldots & 0 & 0\cr
        1 & 0 & \ldots & 0 & 0\cr
        \vdots & \vdots & \ddots & \vdots & \vdots\cr
        0 & \ldots & 1 & 0 & 0\cr
        0 & \ldots & 0 & 1 & 0\cr}.
$$
</div>
<p><strong>5.</strong> Konkret für das $P(EC)(EC)$-Verfahren mit den beiden
Euler-Formeln erhält man</p>
<div class=math>
$$
\eqalign{
    y^0_{n+1} &= y_n + hf_n^1,\cr
    y^1_{n+1} &= y_n + hf^0_{n+1},\cr
    y_{n+1}   &= y_n + hf^1_{n+1}.
}
$$
</div>
<p>Mit den üblichen Vektoren</p>
<div class=math>
$$
    z_n = \pmatrix{y^0_n\cr y^1_n\cr y_n\cr}, \qquad
    z_{n+1} = \pmatrix{y^0_{n+1}\cr y^1_{n+1}\cr y_{n+1}\cr}, \qquad
    F_n = \pmatrix{f^0_n\cr f^1_n\cr f_n\cr}, \qquad
    F_{n+1} = \pmatrix{f^0_{n+1}\cr f^1_{n+1}\cr f_{n+1}\cr}.
$$
</div>
<p>ergeben sich dann die Matrizen $A_0$, $A_1$, $B_0$ und $B_1$ zu</p>
<div class=math>
$$
    A_0 = \pmatrix{
        0 & 0 & -1\cr
        0 & 0 & -1\cr
        0 & 0 & -1\cr}, \quad
    A_1 = \pmatrix{
         1 & 0 & 0\cr
         0 & 1 & 0\cr
         0 & 0 & 1\cr}, \quad
    B_0 = \pmatrix{
        0 & 1 & 0\cr
        0 & 0 & 0\cr
        0 & 0 & 0\cr}, \quad
    B_1 = \pmatrix{
        0 & 0 & 0\cr
        1 & 0 & 0\cr
        0 & 1 & 0\cr}.
$$
</div>
<p>wobei sich selbstverständlich nur die Matrix $B_0$ geändert hat.</p>
<p><strong>6.</strong> Die Verallgemeinerung auf mehrstufige Verfahren, bei denen in jeder Stufe
eine feste Anzahl an Korrektoriterationen durchgeführt werden,
ist nun offensichtlich.
Es ist genauso möglich implizite Runge-Kutta Verfahren oder blockimplizite
Verfahren mitzubehandeln, wenn die nichtlinearen Gleichungen mit einer
festen Anzahl an Iterationen gelöst werden.</p>
<p>Als Beispiel werde das folgende blockimplizite Verfahren behandelt.
Der Einfachheit werde lediglich die explizite Euler-Formel als Verfahren zur
Besorgung einer Anfangsnäherung benutzt.
Man erhält dann</p>
<div class=math>
$$
\eqalignno{
    y_{2n+1}^0 &= y_{2n} + hf_{2n},\cr
    y_{2n+2}^0 &= y^0_{2n+1} + hf_{2n+1}^0,\cr
    \quad & \quad\cr
    y_{2n+1}^1 &= y_{2n} + {h\over12}(5f_{2n} + 8f_{2n+1}^0 - f_{2n+2}^0),\cr
    y_{2n+2}^1 &= y_{2n} + {h\over6}(f_{2n} + 4f_{2n+1}^0 + f_{2n+2}^0),\cr
    \quad & \quad\cr
    y_{2n+1}   &= y_{2n} + {h\over12}(5f_{2n} + 8f_{2n+1}^1 - f_{2n+2}^1),\cr
    y_{2n+2}   &= y_{2n} + {h\over6}(f_{2n} + 4f_{2n+1}^1 + f_{2n+2}^1).\cr
}
$$
</div>
<p>Der Prinzipientreue wegen, wurde in der obigen vierten Stufe $f_{2n+1}^0$
verwendet, ebenso gut wäre es möglich gewesen in diesem Falle schon gleich
den Wert $f_{2n+1}^1$ zu benutzen, der ja anschliessend ehedem berechnet
werden muß und zwar auf jeden Fall bei $y_{2n+1}^1$.
Gleiches gilt für $f_{2n+1}^1$ in der letzten Stufe.</p>
<p><strong>7.</strong> Die Annahme, daß die Anzahl der Iterationen schon gleich zu Anfang der
Integration festliegt, tritt sehr häufig auf.
Beispielsweise verwendet das Programm <a href="https://www.netlib.org/ode/ode.f">DE/STEP</a> von
<a href="https://www.amazon.de/-/en/Computer-Solution-Ordinary-Differential-Equations/dp/0716704617">Shampine/Gordon (1984)</a>
stets den $PECE$-Modus.
In dem Programm TENDLER kann der Benutzer frei wählen, welchen
Iterationsmodus er wünscht.</p>
<p><a href="https://www.researchgate.net/profile/Lawrence-Shampine">Lawrence F. Shampine</a>,
<a href="https://zbmath.org/authors/gordon.marilyn-k">Marilyn K. Gordon</a>.</p>
<p>Ihm steht es hier frei, gleich zu Anfang der Integration die Anzahl der
Iterationen zu fixieren, oder aber diese Entscheidung dem Programm selber
zu überlassen.
Im letzteren Falle werden die Anzahl der Iterationen adaptiv aufgrund eines
Konvergenzkriteriums festgelegt.
Dieser Entscheidungsspielraum gilt hier sogar gleichermaßen für die
Newton-Kantorovich Iteration als auch für die Picard Iteration.
Natürlich kann auch nachträglich zu jeder Zeit die Iterationsart vom
Benutzer beliebig geändert werden.
Anwendung findet dies, wenn man zuerst die einem völlig unbekannte
Differentialgleichung mit der sichersten Einstellung (i.d.R. <code>mnifloat</code>)
numerisch löst.
Weiß man dann anschliessend aufgrund der generierten Statistiken wesentlich
mehr über die Art der Differentialgleichung, so wählt man anschliessend
den besonders günstigen Modus von vorneherein aus.
In diesem zweiten Lauf kann man auch die Genauigkeitsanforderung
unter Umständen wesentlich restriktiver setzen und erhält dann dennoch bei
gleichen Rechenzeiten ein genaueres Resultat.
Aber selbstverständlich ist es viel bequemer alle diese Entscheidungen dem
Programm TENDLER selbst zu überlassen.</p>
<h2>2. Newton Iteration und Prädiktor-Korrektor-Verfahren<a id=NewtonIteration></a></h2>
<p><strong>1.</strong> Prädiktor-Korrektor-Verfahren, bei denen die Auflösung der Implizitheit
durch das Newton-Verfahren geschieht, lassen sich ebenfalls als
zusammengesetzte lineare Mehrschrittverfahren schreiben und zwar
in gänzlich analoger Form wie schon geschehen.
Markantester Unterschied ist nun lediglich, daß die Koeffizienten des
Verfahrens Matrizen sind, anstatt Skalare, wie sonst.</p>
<p>Das resultierende Matrixpolynom ist letztlich ein Matrixpolynom mit
Koeffizienten, die jeweils Blockmatrizen sind.
Dies ist nicht gänzlich überraschend, da dies auch der Fall ist,
wenn man die Dimension der Differentialgleichung mit in der
Schreibweise berücksichtigt.
Anders ist nun jedoch, daß nicht jede Komponente gleich behandelt wird.
Analoges gilt bei ROW-Verfahren und bei Verfahren mit Ableitungen.</p>
<p><strong>2.</strong> Jeder Iterationsschritt mit dem Newton-Verfahren, bzw. mit
einer Variante dieses Iterationsverfahrens, ist von der Form:</p>
<div class=math>
$$
\eqalign{
    y^{\nu+1} &= y^\nu + W^{-1}(\psi+h\gamma f(y^\nu)-y^\nu)\cr
              &= (I-W^{-1})y^\nu + W^{-1}\psi + \gamma W^{-1}z^\nu,\cr
}
$$
</div>
<p>wegen $z^\nu=hf(y^\nu)$.
Nur nebenläufig sei daran erinnert, daß das Verfahren nur so zu
Untersuchungszwecken geschrieben wird, programmiert wird es in dieser
Gestalt selbstverständlich nicht.</p>
<p><strong>3.</strong> In dem Programm TENDLER sind alle Stufen des Verfahrens zweiter
Ordnung, nichts anderes als die BDF2 und es wird die explizite
Mittelpunktsregel als Prädiktorformel benutzt.
Ausführlich ausgeschrieben lautet ein
Newton-Kantorovich-$P(EC)(EC)$-Verfahren mithin:</p>
<div class=math>
$$
\begin{array}{rll}
    y^0_{n+1} &= y_{n-1}+2z^1_n, & \quad\hbox{explizite Mittelpunktsregel;}\cr
    y^1_{n+1} &= (I-W^{-1})y^0_{n+1}
        +\left({4\over3}W^{-1}y_n-{1\over3}W^{-1}y_{n-1}\right)
        +{2\over3}W^{-1}z^0_{n+1}, & \quad\hbox{BDF2, erste Iteration;}\cr
    y_{n+1} &= (I-W^{-1})y^1_{n+1}
        +\left({4\over3}W^{-1}y_n-{1\over3}W^{-1}y_{n-1}\right)
        +{2\over3}W^{-1}z^1_{n+1}, & \quad\hbox{BDF2, zweite Iteration.}\cr
\end{array}
$$
</div>
<p>Würde man mit dem Picardschen Iterationsverfahren rechnen, so hätte
man wie üblich lediglich $W=I$ zu setzen.
Beim $P(EC)(EC)E$-Verfahren hätte man in der ersten Zeile statt
$z^1_n$ einfach $z^2_n=z_n$ zu schreiben.</p>
<p>Schreibt man dann das $P(EC)(EC)$-Verfahren als Matrix-Differenzengleichung,
so erhält man %für $y^\nu_i$ dann die Matrixdifferenzengleichung</p>
<div class=math>
$$
     A_0\pmatrix{y^0_{n-1}\cr y^1_{n-1}\cr y_{n-1}\cr}
    +A_1\pmatrix{y^0_n\cr y^1_n\cr y_n\cr}
    +A_2\pmatrix{y^0_{n+1}\cr y^1_{n+1}\cr y_{n+1}\cr}
    =
     B_0\pmatrix{z^0_{n-1}\cr z^1_{n-1}\cr z_{n-1}\cr}
    +B_1\pmatrix{z^0_n\cr z^1_n\cr z_n\cr}
    +B_2\pmatrix{z^0_{n+1}\cr z^1_{n+1}\cr z_{n+1}\cr}
$$
</div>
<p>mit den Matrizen $A_0$, $A_1$, $A_2$ und $B_0$, $B_1$, $B_2$ wie folgend
\begingroup</p>
<div class=math>
$$
\def\w#1{{#1\over3}W^{-1}}
\def\i{W^{-1}-I}
    A_0 = \pmatrix{
        0 & 0 & -1\cr
        0 & 0 & \w1\cr
        0 & 0 & \w1\cr},\qquad
    A_1 = \pmatrix{
        0 & 0 & 0\cr
        0 & 0 & -\w4\cr
        0 & 0 & -\w4\cr},\qquad
    A_2 = \pmatrix{
        1 & 0 & 0\cr
        \i& 1 & 0\cr
        0 &\i & 1\cr}
$$
</div>
<p>und</p>
<div class=math>
$$
\def\w#1{{#1\over3}W^{-1}}
    B_0 = {\bf 0},\qquad
    B_1 = \pmatrix{
        0 & 2 & 0\cr
        0 & 0 & 0\cr
        0 & 0 & 0\cr},\qquad
    B_2 = \pmatrix{
        0  & 0 & 0\cr
        \w2& 0 & 0\cr
        0  &\w2& 0\cr}.
$$
</div>
<p>Die Matrizen $A_0,A_1,A_2,B_2$ hängen von $W$ ab.
Es handelt sich in diesem Sinne nicht mehr notwendig um eine
Differenzengleichung mit konstanten Koeffizienten.</p>
<p><strong>4.</strong> Allgemeiner gilt für die letzten beiden Matrizen $A_\kappa$ und $B_\kappa$
bei einem $P(EC)(EC)$-Verfahren die Darstellung</p>
<div class=math>
$$
\def\xx{\quad}
\def\g{\gamma W^{-1}}
\begin{matrix}
    \begin{matrix} \xx\ldots\xx & y^0_{n+1}&y^1_{n+1}&y_{n+1} & \xx&\ldots&z^0_{n+1}&z^1_{n+1}&z_{n+1} \end{matrix}\cr
    \begin{pmatrix}
        \ldots&I&0&0  &\xx&\ldots&0&0&0\cr
        \ldots&\i&I&0 &\xx&\ldots&\g&0&0\cr
        \ldots&0&\i&I &\xx&\ldots&0&\g&0\cr
    \end{pmatrix}
\end{matrix}
$$
</div>
<p>an der man natürlich auch den allgemeineren Falle, sofort abliest.</p>
<h2>3. Gegenüberstellung von $\beta_\kappa/\alpha_\kappa$ für 3 Verfahren<a id=Gegenueberstellung></a></h2>
<p>Es folgt eine Gegenüberstellung der Werte $\gamma={\beta_\kappa/\alpha_\kappa}$
für die drei linearen Verfahren Adams-Moulton, BDF und Tendler.</p>
<p>Für das zyklische Verfahren wird dabei der größte Wert $\gamma$ innerhalb
des Zykluses angegeben, da dieser ja maßgeblich die Konvergenz der
Picard Iteration bestimmt.
Dennoch unterscheiden sich bei den Formeln von <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">Joel Marvin Tendler</a>
die Werte $\gamma$ innerhalb eines Zykluses <em>nicht</em> angebenswert.</p>
<div class=math>
$$
\def\xxx{\hbox{n/a}}
\begin{array}{c|ccc}
p & \hbox{Adams-Moulton}   & \hbox{BDF}           & \hbox{Tendler}\cr
\hline
1 &1                       &1                     &1\cr
2 &\displaystyle{1\over2}=0.5            &\displaystyle{2\over3}\approx0.7    &\displaystyle{2\over3}\approx0.7\cr
3 &\displaystyle{5\over12}\approx0.4     &\displaystyle{6\over11}\approx0.5   &\displaystyle{6\over11}\approx0.5\cr
4 &\displaystyle{9\over24}\approx0.4     &\displaystyle{12\over25}\approx0.5  &\displaystyle{48\over93}\approx0.5\cr
5 &\displaystyle{251\over720}\approx0.3  &\displaystyle{60\over137}\approx0.4 &\displaystyle{600\over1158}\approx0.5\cr
6 &\displaystyle{475\over1440}\approx0.3 &\displaystyle{60\over147}\approx0.4 &{1200\over2299}\approx0.5\cr
7 &\displaystyle{19087\over60480}\approx0.3 &\xxx                             &\displaystyle{4200\over9748}\approx0.4\cr
\end{array}
$$
</div>
<p>Für die Adams-Moulton-Verfahren ist</p>
<div class=math>
$$
    \gamma={\beta_\kappa\over\alpha_\kappa}=\sum_{j=0}^\kappa \gamma^*_j,
$$
</div>
<p>mit</p>
<div class=math>
$$
    \gamma_j^* = (-1)^j \int_0^1{-s+1\choose j}ds.
$$
</div>
<p>Jedes Adams-Moulton-Verfahren ist ein $k$-Schrittverfahren, jedoch der
Konvergenzordnung $p=k+1$, außer bei dem impliziten Euler-Verfahren, welches
man i.d.R. auch unter den Adams-Moulton-Verfahren untergeordnet
findet, welches jedoch als Einschrittverfahren (wie die Trapezregel) nicht
die Konvergenzordnung $1+1=2$ hat.</p>
<h2>4. Anzahl der Newton Iterationen und Konsistenzordnung<a id=AnzahlNewtonIterationen></a></h2>
<p><strong>1.</strong>
Bei Picard-Prädiktor-Korrektor-Verfahren benutzt man das Picardsche
Iterationsverfahren zur Lösung der dabei anfallenden Gleichungen.
Es zeigt sich dabei, daß die Konsistenzordnung $p_{\max}$ und damit
einhergehend die Konvergenzordnung der so gebildeten
zusammengesetzten Verfahren, aus einmal Prädiktor als Startwert der
Iteration und zum zweiten dem Korrektor, einer Schranke nach oben
unterliegt und zwar</p>
<div class=math>
$$
    p_{\max} = \min(\hat p+i,p).
$$
</div>
<p>Dies gilt sowohl für das $P(EC)^i$- als auch für das $P(EC)^iE$-Verfahren.
Hierbei bezeichnet $\hat p$ die Konsistenzordnung des Prädiktors und
$p$ ist die Konsistenzordnung des Korrektors.
Ein direkter Beweis obiger Behauptung ergäbe sich u.a. mit Hilfe der
Begriffe der Totalannullation und der annullierten Dominanz.</p>
<p>Eine völlig analoge Aussage, anstatt für die Picard Iteration, nun für
die Newton Iteration und Varianten des Newton-Verfahrens, macht der
<em>Startfehler-Satz von Liniger</em>, <a href="https://dl.acm.org/doi/pdf/10.1145/362663.362745">Liniger (1971)</a>,
<a href="https://de.wikipedia.org/wiki/Werner_Liniger">Werner Liniger</a> (1927–2017).</p>
<p>Der Startfehlersatz von Liniger zeigt an, wie sich Fehler in den Startwerten
<em>der Iteration</em> ausbreiten.</p>
<p>Mit Newton-Raphson-Verfahren sei gemeint, daß in jedem Iterationsschritt
die Iterationsmatrix neu berechnet wird.</p>
<p>Mit Newton-Kantorovich-Verfahren sei bezeichnet dasjenige
Iterationsverfahren zur Lösung von Gleichungssystemen, bei welchem die
Iterationsmatrix nur ganz zu Anfang der Iteration berechnet wird.
Es sei daran erinnert, daß in dem Programm TENDLER und in vielen weiteren
Programmen noch weiter gegangen wird.
Die Iterationsmatrix wird nicht nur über mehrere Iterationsschritte
konstant gelassen, sondern sogar über mehrere Integrationsschritte und dies
selbst dann, wenn sich die Schrittweite schon mehrfach geändert hat.
Die Schrittweite ist ein wichtiger Bestandteil der Iterationsmatrix.
Es gilt nun jedoch der folgende sehr bedeutsame Sachverhalt.</p>
<p><strong>2. Satz:</strong>  (Startfehler-Satz von Liniger)
Voraussetzung: Es bezeichne $i$ die Anzahl der Iterationen und $\hat p$ sei
die Konsistenzordnung des Startwertes, also die des Prädiktors, und $p$ sei
die Ordnung des Korrektors.
Die Schrittweite $h$ sei genügend klein, wie klein, wird beim Beweis angegeben.</p>
<p>Behauptung: Die Konsistenzordnung $p_{\max}$ eines impliziten linearen
Mehrschrittverfahrens verhält sich in Abhängigkeit der Anzahl der
Iterationen und der Prädiktorkonsistenz, wie folgt:</p>
<ol>
<li>Für die Picard Iteration: $p_{\max}=\min(\hat p+i,p)$.</li>
<li>Für die Newton-Kantorovich Iteration:
$p_{\max}=\min(\hat p+(\hat p+1)i,p)$.</li>
<li>Für die Newton-Raphson Iteration:
$p_{\max}=\min\bigl((\hat p+1)2^i-1,p\bigr)$.</li>
</ol>
<p><strong>3.</strong> Dieses Ergebniss zeigt, daß falls die Ordnung des Prädiktors
höchstens um eins niedriger ist als die Ordnung des Korrektors,
immer eine einzige Iteration
vollkommen ausreicht um die Ordnung des Korrektors zu bewahren.
Bei den Newton Iterationsarten kann die Startordnung sogar
erheblich unter der des Korrektors liegen.
Beim Newton-Kantorovich Iterationsverfahren nimmt die Ordnung linear
mit der Anzahl der Iterationen zu, und beim
Newton-Raphson Iterationsverfahren nimmt die Ordnung sogar quadratisch zu.
Diese Ergebnisse sind natürlich aus anderem Zusammenhang sämtlich bekannt:</p>
<ol>
<li>Die Picard Iteration konvergiert linear,</li>
<li>das Newton-Kantorovich Iterationsverfahren konvergiert
ebenfalls linear, aber asymptotisch schneller und</li>
<li>das Newton-Raphson Iterationsverfahren konvergiert quadratisch
und damit asymptotisch am schnellsten bei größtem Rechenaufwand im
Vergleich mit den beiden anderen Verfahren.</li>
</ol>
<p>Dies alles natürlich unter der Voraussetzung geeignet guter Startwerte für
die Iteration und der eindeutigen Lösbarkeit des Gleichungssystems.
Sind diese Grundvoraussetzungen nicht erfüllt, so braucht beispielsweise das
Newton-Raphson Iterationsverfahren weder zu konvergieren noch gar schon
quadratisch zu konvergieren.
Genau zur Sicherstellung dieser Grundvoraussetzungen dient die Einschränkung
an $\mathopen|h\mathclose|$.</p>
<p><strong>4.</strong> Zur Vorbereitung des Beweises des obigen Satzes seien folgende
Bezeichnungen und Abkürzungen zur Vereinfachung eingeführt.
Zur Lösung des autonomen Differentialgleichungssystems $\dot y=f(y)$
werde verwendet das implizite lineare Mehrschrittverfahren</p>
<div class=math>
$$
    \sum_{i=0}^\kappa \alpha_iy_{n+i} = h \sum_{i=0}^\kappa \beta_i\dot y_{n+i},
        \qquad n=0,1,\ldots
$$
</div>
<p>Wegen $\alpha_\kappa, \beta_\kappa\ne 0$ ist das (i.d.R. nichtlineare)
Gleichungssystem</p>
<div class=math>
$$
    y_{n+\kappa} = \phi(y_{n+\kappa}),\qquad n=0,1,\ldots
$$
</div>
<p>in jedem Zeitschritt zu lösen, mit</p>
<div class=math>
$$
    \phi(y) := h\gamma f(y)+\psi, \qquad
    \psi := -{1\over\alpha_\kappa} \sum_{i=0}^{\kappa-1}\bigl(\alpha_iy_{n+i}
        - h\beta_i f_{n+i}\bigr), \qquad
    \gamma = {\beta_\kappa\over\alpha_\kappa} \ne 0.
$$
</div>
<p>Das Newton-Raphson Iterationsverfahren zur Lösung von $y=\phi(y)$ lautet</p>
<div class=math>
$$
    y^{\nu+1}=\phi(y^\nu)+\phi_y(y^\nu)(y^{\nu+1}-y^\nu),
    \qquad\nu=0,1,\ldots \tag N
    % \left(I-\phi_y(y^\nu)\right)y^{\nu+1}) = ???
$$
</div>
<p>mit $\phi_y=h\gamma J$, und $J=f_y$ ist die Jacobimatrix der Funktion $f$.
Das Newton-Kantorovich Iterationsverfahren lautet</p>
<div class=math>
$$
    y^{\nu+1}=\phi(y^\nu)+\phi_y(y^0)(y^{\nu+1}-y^\nu),
    \qquad\nu=0,1,\ldots \:  . \tag K
$$
</div>
<p>Schließlich die Picard Iteration lautet in der obigen Schreibweise</p>
<div class=math>
$$
    y^{\nu+1} = \phi(y^\nu), \qquad\nu=0,1,\ldots \:  .
$$
</div>
<p>Bezeichnet $\varepsilon^\nu$ die Abweichung der $\nu$-ten Iterierten
$y^\nu$ von der exakten Lösung $y^*$ der Gleichung $y=\phi(y)$, also</p>
<div class=math>
$$
    \varepsilon^\nu = y^\nu - y^*, \qquad y^* = \phi(y^*),
$$
</div>
<p>so folgt unmittelbar</p>
<div class=math>
$$
    y^{\nu+1}-y^\nu = \varepsilon^{\nu+1} - \varepsilon^\nu. \tag D
$$
</div>
<p>Man beachte, daß $y^{*}$ die exakte Lösung der angegebenen Gleichung
$y=\phi(y)$ ist und nicht notwendig auch die exakte Lösung der
Differentialgleichung.
Existenz und Eindeutigkeit von $y^{*}$ mit $y^*=\phi(y^{*})$ ist für
genügend kleine Schrittweite $h$ stets garantiert, aufgrund des
<a href="https://en.wikipedia.org/wiki/Banach_fixed-point_theorem">Banachschen Fixpunktsatzes</a>,
<a href="https://en.wikipedia.org/wiki/Stefan_Banach">Stefan Banach</a> (1892–1945).
Dieser Sachverhalt, als auch der nachfolgende Beweis ist, wenn man so will
bei dieser Art der Begründung, nicht unabhängig von der Steifheit, sondern
ein asymptotisches Resultat, gilt also nur bei ausreichend kleiner
Schrittweite $h$.</p>
<p>Zur Abkürzung seien ferner</p>
<div class=math>
$$
    R(\nu) := (g+1)2^\nu - 1, \qquad
    K(\nu) := g + (g+1)\nu
$$
</div>
<p>die Abbruchordnung des Newton-Raphson Iterationsverfahrens und
die Abbruchordnung des Newton-Kantorovich Iterationsverfahrens.
Dabei sei die Abweichung des Startwertes $y^0$ der Iteration vom exakten
Startwert $y^*$ von der Ordnung ${\cal O}(h^g)$, mit einem $g\in\mathbb{N}$.</p>
<p><em>Beweis:</em> (Startfehlersatzes von Liniger)</p>
<p><strong>Zu (1):</strong> Die Picard Iteration lässt sich durch <a href="https://de.wikipedia.org/wiki/Taylor-Formel">Taylorentwicklung</a> um $y^*$
auch schreiben zu</p>
<div class=math>
$$
    y^{\nu+1} = \phi(y^\nu) = \phi(y^*)+\underline{\phi_y(\xi)}\varepsilon^\nu .
$$
</div>
<p>Wegen $y^*=\phi(y^{*})$ folgt damit</p>
<div class=math>
$$
    \varepsilon^{\nu+1} = \phi_y(\xi)\varepsilon^\nu,\qquad\nu=0,1,\ldots
$$
</div>
<p>und aufgrund dieser einfachen Rekurrenzgleichung für
$\varepsilon^\nu$ daher offensichtlich
$\varepsilon^{\nu+1} = {\cal O}(h^{g+\nu+1})$,
falls $\varepsilon^\nu = {\cal O}(h^{g+\nu})$.
Wegen $\phi_y(\cdot) = {\cal O}(h)$ liefert damit jede Iteration eine
$h$-Potenz mehr dazu.</p>
<p>Der Anfangsfehler war ja voraussetzungsmässig von der Ordnung
${\cal O}(h^g)$.
Die Schrittweite $h$ muß so klein gewählt werden, daß die obige
Rekurrenzgleichung für $\varepsilon^\nu$ kontrahierend ist.
In einer Norm muß also gelten $\left|\phi_y(\xi)\right| &lt; 1$.</p>
<p>$\underline{\phi_y(\xi)}$ bezeichnet hier die Jacobimatrix von $\phi$,
allerdings wird jede Zeile an möglicherweise <em>verschiedenen</em> Stellen
ausgewertet.</p>
<p><a href="https://de.wikipedia.org/wiki/Brook_Taylor">Brook Taylor</a> (1685–1731).</p>
<p>Zu (3): Nach dem <a href="https://de.wikipedia.org/wiki/Taylor-Formel">Satz von Taylor</a> erhält man durch Entwickeln von $\phi$
und $\phi_y$ um $y^{*}$ [$y^* = \phi(y^{*})$] die Beziehungen</p>
<div class=math>
$$
\eqalign{
    \phi(y^\nu)   &= \phi(y^*) + \phi_y(y^*)\varepsilon^\nu
        + {1\over2}\phi_{yy}(\xi)\varepsilon^\nu\varepsilon^\nu,\cr
    \phi_y(y^\nu) &= \phi_y(y^*) + \phi_{yy}(\zeta)\varepsilon^\nu.\cr
} \tag T
$$
</div>
<p>Dabei besteht jede Komponente des Vektors
$\phi_{yy}(\xi)\varepsilon^\nu\varepsilon^\nu$ aus der quadratischen
Form</p>
<div class=math>
$$
    (\varepsilon^\nu)^\top H_i(\xi_i)\varepsilon^\nu,
$$
</div>
<p>wobei jede
Komponente des Vektors eine “andere” <a href="https://de.wikipedia.org/wiki/Hesse-Matrix">Hessematrix</a> $H_i(\xi_i)$
besitzt, möglicherweise ausgewertet an verschiedenen $\xi_i$,
siehe <a href="https://www.sciencedirect.com/book/9780125285506/iterative-solution-of-nonlinear-equations-in-several-variables">Ortega/Rheinboldt (1970)</a>.</p>
<p><a href="https://de.wikipedia.org/wiki/Otto_Hesse">Ludwig Otto Hesse</a> (1811–1874),
<a href="https://www.siam.org/publications/siam-news/articles/obituary-werner-c-rheinboldt/">Werner Carl Rheinbold</a> (1928–2024),
<a href="https://www.encyclopedia.com/arts/culture-magazines/ortega-james-m">James McDonough Ortega</a> (*1932).</p>
<p>Für $\phi_{yy}(\zeta)$ gilt entspechendes.</p>
<p>Natürlich ist $\phi_y=h\gamma f_y$ und $\phi_{yy}=h\gamma f_{yy}$, also
beide Ausdrücke sind von der Ordnung ${\cal O}(h)$,</p>
<div class=math>
$$
    \phi_y={\cal O}(h), \qquad \phi_{yy}={\cal O}(h).
$$
</div>
<p>Nach kurzer Rechnung erhält man durch konsequentes Einsetzen der beiden
Taylorentwicklungen $(T)$ in die Rechenvorschrift $(N)$ der
Newton-Raphson Iteration und durch Umformung unter
Benutzung von $(D)$ und $y^* = \phi(y^*)$ erhält man</p>
<div class=math>
$$
    \left\{I - \left[\phi_y(y^*) + \phi_{yy}(\zeta) \varepsilon^\nu\right]
        \right\}\varepsilon^{\nu+1}
    = \left({1\over2}\phi_{yy}(\xi) - \phi_{yy}(\zeta)\right)
        \varepsilon^\nu\varepsilon^\nu, \qquad \nu=0,1,\ldots
    \tag{*}
$$
</div>
<p>Die obige eingliedrige Rekurrenzgleichung $(*)$ ist nun die Basis
für den folgenden Induktionsbeweis.</p>
<p>Die Induktionsverankerung mit $\nu=0$: Für die nullte Iteration ist
$R(0)=(g+1)2^0-1=g$.
Dies stimmt mit der vorausgesetzten Ordnung des Anfangsfehlers $y^0-y^*=
{\cal O}(h^g)$ überein.</p>
<p>Der Induktionsschluß von $\nu$ auf $\nu+1$:
Es gelte nun $\varepsilon^\nu = {\cal O}(h^{R(\nu)})$ mit</p>
<div class=math>
$$
    R(\nu)=(g+1)2^\nu-1.
$$
</div>
<p>Die Matrix vor $\varepsilon^{\nu+1}$ in $(*)$ ist $I+{\cal O}(h)$,
wegen $\phi_y={\cal O}(h)$, $\phi_{yy}={\cal O}(h)$, $R(\nu) \ge 1$
und damit auch die Inverse dieser Matrix.</p>
<p>Die Invertierbarkeit lässt sich stets durch ein genügend kleines $h$
erzwingen.
Für die Inverse beachte man die Neumannsche Reihe.
Denkt man sich vor die rechte Seite von $(*)$ den Term
$\left[I+{\cal O}(h)\right]^{-1} = \left[I+{\cal O}(h)\right]$, so erkennt
man, daß maßgeblich nur $I$ ist.
Damit erhält man für $\varepsilon^{\nu+1}$ die Ordnung
$\varepsilon^{\nu+1}={\cal O}(h^s)$, mit</p>
<div class=math>
$$
    s=2R(\nu)+1=[(g+1)2^{\nu+1}-2]+1=(g+1)2^{\nu+1}-1=R(\nu+1),
$$
</div>
<p>wegen der Beziehung $(*)$.
Somit gilt auch $\varepsilon^{\nu+1}={\cal O}(h^{R(\nu+1)})$.</p>
<p><strong>Zu (2):</strong> Wiederum durch Einsetzen der Taylorentwicklungen $(T)$ in die
Iterationsvorschrift $(K)$ des Newton-Kantorovich Iterationsverfahrens und
durch Benutzen von $(D)$ und $y^* = \phi(y^*)$, erhält man schließlich eine
eingliedrige, implizite Rekurrenzgleichung für $\varepsilon^\nu$ zu</p>
<div class=math>
$$
    \left\{I - \left[\phi_y(y^*) + \phi_{yy}(\zeta)\varepsilon^0\right]
        \right\} \varepsilon^{\nu+1}
    = {1\over2}
        \underbrace{\phi_{yy}(\xi)\varepsilon^\nu\varepsilon^\nu}_A -
        \underbrace{\phi_{yy}(\zeta)\varepsilon^0\varepsilon^\nu}_B,
        \qquad \nu=0,1,\ldots \:  .
    \tag{**}
$$
</div>
<p>Diese Gleichung ist erneut die Grundlage des nachfolgenden Induktionsganges.</p>
<p>Induktionsverankerung mit $\nu=0$: $K(0)=g+0\cdot(g+1)=g$, was
mit der vorausgesetzten Ordnung des Startwertes von $y^0-y^*={\cal O}(h^g)$
übereinstimmt.</p>
<p>Induktionsschluß von $\nu$ auf $\nu+1$: Es gelte nun
$\varepsilon^\nu = {\cal O}(h^{K(\nu)})$ mit $K(\nu) = g + (g + 1)\nu$.
Die Matrix vor $\varepsilon^{\nu+1}$
bei $(**)$ hat die Form $I+{\cal O}(h)$, weil $\phi_y(y^*) = {\cal O}(h)$,
$\phi_{yy}(\zeta) = {\cal O}(h)$, $\varepsilon^0 = {\cal O}(h^g)$, $g \ge 1$
und somit auch die Inverse.</p>
<p>Entscheidend ist nun wiederum lediglich $I$.
Auf der rechten Seite der eingliedrigen Rekurrenzgleichung $(**)$ ist
der erste Summand $A$ von der Ordnung ${\cal O}(h^{2K(\nu)+1})$ und
der zweite Summand $B$ ist von der Ordnung ${\cal O}(h^{g+K(\nu)+1})$,
wegen $\varepsilon^0={\cal O}(h^g)$.
Nun sieht man aber schnell ein, daß $B$ asymptotisch betrachtet stets
dominiert, wegen</p>
<div class=math>
$$
    g + K(\nu) + 1  \le  2K(\nu) + 1, \qquad \forall \nu \in \mathbb{N}_0 ,
    %\hbox{für alle $\nu\in\mathbb{N}_0$.}
$$
</div>
<p>aufgrund von</p>
<div class=math>
$$
    g+K(\nu) = g+g+\nu\cdot(g+1) \le 2g+2\nu\cdot(g+1) = 2K(\nu),
    \qquad \forall \nu \in \mathbb{N}_0 .
$$
</div>
<p>Daher ist $\varepsilon^{\nu+1}$ von der gleichen Ordnung wie $B$,
somit $\varepsilon^{\nu+1}={\cal O}(h^s)$, wobei</p>
<div class=math>
$$
    s = g+K(\nu)+1 = g+1+\left[g+(g+1)\nu\right] = g+(g+1)(\nu+1) = K(\nu+1),
$$
</div>
<p>folglich $\varepsilon^{\nu+1}={\cal O}(h^{K(\nu+1)})$.</p>
<p>Die Bildung der Minima ist natürlich notwendig, da die Konsistenzordnung des
Korrektors selbstverständlich niemals überschritten werden kann; man gehe
mit der exakten Lösung der Differentialgleichung in die Korrektorformel hinein.</p>
<p>Es bleibt noch die Verbindung zwischen der Iterationsstartordnung $g$ und den
Konsistenzordnungen $\hat p$ und $p$ von Prädiktor und Korrektor aufzuzeigen.
Bedeutet $y$ die exakte Lösung der Differentialgleichung, so
hat man übersichtlich zusammengefasst die folgenden Beziehungen:</p>
<div class=math>
$$
\begin{array}{rccl}
    y^0 - y   &=& {\cal O}(h^{\hat p}), & \qquad \hbox{Prädiktorkonsistenzordnung},\cr
    y^0 - y^* &=& {\cal O}(h^g),        & \qquad \hbox{Startfehler der Iteration},\cr
    y   - y^* &=& {\cal O}(h^p),        & \qquad \hbox{Korrektorkonsistenz}.\cr
\end{array}
$$
</div>
<p>Nun ist $y^0 - y^* = {\cal O}(h^{\hat p})$, falls $\hat p\le p$ und damit
$g=\hat p$.
Dies wegen</p>
<div class=math>
$$
    y^0-y^*=(y^0-y)+(y-y^*)={\cal O}(h^{\hat p})+{\cal O}(h^p).
$$
</div>
<p>Damit folgt schließlich die volle Behauptung des Satzes.
    ☐</p>
<p><strong>5.</strong>
Der Startfehler-Satz von Liniger deutet darauf hin, daß asymptotisch
betrachtet mehr als eine Iteration der Genauigkeit wegen nicht notwendig
ist, bei entsprechend gewählter Genauigkeit des Prädiktors.
Wenn nun trotzdem mehr als einmal iteriert wird, dann eigentlich nur um</p>
<ol>
<li>Information über das Schalten zu erhalten,</li>
<li>Ungenauigkeiten in einer zu alten Iterationsmatrix zu
kompensieren und abzumildern,</li>
<li>Steifheit abzudämpfen, oder</li>
<li>die Schrittweite $h$ nicht ausreichend klein ist, sodaß die
Voraussetzungen für den Satz von Liniger nicht erfüllt sind.</li>
</ol>
<p>Man beachte, daß der Startfehler-Satz von Liniger kein spezielles Resultat
über implizite lineare Mehrschrittverfahren ist.
Der Satz lässt sich leicht verallgemeinern auf andere Verfahren.
Lediglich zur Illustriation wurde hier die Sprache der lineraren
Mehrschrittverfahren gewählt.
Der Satz gilt allgemein für Verfahren, die schließlich zu einer Keplerschen
Gleichung $\phi(y) = h\gamma f(y) + \psi$ münden.
Der Beweis und die Aussagen des Satzes übertragen sich beispielsweise, wenn
man die skalaren Koeffizienten $\alpha_i$ und $\beta_i$ ersetzt durch
Matrizen $A_i$ und $B_i$.
Da nun die Dimensionen von $\phi$ und $\psi$ größer werden können, verändern
sich die erwähnten Zwischenstellen $\xi$ und $\zeta$.</p>
<p>Der Satz macht eine Aussage über das Anschnellen der Ordnung bei linearen
und nichtlinearen Iterationsarten.
Auf die ausreichend oftmalige Differenzierbarkeit, hier zweimal stetig
differenzierbare Funktion $f$, sei nur nebenläufig hingewiesen.
Für die Aussage bei der Picard Iteration genügt selbstverständlich
einmalige stetige Differenzierbarkeit.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/10-26-weitere-zyklische-und-blockimplizite-lineare-mehrschritt-verfahren</link>
		<guid>https://eklausmeier.goip.de/blog/2025/10-26-weitere-zyklische-und-blockimplizite-lineare-mehrschritt-verfahren</guid>
		<title>Weitere zyklische und blockimplizite lineare Mehrschritt-Verfahren</title>
		<category>mathematics</category>
		<pubDate>Sun, 26 Oct 2025 12:45:00 +0100</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#DonelsonHansenFormeln">1. Die zyklischen Formeln von Donelson und Hansen</a></li>
<li><a href="#DonelsonHansenFehlerfaktoren">2. Die Fehlerfaktoren der Verfahren von Donelson und Hansen</a></li>
<li><a href="#MihelcicVerfahren">3. Mihelčić Verfahren der Ordnung 4</a></li>
<li><a href="#VerfahrenMit2terAbleitung">4. Steif-stabile Verfahren mit 2.ter Ableitung</a></li>
<li><a href="#Rubin">5. Blockimplizite Verfahren von Rubin</a></li>
<li><a href="#SloateBickart">6. Blockimplizite Verfahren von Sloate/Bickart</a></li>
<li><a href="#BickartPicel">7. Blockimplizite Verfahren von Bickart/Picel</a></li>
</ul>
<p>Zum Vergleich mit den zyklischen Formeln von J.M. Tendler, sollen auch noch
weitere Formeln angegeben werden, die entweder auf zyklischen Formeln,
Verfahren mit Ableitungen, oder blockimpliziten Formeln beruhen.
Sie haben die Eigenschaft, daß bei niedrigen Ordnungen ihre Koeffizienten
noch vergleichsweise klein sind und ganz sind.
Allerdings wurden diese hier vorgestellten Formeln noch nicht in einem
schlagkräftigen Programm eingebaut, wenn man einmal in gewissen Umfange von
den Formeln von W.H. Enright absieht.
Dies liegt z.T. darin, daß sich zu den günstigen Eigenschaften dieser
Formeln auch gewisse Nachteile hinzugesellt haben.</p>
<h2>1. Die zyklischen Formeln von Donelson und Hansen<a id=DonelsonHansenFormeln></a></h2>
<blockquote>
<p>Aufgrund der numerischen Untersuchungen läßt sich vermuten, daß
kein Donelson-Hansensches $(k=3, M=2)$-zyklisches Verfahren
existiert, das in der ganzen linken Halbebene stabil ist.</p>
<p>Matija Mihelčić (1977)</p>
</blockquote>
<p>Es seien nun noch die Formeln von Donelson/Hansen (1971)
angegeben</p>
<p>Donelson III, John und Hansen, Eldon:
&quot;<a href="https://doi.org/10.1137/0708018">Cyclic Composite Multistep Predictor-Corrector Methods</a>&quot;,
SIAM Journal on Numerical Analysis, Vol 8, 1971, pp.137—157</p>
<p>Da die Koeffizienten der Verfahren ganzzahlig und betragsmässig
vergleichsweise “klein” sind, eignen sie sich gut für Untersuchungs-
und Experimentierzwecke.
Die Verfahren sind <em>nicht</em> für steife Differentialgleichungen gedacht und
auch nicht geeignet.</p>
<p>Ohne Berücksichtigung eines Prädiktors haben die Verfahren einen sehr
kleinen Stabilitätsbereich,
siehe Mihelčić (1977) und Albrecht (1979).</p>
<ol>
<li>Matija Mihelčić (Mihelcic): “<a href="https://juser.fz-juelich.de/record/842879/files/J%C3%BCl_1438_Mihelcic.pdf">Fast <em>A</em>-stabile Donelson-Hansensche
zyklische Verfahren zur numerischen Integration von
'stiff'-Differentialgleichungssystemen</a>”,
Angewandte Informatik, 1977, Vol 19, Heft 7, pp.299—305, <a href="https://eklausmeier.goip.de/pdf/J%C3%BCl_1438_Mihelcic.pdf">Kopie</a></li>
<li>Albrecht, Peter: “<a href="https://juser.fz-juelich.de/record/842404/files/J%C3%BCl_1274_Albrecht.pdf?version=1">Numerische Behandlung gewöhnlicher Differentialgleichungen</a>”,
Jül-1274, Februar 1976, Berichte der Kernforschungsanlage Jülich, Institut für Festkörperforschung,
<a href="https://eklausmeier.goip.de/pdf/J%C3%BCl_1274_Albrecht.pdf">Kopie</a></li>
<li>Albrecht, Peter: “<a href="https://www.amazon.de/numerische-Behandlung-gew%C3%B6hnlicher-Differentialgleichungen-Ber%C3%BCcksichtigung/dp/3112728440?__mk_de_DE">Die numerische Behandlung gewöhnlicher
Differentialgleichungen — Eine Einführung unter besonderer
Berücksichtigung zyklischer Verfahren</a>”, Carl Hanser Verlag, München
Wien, 1979, <em>xi</em>+193 S.</li>
</ol>
<p>Biographisch:</p>
<ol>
<li><a href="https://www.legacy.com/us/obituaries/tennessean/name/john-donelson-obituary?id=23638989">John Donelson III</a></li>
<li><a href="https://en.wikipedia.org/wiki/Eldon_Hansen">Eldon Hansen</a></li>
<li><a href="https://hrcak.srce.hr/file/413565">Matija (Miško) Mihelčić</a> (1935—2011)</li>
<li><a href="https://www.genealogy.math.ndsu.nodak.edu/id.php?id=23871">Peter Albrecht</a></li>
</ol>
<p><strong>1.</strong> Die beiden folgenden Verfahren benötigen $k=3$ Startwerte, konvergieren
jedoch mit der Ordnung $p=2k-1$, bzw. der Ordnung $p=2k$.
Hier ist bei beiden Verfahren das <a href="https://eklausmeier.goip.de/blog/2025/01-07-praktische-gewinnung-zyklischer-steif-stabiler-verfahren#Aequilibrierung">Äquilibrierungsmaß</a> $\mu\approx p/2$.
Zum Zwecke der weiteren Referierung seien diese beiden Verfahren mit
DH1 und DH2 bezeichnet.</p>
<p>DH1 Ordnung 5.</p>
<div class=math>
$$
\begin{array}{r|rrr}
p=5 & 1 & 2 & 3\cr
\hline
-2 &   0 &     0 &   0\cr
-1 & -57 &  1083 &   0\cr
0  &  24 &  -456 &   0\cr
1  &  33 & -1347 & -57\cr
2  &   0 &   720 &  24\cr
3  &   0 &     0 &  33\cr
\hline
-2 &  -1 &     0 &   0\cr
-1 &  24 &  -350 &   0\cr
0  &  57 & -1347 &  -1\cr
1  &  10 &   456 &  24\cr
2  &   0 &   251 &  57\cr
3  &   0 &     0 &  10\cr
\end{array}
$$
</div>
<p>DH2 Ordnung 6.</p>
<div class=math>
$$
\begin{array}{r|rrr}
p=6 & 1 & 2 & 3\cr
\hline
-2 &  -11 &    0 &    0\cr
-1 &   27 &  188 &    0\cr
 0 &  -27 &  -36 &   25\cr
 1 &   11 & -252 &  -63\cr
 2 &    0 &  100 &   -9\cr
 3 &    0 &    0 &   47\cr
\hline
-2 &    3 &    0 &    0\cr
-1 &   27 &  -60 &    0\cr
 0 &   27 & -252 &   -9\cr
 1 &    3 &   36 &   -9\cr
 2 &    0 &   36 &   63\cr
 3 &    0 &    0 &   15\cr
\end{array}
$$
</div>
<p>Für das obige zyklische Verfahren DH1 der Ordnung $p=5$ erhält man das
charakteristische Polynom</p>
<div class=math>
$$
    \det Q(\mu,0) = \det\left(A_0+A_1\mu\right) = 784 080\mu^2(\mu-1).
$$
</div>
<p>DH2 hat das charakteristische Polynom mit den Nebenwurzeln</p>
<div class=math>
$$
    \det Q(\mu,0) = (\mu-1)(51700\mu^2 + 32680\mu), \qquad
    \mu_{2,3}\approx-0.16\pm i0.949,
$$
</div>
<p>welche auf der Peripherie des Einheitskreises liegen.
DH2 ist damit nur schwach stabil.</p>
<p><strong>2.</strong> Für die nächsten beiden Verfahren beträgt die Anzahl der
Startwerte $\kappa=3$,
die Verfahren konvergieren erneut jeweils mit der Ordnung $p=2\kappa-1$ und
der Ordnung $p=2\kappa$.
Dabei ist das linke Verfahren sogar lediglich zweistufig mit
$\mu\approx p/2$ und für das Verfahren 6.ter Ordnung ist $\mu\approx p+3$.
Die Verfahren seien im weiteren mit DH3 und DH4 bezeichnet.</p>
<p>DH3 Ordnung 5.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=5 & 1 & 2\cr
\hline
-2 &    0 &    0\cr
-1 &  -57 &   31\cr
 0 &   24 &  -12\cr
 1 &   33 &  -39\cr
 2 &    0 &   20\cr
\hline
-2 &   -1 &    0\cr
-1 &   24 &  -10\cr
 0 &   57 &  -39\cr
 1 &   10 &   12\cr
 2 &    0 &    7\cr
\end{array}
$$
</div>
<p>DH4 Ordnung 6.</p>
<div class=math>
$$
\begin{array}{r|rrr}
p=6 & 1 & 2 & 3\cr
\hline
-2 &   0 &     0 &    0\cr
-1 & -57 &   136 &    0\cr
0  &  24 &  -117 & -283\cr
1  &  33 &  -144 & -306\cr
2  &   0 &   125 &  531\cr
3  &   0 &     0 &   58\cr
\hline
-2 &  -1 &     0 &   0\cr
-1 &  24 &   -45 &   0\cr
0  &  57 &  -144 &  84\cr
1  &  10 &   117 & 531\cr
2  &   0 &    42 & 306\cr
3  &   0 &     0 &   9\cr
\end{array}
$$
</div>
<p>Das charakteristische Polynom für das zweistufige, zyklische Verfahren
DH3 der Ordnung $p=5$ ist</p>
<div class=math>
$$
    \det Q(\mu,0) = \det\left(A_1\mu + A_2\mu^2\right)
    = -660(\mu-1)(\mu+1/11)\mu^2,
$$
</div>
<p>während das dreistufige, zyklische Verfahren DH4 der Ordnung $p=6$, rechts
daneben, das charakteristische Polynom besitzt</p>
<div class=math>
$$
    \det Q(\mu,0) = \det\left(A_0+A_1\mu\right)
        = (\mu-1)\cdot(239 250\mu-10 830)\cdot\mu.
$$
</div>
<p><strong>3.</strong> Für die obigen 4 zyklischen Verfahren schlagen Donelson III und Hansen die
folgende Prädiktorformel vor:</p>
<div class=math>
$$
\eqalign{
      & -47y_{n-3}-192y_{n-2}+108y_{n-1}+128y_n+3y^0_{n+1}\cr
    = & 12z_{n-3}+144z_{n-2}+216z_{n-1}+48z_n\cr
}
$$
</div>
<p>und zwar für jede Stufe.
Das Äquilibrierungsmaß $\mu$ für den Prädiktor beträgt $\mu=72$.</p>
<p>Entgegen den Verfahren von <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">J.M. Tendler</a> liegt hier
ein anders Vorzeichenverhalten innerhalb der Stufen zugrunde.
Das nachfolgende Verfahren DH5 mit $\kappa=4$ Startwerten konvergiert mit
der Ordnung $p=2\kappa-1=7$.
Hierzu sind allerdings jetzt $4$ Stufen nötig.
Das Äquilibrierungsmaß $\mu$ beträgt hier ungefähr $\mu\approx p+2$.</p>
<p>Als Prädiktor für die beiden Verfahren DH5 und DH6 wird vorgeschlagen</p>
<div class=math>
$$
\eqalign{
      & -131y_{n-4}-1150y_{n-3}-600y_{n-2}+1400y_{n-1}+475y_n+6y^0_{n+1}\cr
    = & 30z_{n-4}+600z_{n-3}+1500z_{n-2}+1200z_{n-1}+150z_n,
}
$$
</div>
<p>welcher ein äußerst schlechtes Äquilibrierungsmaß von $\mu=250$ aufweist.</p>
<p><strong>4.</strong> Die beiden Verfahren DH5 und DH6 der Ordnung 7 sind wie untenstehend.</p>
<p>DH5 Ordnung 7.</p>
<div class=math>
$$
\begin{array}{r|rrrr}
p=7 & 1 & 2 & 3 & 4\cr
\hline
-3 &     0 &      0 &      0 &      0\cr
-2 & -1360 &  13409 &      0 &      0\cr
-1 & -1350 &  30384 &   3653 &      0\cr
 0 &  2160 & -55026 & -22752 &   4550\cr
 1 &   550 &   2224 & -45792 &  14160\cr
 2 &     0 &   9009 &  49888 & -14850\cr
 3 &     0 &      0 &  15003 &  -5360\cr
 4 &     0 &      0 &      0 &   1500\cr
\hline
-3 &    -9 &      0 &      0 &      0\cr
-2 &   456 &  -3585 &      0 &      0\cr
-1 &  2376 & -32904 &  -1182 &      0\cr
 0 &  1656 & -19008 &   1440 &  -1191\cr
 1 &   141 &  16008 &  49032 & -12456\cr
 2 &     0 &   2529 &  42144 & -13176\cr
 3 &     0 &      0 &   3906 &    744\cr
 4 &     0 &      0 &      0 &    459\cr
\end{array}
$$
</div>
<p>Das letzte zyklische Verfahren DH6 mit $\kappa=4$ Startwerten konvergiert
mit der Ordnung $p=2\kappa-1=7$, nicht mit der Konvergenzordnung 8.
Das Äquilibrierungsmaß ist hier $\mu\approx p+2=9$.</p>
<p>DH6 Ordnung 7.</p>
<div class=math>
$$
\begin{array}{r|rrrr}
p=7 & 1 & 2 & 3 & 4\cr
\hline
-3&&     0 &      0 &             0 &         0\cr
-2&& -1360 &   4603 &             0 &         0\cr
-1&& -1350 &   1008 &  -3 455 657 &         0\cr
 0&&  2160 & -28242 & -28 102 272 &   59 160\cr
 1&&   550 &  15728 &  -5 942 052 &  175 440\cr
 2&&     0 &   6903 &  31 623 488 & -201 690\cr
 3&&     0 &      0 &   5 876 493 &  -55 920\cr
 4&&     0 &      0 &             0 &   23 010\cr
\hline
-3&&    -9 &      0 &             0 &         0\cr
-2&&   456 &  -1293 &             0 &         0\cr
-1&&  2376 &  -8136 &      789 744 &         0\cr
 0&&  1656 &   9936 &  15 276 816 &   15 543\cr
 1&&   141 &  16968 &  40 314 888 & -159 048\cr
 2&&     0 &   1845 &  20 558 640 & -156 168\cr
 3&&     0 &      0 &   1 449 972 &   20 232\cr
 4&&     0 &      0 &             0 &    6 867\cr
\end{array}
$$
</div>
<p><strong>5.</strong> Für DH1 erhält man als Linkseigenvektor zu $\rho(1)=A_1+A_0$ und die
daraus sich ergebenden Werte</p>
<div class=math>
$$
    v^\top=\pmatrix{-2609\cr -91\cr 640\cr},\qquad
    w=\pmatrix{1\cr 1\cr 1\cr},\qquad
    C={v{\mskip 3mu}\gamma\over vA_1w}=-{509\over11 616}\approx-0.043 818 871.
$$
</div>
<p><strong>6.</strong> Für das Verfahren DH2, welches die Bedingung der
<a href="https://eklausmeier.goip.de/blog/2024/07-01-das-fehlerverhalten-zusammengesetzter-linearer-mehrschrittformeln/#annulliertedominanz">annullierten Dominanz</a>
erfüllt, ergibt sich</p>
<div class=math>
$$
    v^\top=\pmatrix{-12\cr -1\cr 4\cr},\qquad
    w=\pmatrix{1\cr 1\cr 1\cr},\qquad
    v{\mskip 3mu}\gamma=0,\qquad vA_1w=-80\ne0.
$$
</div>
<p><strong>7.</strong> Für das zweistufige Verfahren DH3 ergeben sich die Größen</p>
<div class=math>
$$
    v^\top=\pmatrix{-1\cr 3\cr},\qquad w=\pmatrix{1\cr 1\cr},\qquad
    C={v{\mskip 3mu}\gamma\over v\cdot(2A_2+A_1)\cdot w}={1\over135}=0.0\overline{074}.
$$
</div>
<p><strong>8.</strong> Für DH4, das zweite Verfahren, welches die Bedingung der annullierten
Dominanz erfüllt, berechnet man</p>
<div class=math>
$$
    v^\top=\pmatrix{42\cr -1\cr 5\cr},\qquad
    w=\pmatrix{1\cr 1\cr 1\cr},\qquad
    v{\mskip 3mu}\gamma=0,\qquad vA_1w=2820\ne0.
$$
</div>
<p><strong>9.</strong> Für das vierstufige, zyklische Verfahren DH5 der Konvergenzordnung 7 erhält
man nach kurzer Rechnung</p>
<div class=math>
$$
    v^\top = \pmatrix{
        -2 073 934/1 095 201\cr
        -1 511 965/18 618 417\cr
        4 675 885/16 549 704\cr
        1\cr},\quad
    w = \pmatrix{1\cr 1\cr 1\cr 1\cr},\quad
    C = {v{\mskip 3mu}\gamma\over vA_1w} = {2 863 497 872\over384 928 404 525}
      \approx 0.007 439 040.
$$
</div>
<p><strong>10.</strong> Schließlich für das letzte vierstufige, zyklische Verfahren DH6 der
Konvergenzordnung 7 berechnet man die Werte</p>
<div class=math>
$$
    v^\top = \pmatrix{
        -1 017 998 489 477\cr
        -218 843 111 075\cr
        462 575 385/2\cr
        30 644 021 405\cr},\quad
    w = \pmatrix{1\cr 1\cr 1\cr 1\cr},\quad
    C = {v{\mskip 3mu}\gamma\over vA_1w} = {94 574 078\over123 560 938 751 985}
      \approx0.765 404 334\cdot10^{-6}.
$$
</div>
<p>Versehentlich wurde dieses Verfahren bei
Donelson III, John und Hansen, Eldon,
&quot;<a href="https://doi.org/10.1137/0708018">Cyclic Composite Multistep Predictor-Corrector Methods</a>&quot;,
SIAM Journal on Numerical Analysis, Vol 8, 1971, pp.137—157
auch als Verfahren der Konvergenzordnung $p=8$ angegeben.
Allerdings erkennt man, daß die Henricische Fehlerkonstante sehr klein ist.</p>
<h2>2. Die Fehlerfaktoren der Verfahren von Donelson und Hansen<a id=DonelsonHansenFehlerfaktoren></a></h2>
<p>Für die oben angegebenen zyklischen Formeln von <a href="https://doi.org/10.1137/0708018">Donelson III und Hansen</a>
werden in unskalierter Form die Fehlerfaktoren aufgeführt.
Bei allen Verfahren haben immer alle Stufen die gleich hohe
Konsistenzordnung, außer bei dem Verfahren DH2, wo die erste Stufe eine
um eins höhere Konsistenzordnung besitzt.
In den nachstehenden Tabellen bezeichnet $p$ die Konvergenzordnung des
Gesamtzyklus und $q$ bezeichnet die Konsistenzordnung.
Es ist also $c_{q+1}\ne0$, aber $c_{q-i}=0$, für $i=0,\ldots,q$.
Somit</p>
<div class=math>
$$
    \alpha_ky(t_{n+k})+\alpha_{k-1}y(t_{n+k-1})+\cdots+\alpha_0y(t_n)=
    h\left[\beta_k\dot y(t_{n+k})+\cdots+\dot y(t_n)\right]
       +c_{q+1}h^{p+1}+{\cal O}(h^{q+2}).
$$
</div>
<p>Bei den beiden Verfahren DH2 und DH3 ist die Bedingung der annullierten
Dominanz erfüllt.
Erneut ist somit $c_{q+1}$ die erste nichtverschwindende
Komponente des Matrix-Vektor-Produktes aus Konsistenzmatrix $C_{q+2,k+\ell}$
und den Koeffizienten $(\alpha,\beta)^\top$ des Verfahrens
skaliert mit der entsprechenden Fakultät $(q!)$.</p>
<div class=math>
$$
\begin{array}{r|rrrrrr}
          & \hbox{DH1} & \hbox{DH2} & \hbox{DH3} & \hbox{DH4} & \hbox{DH5} & \hbox{DH6}\cr
          & p=5 & p=6 & p=6 & p=5 & p=7 & p=7\cr
          & q=5 & q=5 & q=5 & q=5 & q=7 & q=7\cr
\hline
c_{1,q+1} & \displaystyle{-{11\over60}} &  0^{1)}     &
 \displaystyle{-{11\over60}} & \displaystyle{-{11\over60}} & \displaystyle{-{15\over28}}    & \displaystyle{-{15\over28}}\cr
c_{2,q+1} & \displaystyle{-{601\over60}} & \displaystyle{-{8\over5}} &
 \displaystyle{-{29\over20}}  & \displaystyle{-{17\over60}} & \displaystyle{-{3057\over140}} & \displaystyle{-{1569\over140}}\cr
c_{3,q+1} & -{11\over60} & -{2\over5}  &
 {5\over4}     & *            & \displaystyle{-{636\over35}}   & \displaystyle{-{165 057\over70}}\cr
c_{4,q+1} & *            & *           &
 *             & *            & \displaystyle{-{165\over28}}   & \displaystyle{-{2241\over28}}\cr
\end{array}
$$
</div>
<p>wobei</p>
<div class=math>
$$
{}^{1)} \quad c_{16}=0, \hbox{ aber } c_{17}=-3/140
$$
</div>
<p>Es folgen nun die Fehlerkonstanten der 6 zyklischen Formeln von Donelson und
Hansen, wobei stufenweise mit
dem führenden Koeffizienten $\alpha_{ii}$ skaliert wurde.
Die Werte sind auf sechs Stellen gerundet.</p>
<div class=math>
$$
\begin{array}{r|rrrrrr}
          & \hbox{DH1} & \hbox{DH2} & \hbox{DH3} & \hbox{DH4} & \hbox{DH5} & \hbox{DH6}\cr
          & p=5 & p=6 & p=6 & p=5 & p=7 & p=7\cr
          & q=5 & q=5 & q=5 & q=5 & q=7 & q=7\cr
\hline
{c_{1,q+1}/\alpha_{11}} & -0.00\overline5 &  0^{1)}     &
 -0.00\overline5 & -0.00\overline5     & -0.974 026E-3 & -0.974 026E-3 \cr
{c_{2,q+1}/\alpha_{22}} & -0.013 912     & -0.016      &
 -0.011 6       & -0.014 1\overline4 & -2.423 767E-3 & -1.623 518E-3\cr
{c_{3,q+1}/\alpha_{33}} & -0.00\overline5 & -0.008 511 &
 0.021 552      & *                   & -1.211 186E-3 & -0.401 252E-6\cr
{c_{4,q+1}/\alpha_{44}} & *               & *           &
 *               & *                   & -3.928 571E-3 & -3.478 301E-3\cr
\end{array}
$$
</div>
<p>wobei</p>
<div class=math>
$$
^{1)}\quad c_{16}=0, \hbox{ aber } c_{17}=-3/140,
 \hbox{ also } c_{17}/\alpha_{11}\approx0.001 948
$$
</div>
<p>Die Fehlerkonstanten der zyklischen Verfahren, wobei stufenweise mit
$\sigma_i(1)$, für $i=1,\ldots,4$, skaliert wird, also stufenweise die
Fehlerkonstante von Henrici gebildet wird, lauten:</p>
<div class=math>
$$
\begin{array}{r|rrrrrr}
          & \hbox{DH1} & \hbox{DH2} & \hbox{DH3} & \hbox{DH4} & \hbox{DH5} & \hbox{DH6}\cr
          & p=5 & p=6 & p=6 & p=5 & p=7 & p=7\cr
          & q=5 & q=5 & q=5 & q=5 & q=7 & q=7\cr
\hline
{c_{1,q+1}/\sigma_1(1)} & -0.002 \overline{037} &  0^{1)}         &
 -0.002 \overline{037}  & -0.002 \overline{037} & -0.115 955E-3 & -0.115 955E-3 \cr
{c_{2,q+1}/\sigma_2(1)} & -0.010 118            &  0.00\overline6 &
 -0.048 \overline3      & -0.009 \overline4     & 0.590 793E-3  & -0.580 080E-3\cr
{c_{3,q+1}/\sigma_3(1)} & -0.002 \overline{037} & -0.00\overline6 &
 0.001 344              & *                      & -0.190 596E-3 & -30.0\overline{79}E-6\cr
{c_{4,q+1}/\sigma_4(1)} & *                      & *               &
 *                       & *                      & 0.230 010E-3        & 0.263 570E-3\cr
\end{array}
$$
</div>
<p>wobei</p>
<div class=math>
$$
{}^{1)} \quad c_{16}=0, \hbox{ aber } c_{17}=-3/140,
 \hbox{ also } c_{17}/\sigma_1(1)\approx0.357 143E-3
$$
</div>
<h2>3. Mihelčić Verfahren der Ordnung 4<a id=MihelcicVerfahren></a></h2>
<p>Schließlich sei auch noch das für steife Differentialgleichungen
geeignete zyklische Verfahren von
Mihelčić (1977) angegeben.
Im Gegensatz zu den Formeln von <a href="https://eklausmeier.goip.de/blog/2025/03-24-die-verwendeten-zyklischen-formeln-im-programm-tendler">Tendler</a>,
welche $p$ Startwerte benötigen zur Erreichung der Ordnung $p$,
genügen nun lediglich $p-1$, also hier 3 Startwerte.
Das Verfahren ist $A_\infty^{0.066}[21^\circ]$- und
$S_\infty^{0.066}[2.8]$-stabil, aber nicht $A_\infty^0[\alpha]$-
bzw. $S_\infty^0[\delta]$-stabil.
Das Äquilibrierungsmaß beträgt hier $\mu\approx p+2$.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=4 & 1 & 2\cr
\hline
-2 &   127 &         0\cr
-1 &   816 &  -42 598\cr
 0 & -1143 &   36 576\cr
 1 &   200 & -120 978\cr
 2 &     0 &  127 000\cr
\hline
-2 &     0 &         0\cr
-1 &  -653 &   21 015\cr
 0 &  -326 &   10 527\cr
 1 &   109 &   94 929\cr
 2 &     0 &   49 149\cr
\end{array}
$$
</div>
<p>Bei dem steif-stabilen zyklischen Verfahren von Mihelčić der
Konvergenzordnung $p=4$ lauten die Fehlerfaktoren</p>
<div class=math>
$$
c_{1,5}=-{49\over3}, \qquad  {c_{1,5}\over\alpha_{11}}=-0.08\overline{16}, \qquad {c_{1,5}\over\sigma_1(1)}\approx0.018 774,
$$
</div>
<div class=math>
$$
c_{2,5}=-{8767\over2}, \qquad {c_{2,5}\over\alpha_{22}}\approx-0.034 516, \qquad {c_{2,5}\over\sigma_2(1)}\approx-0.024 960.
$$
</div>
<p>Der Linkseigenvektor zu $\rho(1)$ und die sich hieraus
ableitenden Größen sind</p>
<div class=math>
$$
    v^\top=\pmatrix{161\cr 1\cr},\qquad w=\pmatrix{1\cr 1\cr},\qquad
    C={v{\mskip 3mu}\gamma\over v\cdot(2A_2+A_1)\cdot w}=-{42 079\over106 650}
     \approx-0.394 552 274.
$$
</div>
<p>Das charakteristische Polynom $\det Q(\mu,0)$ ist proportional zu</p>
<div class=math>
$$
    (\mu-1)\mu(100000\mu^2-7601\mu-21299),
$$
</div>
<p>das Verfahren also stark $D$-stabil, mit den Nebenwurzeln
$\mu_2\approx-0.425$ und $\mu_3\approx0.501$.
Es ist</p>
<div class=math>
$$
    \det Q(\mu,\infty) = (5357241\mu^2-241)\mu^2,
$$
</div>
<p>also w.o. angegeben $\mu\approx\pm0.066$ oder $\mu=0$.</p>
<h2>4. Steif-stabile Verfahren mit 2.ter Ableitung<a id=VerfahrenMit2terAbleitung></a></h2>
<p><strong>1.</strong> Ausgangspunkt seien Verfahrensvorschriften der speziellen Form</p>
<div class=math>
$$
    \alpha y_{n+1} = \alpha y_n + h \sum_{i=0}^k \beta_i \dot y_{n+1-i}
        + h^2\gamma_0\ddot y_{n+1},
$$
</div>
<p>also implizite Verfahren mit einem Vorkommen der zweiten Ableitung.
Die Koeffizienten $\beta,\ldots,\beta_k,\gamma_0$ seien nun so
bestimmt, daß das Verfahren die Konsistenzordnung $p=k+2$ hat.
<a href="https://link.springer.com/chapter/10.1007/978-1-4684-2100-2_8">Wayne Howard Enright (1974)</a> gibt hier die folgenden Werte an:</p>
<div class=math>
$$
\begin{array}{r|rrrrrrr}
k & 1 & 2 & 3 & 4 & 5 & 6 & 7\cr
\hline
\alpha   &  6 & 48 & 1080 & 5760 & 604800 & 1451520 & 190 512 000\cr
\gamma_0 & -1 & -6 & -190 & -540 & -51780 & -115500 & -14 260 260\cr
\hline
\beta_0  &  4 & 29 &  614 & 3133 & 317731 &  741063 & 94 933 242\cr
\beta_1  &  2 & 20 &  513 & 3008 & 340440 &  869688 & 120 440 355\cr
\beta_2  &    & -1 &  -54 & -492 & -76260 & -248814 & -42 097 545\cr
\beta_3  &    &    &    7 &  128 &  29840 &  130096 & 27 564 775\cr
\beta_4  &    &    &      &  -17 &  -7935 &  -51939 & -14 684 250\cr
\beta_5  &    &    &      &      &    984 &   12888 & 5 467 833\cr
\beta_6  &    &    &      &      &        &   -1462 & -1 240 855\cr
\beta_7  &    &    &      &      &        &         & 128 445\cr
\end{array}
$$
</div>
<p>Biographisch:
<a href="https://www.genealogy.math.ndsu.nodak.edu/id.php?id=67146">Wayne Howard Enright</a>,
<a href="https://www.researchgate.net/profile/Wh-Enright">ResearchGate</a>.</p>
<p><strong>2.</strong> Diese Formeln sind $A_\infty^r[\alpha]$- und $S_\infty^r[\delta]$-stabil,
dabei aber $r&gt;0$ und $\alpha&lt;90^\circ$ ist.
Die Implizitheit der Verfahren führt zu einem Gleichungssystem der Form</p>
<div class=math>
$$
    y = h\beta_0f(y) + h^2\gamma_0f_y(y)\cdot f(y) + \psi \in \mathbb{R}^n.
$$
</div>
<p>Lösung dieser Gleichung mit der Newton-Raphson Iteration ergäbe die
Iterationsmatrix $\widehat W$, die zudem noch von der Iterationsstufe
abhängig wäre, zu</p>
<div class=math>
$$
    \hat w_{ik} = \delta_{ik} - h\beta_0{\partial f_i\over\partial y_k}
        -h^2\gamma_0 \sum_{\nu=1}^n \left(
        {\partial^2f_i\over\partial y_\nu\partial y_k}f_\nu +
        {\partial f_i\over\partial y_\nu}{\partial f_\nu\over\partial y_k}\right).
$$
</div>
<p>Es wären also die $n^3$ zweiten Ableitungen
$\partial^2f_i/\partial y_\nu\partial y_k$ ($1\le i,k,\nu\le n$)
bereitzustellen.
Zur Vermeidung dieses Aufwandes setzt man diese $n^3$ Elemente sämtlich zu
Null in der Hoffnung, daß die Konvergenzeigenschaften nicht wesentlich
beeinträchtigt werden.
Man erhält die Iterationsmatrix bei der Newton-Kantorovich Iteration dann zu</p>
<div class=math>
$$
    W = I - h\beta_0f_y - h^2\gamma_0(f_y)^2,
$$
</div>
<p>Gefahr ist: Ändert sich $f_{yy}$ stark, so wird hiervon auch stark das
Verfahren beeinflußt.
Bei Differentialgleichungen, wo die $y$-Werte untereinander stark gekoppelt
sind, konnte man tatsächlich beobachten, daß Verfahren mit Ableitungen und
obiger Iterationsmatrix in ihrer Effizienz und Brauchbarkeit gemindert werden.</p>
<p><strong>3.</strong> Ein weiteres Problem ist, daß $J=f_y$ dünn besetzt sein kann, aber $J^2$ nicht.
Eine mögliche Abhilfe ist, wenn man $W$ aufspaltet in</p>
<div class=math>
$$
    -\gamma_0(hJ-rI)(hJ-\overline rI), \qquad r\in\mathbb{C}
$$
</div>
<p>und dann komplexe Arithmetik anwendet.
Wählt man allerdings $\gamma_0=-(\beta_0/2)^2$, so wird $r$ reell, also</p>
<div class=math>
$$
    W = I - h\beta_0J - (h\beta_0/2)^2J^2 = \left(I-h\beta_0J/2\right)^2.
$$
</div>
<p>Dies führt zu neuen Formeln, welche noch die Konsistenzordnung $p=k+1$ haben
und ebenfalls $A_\infty^r[\alpha]$- und $S_\infty^r[\delta]$-stabil sind.
Diese werden hier dargestellt in der Form</p>
<div class=math>
$$
    \alpha y_{n+1} = \alpha y_n + h\sum_{i=0}^k (\lambda_i+z\lambda_i^*)\dot y_{n+1-i}
        - \left(\lambda_0+z\lambda_0^*\over2\right)^2h^2\ddot y_{n+1}
$$
</div>
<p>und lauten</p>
<div class=math>
$$
\begin{array}{r|rrrrrr}
k & 1 & 2 & 3 & 4 & 5 & 6\cr
\hline
\alpha      &  1 &  9 &  2904 &  45000 &  27 027 360 & 62 233 920\cr
z   & \surd2 & \surd6 & \surd5 & \surd1419 & \surd5118 & \surd117573\cr
\hline
\lambda_0   &  2 & 12 &  3168 &  43200 &  23 673 600 & 50 803 200\cr
\lambda_0^* & -1 & -3 &   792 &    600 &      164 400 & 70 560\cr
\lambda_1   & -1 &  2 &  -257 &   2114 &     -785 937 & 1 231 883\cr
\lambda_1^* &  1 & -1 &   144 &     72 &      -14 400 & 4 800\cr
\lambda_2   &    & -5 &  1096 & -19983 &   4 832 338 & -8 768 304\cr
\lambda_2^* &    &  4 &  -648 &   -384 &       90 000 & -34 560\cr
\lambda_3   &    &    & -1103 &  23118 & -12 498 342 & 26 900 856\cr
\lambda_3^* &    &    &  1296 &    864 &     -240 000 & 108 000\cr
\lambda_4   &    &    &       & -12449 &  17 339 838 & -46 204 784\cr
\lambda_4^* &    &    &       &  -1152 &      360 000 & -192 000\cr
\lambda_5   &    &    &       &        &  -5 534 137 & 47 587 581\cr
\lambda_5^* &    &    &       &        &     -360 000 & 216 000\cr
\lambda_6   &    &    &       &        &               & -9 316 512\cr
\lambda_6^* &    &    &       &        &               & 172 800\cr
\end{array}
$$
</div>
<h2>5. Blockimplizite Verfahren von Rubin<a id=Rubin></a></h2>
<p><a href="https://eklausmeier.goip.de/blog/2025/04-03-a-stability-and-composite-multistep-methods">William Benjamin Rubin (1973)</a> stellte die folgenden
6 blockimpliziten 2-Schrittverfahren vor.
<a href="https://eklausmeier.goip.de/pdf/RubinDiss1973.pdf">Kopie: RubinDiss1973.pdf</a>.
<del>Das Verfahren vierter Ordnung ist dabei von Harry M. Sloate zuerst angegeben worden.</del></p>
<p>Die beiden Verfahren R1 und R2 sind $A$-stabil mit Linkseigenvektoren $(7,3)$, $(-37,1863,0)$ und Henricischen
Fehlerkonstanten von $-1/90$, $-37/5985$ sind wie untenstehend.</p>
<p>R1. Dieses Verfahren ist <em>nicht</em> <em>D</em>-stabil und damit nicht <em>A</em>-stabil.
Siehe <a href="https://eklausmeier.goip.de/blog/2026/02-01-rubin-4-th-order-method-is-neither-a-stable-nor-d-stable">Rubin's 4-th Order Method is Neither A-stable Nor D-stable</a>.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=4 && 1 & 2\cr%R4A
\hline
-1 && 0 & 56\cr
 0 && 24 & -72\cr
 1 && -24 & 0\cr
 2 && 0 & 16\cr
\hline
-1 && 1 & -21\cr
 0 && -13 & -39\cr
 1 && -13 & 33\cr
 2 && 1 & 3\cr
\hline
30\alpha_{ii}c_{5i} && -11 & 39\cr
\end{array}
$$
</div>
<p>R2. Dieses Verfahren ist nicht <em>D</em>-stabil.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=5 && 1 & 2 & 3\cr%R5A
\hline
-1 &&   53280 & 2960 & -3060\cr
 0 && -149040 & -8280 & 400\cr
 1 && 95760 & 0 & 0\cr
 2 && 0 & 5320 & 0\cr
 3 && 0 & 0 & 2660\cr
\hline
-1 && -21101 & -1091 & 967\cr
 0 && -1786 & -646 & 4142\cr
 1 && 80184 & 7824 & 1272\cr
 2 && -17686 & 1574 & 3842\cr
 3 && 2869 & 19 & 817\cr
\hline
2\alpha_{ii}c_{6i} && -3461 & -111 & 15\cr
\end{array}
$$
</div>
<p>R3. Dieses Verfahren ist nicht <em>D</em>-stabil.
Es hat Linkseigenvektor $(0,0,0,21,-8)$ und $C_7^H=2035/24192$.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=7 && 1 & 2 & 3 & 4 & 5\cr%R7A
\hline
-1 && 60 480 & 0 & -83 160 & -3 592 512 & 31 752 000\cr
 0 && -181 440 & -3 780 & -280 000 & -12 096 000 & -63 129 024\cr
 1 && 120 960 & 0 & 0 & 0 & 0\cr
 2 && 0 & 3 780 & 0 & 0 & 0\cr
 3 && 0 & 0 & 363 160 & 0 & 0\cr
 4 && 0 & 0 & 0 & 15 688 512 & 0\cr
 5 && 0 & 0 & 0 & 0 & 31 377 024\cr
\hline
-1 && -20 813 & -37 & 21 543 & 1 000 955 & -10 734 025\cr
 0 && -14 856 & 1 398 & 233 496 & 9 545 400 & -19 553 640\cr
 1 && 140 439 & 4 863 & 362 667 & 17 560 575 & 54 547 275\cr
 2 && -70 016 & 1 328 & 404 352 & 13 251 200 & 21 814 400\cr
 3 && 34 809 & 33 & 160 437 & 19 119 825 & 27 147 525\cr
 4 && -10 488 & -30 & -10 776 & 6 052 680 & 41 821 800\cr
 5 && 1 405 & 5 & 921 & -184 075 & 10 089 785\cr
\hline
2\alpha_{ii}c_{8i} && -2077 & -10 & -217 & 81 675 & -1 435 225\cr
\end{array}
$$
</div>
<p>R4. Nicht <em>D</em>-stabil.
Es hat Linkseigenvektoren $(0,0,649,-155)$, $(0,0,9,-5)$ und
$C_6^H=-8/945$, $C_7^H=?$ sind die beiden Verfahren R4 und R5.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=6 && 1 & 2 & 3 & 4\cr%R6A
\hline
-1 && 720 & -67680 & -4230 & 186912\cr
 0 && -7200 & -714240 & -44640 & -304200\cr
 1 && 6480 & 0 & 0 & 0\cr
 2 && 0 & 781920 & 0 & 0\cr
 3 && 0 & 0 & 48870 & 0\cr
 4 && 0 & 0 & 0 & 117288\cr
\hline
-1 && -359 & 13637 & 479 & -61655\cr
 0 && 2153 & 362461 & 25267 & -148735\cr
 1 && 4998 & 952926 & 50802 & 270390\cr
 2 && -1402 & 318046 & 54562 & -10\cr
 3 && 433 & -16819 & 20567 & 189265\cr
 4 && -63 & 1269 & -837 & 32985\cr
\hline
42\alpha_{ii}c_{7i} && 1651 & 2879 & 9377 & 70315\cr
\end{array}
$$
</div>
<p>R5. Doppelwurzel der 1.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=7 && 1 & 2 & 3 & 4\cr%R7B
\hline
-1 && -24390 & -800 & -1755 & 4608\cr
 0 && -53280 & -7830 & -2560 & -12375\cr
 1 && 77670 & 0 & 0 & 0\cr
 2 && 0 & 8630 & 0 & 0\cr
 3 && 0 & 0 & 4315 & 0\cr
 4 && 0 & 0 & 0 & 7767\cr
\hline
-1 && 6589 & 168 & 498 & -1520\cr
 0 && 58528 & 4053 & 3600 & -2150\cr
 1 && 41608 & 10488 & 3720 & 13600\cr
 2 && -5752 & 3528 & 5280 & 2600\cr
 3 && 1223 & -192 & 1650 & 11600\cr
 4 && -136 & 15 & -48 & 2330\cr
\hline
84\alpha_{ii}c_{8i} && 4357 & -195 & 624 & -4400\cr
\end{array}
$$
</div>
<p>R6. Fast $A$-stabil mit Linkseigenvektor $(0,0,-2510782677,737536625)$ und
$C_6^H=-8/945$.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=6 && 1 & 2 & 3 & 4\cr%R6B
\hline
-1 && -3 529 798 560 & -17 279 332 000 & -22 318 068 240 & -80 345 045 664\cr
 0 && 3 964 033 440 & 18 389 043 360 & 23 601 172 000 & 84 964 219 200\cr
 1 && -434 234 880 & 0 & 0 & 0\cr
 2 && 0 & -1 109 711 360 & 0 & 0\cr
 3 && 0 & 0 & -1 283 103 760 & 0\cr
 4 && 0 & 0 & 0 & -4 619 173 536\cr
\hline
-1 && 1 172 485 179 & 5 712 109 779 & 7 385 920 983 & 26 502 706 035\cr
 0 && 3 305 843 699 & 16 704 113 739 & 21 563 247 183 & 78 182 632 235\cr
 1 && -2 264 282 846 & -10 981 264 206 & -13 763 304 822 & -51 094 037 390\cr
 2 && 1 259 302 434 & 5 364 552 114 & 6 074 978 058 & 24 429 713 010\cr
 3 && -447 285 581 & -2 063 589 621 & -3 234 606 417 & -16 222 055 765\cr
 4 && 69 500 795 & 323 987 475 & 442 521 975 & 69 393 395\cr
\hline
42\alpha_{ii}c_{7i} && -2 197 148 & -10 417 250 295 & -13 688 098 827 & -46 508 859 415\cr
\end{array}
$$
</div>
<h2>6. Blockimplizite Verfahren von Sloate/Bickart<a id=SloateBickart></a></h2>
<p>Das erste der beiden nachstehenden zusammengesetzten linearen Mehrschrittverfahren
von <a href="https://dl.acm.org/doi/pdf/10.1145/321738.321740">Sloate/Bickart (1973)</a>
ist $A$-stabil, allerdings <em>nicht</em> $A_\infty^0$-stabil.
Das erste Verfahren BS1 erfüllt die Bedingung der annullierten Dominanz.</p>
<p><a href="https://www.legacy.com/us/obituaries/coloradocommunitymedia/name/theodore-bickart-obituary?id=53536695">Theodore A. Bickart</a>.</p>
<p>BS1.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=4 && 1 & 2\cr
\hline
0 && -3 & 2\cr
1 &&  0 & -4\cr
2 &&  3 & 2\cr
\hline
0 &&  1 & -1\cr
1 &&  4 & 0\cr
2 &&  1 & 1\cr
\hline
6\alpha_{ii}c_{4i} && 0 & -1\cr
\end{array}
$$
</div>
<p>BS2. Nicht <em>D</em>-stabil, damit nicht <em>A</em>-stabil.
Siehe Table III in <a href="https://dl.acm.org/doi/pdf/10.1145/321738.321740">Sloate/Bickart (1973)</a>.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=4 && 1 & 2\cr
\hline
-1 && 112 & -1512\cr
 0 && -72 & -1272\cr
 1 && -72 &  3216\cr
 2 &&  32 &  -432\cr
\hline
-1 &&  -39 & 433\cr
 0 && -117 & 2795\cr
 1 &&   27 &  851\cr
 2 &&    9 & -215\cr
\hline
30\alpha_{ii}c_{5i} && 45 & 421\cr
\end{array}
$$
</div>
<p>Die Linkseigenvektoren sind $(1,0)$, $(213,-5)$.</p>
<p>Das untere Verfahren mit der Henricischen Fehlerkonstante $-1/90$ erfüllt
dabei die zwei Bedingungen:</p>
<p><strong>(1)</strong> Die Nullstellen
von $\det(B_0+B_1\mu)=0$ haben gleichen Betrag (Null war bei Wahrung der
$A$-Stabilität nicht zu erreichen).
Dies erfüllt man durch die Forderung</p>
<div class=math>
$$
    \beta_{22}\beta_{11} - \beta_{20}\beta_{12} = 0,
$$
</div>
<p>wobei</p>
<div class=math>
$$
    B_0 = \pmatrix{\beta_{1,-1}&\beta_{10}\cr \beta_{2,-1}&\beta_{20}\cr}, \qquad
    B_1 = \pmatrix{\beta_{11}&\beta_{12}\cr \beta_{21}&\beta_{22}\cr}.
$$
</div>
<p><strong>(2)</strong> Die Quadratsumme der $\alpha$-Werte der ersten Stufe
$\alpha_{12}^2+\alpha_{11}^2+\alpha_{10}^2+\alpha_{1,-1}^2$ wurde in
Abhängigkeit von $\alpha_{11}$, und entsprechend wurde die Quadratsumme der
$\alpha$-Werte der zweiten Stufe in Abhängigkeit von $\alpha_{22}$ minimiert.
Dies könnte man als quasi-Gaußsches Äquilibrierungsmaß bezeichnen.</p>
<h2>7. Blockimplizite Verfahren von Bickart/Picel<a id=BickartPicel></a></h2>
<p>Die folgenden 9 blockimpliziten linearen Verfahren von
<a href="https://doi.org/10.1007/BF01951938">Bickart/Picel (1973)</a> sind $A_\infty^0[\alpha]$-stabil.
Es ist immer $p=\ell$.</p>
<p>BP2.</p>
<div class=math>
$$
\begin{array}{r|rr}
p=2 & 1 & 2\cr%BP2
\hline
0 & -1 & 1\cr
1 &  0 & -4\cr
2 &  1 & 3\cr
\hline
0 &  0 & 0\cr
1 &  2 & 0\cr
2 &  0 & 2\cr
\hline
3\alpha_{ii}c_{3i} & 1 & -2\cr
\end{array}
$$
</div>
<p>BP3.</p>
<div class=math>
$$
\begin{array}{r|rrr}
p=3 & 1 & 2 & 3\cr%BP3
\hline
0 & -2 &  1 & -2\cr
1 & -3 & -6 & 9\cr
2 &  6 &  3 & -18\cr
3 & -1 &  2 & 11\cr
\hline
0 &  0 &  0 & 0\cr
1 &  6 &  0 & 0\cr
2 &  0 &  6 & 0\cr
3 &  0 &  0 & 6\cr
\hline
2\alpha_{ii}c_{4i} & -1 & 1 & -3\cr
\end{array}
$$
</div>
<p>BP4.</p>
<div class=math>
$$
\begin{array}{r|rrr}
p=4 & 1 & 2 & 3 & 4\cr%BP4
\hline
0 & -6 & 2 & -2 & 6\cr
1 & -20 & -16 & 12 & -32\cr
2 &  36 & 0 & -36 & 72\cr
3 & -12 & 16 & 20 & -96\cr
4 &   2 & -2 & 6 & 50\cr
\hline
0 & 0 & 0 & 0 & 0\cr
1 & 24 & 0 & 0 & 0\cr
2 & 0 & 24 & 0 & 0\cr
3 & 0 & 0 & 24 & 0\cr
4 & 0 & 0 & 0 & 24\cr
\hline
5\alpha_{ii}c_{5i} & 6 & -4 & 6 & -24\cr
\end{array}
$$
</div>
<p>Die Linkseigenvektoren sind $v_2=(1,0)$, $v_3=(3,0,1)$, $v_4=(2,-1,2,0)$.
Die Henricischen Fehlerkonstanten sind $C_2^H=1/3$, $C_3^H=-3/8$,
$C_4^H=14/45$.</p>
<p>BP5.</p>
<div class=math>
$$
\begin{array}{r|rrrrr}
p=5 & 1 & 2 & 3 & 4 & 5\cr%BP5
\hline
0 & -24 & 6 & -4 & 6 & -24\cr
1 & -130 & -60 & 30 & -40 & 150\cr
2 & 240 & -40 & -120 & 120 & -400\cr
3 & -120 & 120 & 40 & -240 & 600\cr
4 & 40 & -30 & 60 & 130 & -600\cr
5 & -6 & 4 & -6 & 24 & 274\cr
\hline
0 & 0 & 0 & 0 & 0 & 0\cr
1 & 120 & 0 & 0 & 0 & 0\cr
2 & 0 & 120 & 0 & 0 & 0\cr
3 & 0 & 0 & 120 & 0 & 0\cr
4 & 0 & 0 & 0 & 120 & 0\cr
5 & 0 & 0 & 0 & 0 & 120\cr
\hline
\alpha_{ii}c_{6i} & -4 & 2 & -2 & 4 & -20\cr
\end{array}
$$
</div>
<p>BP6.</p>
<div class=math>
$$
\begin{array}{r|rrrrrr}
p=6 & 1 & 2 & 3 & 4 & 5 & 6\cr%BP6
\hline
0 & -120 & 24 & -12 & 12 & -24 & 120\cr
1 & -924 & -288 & 108 & -96 & 180 & -864\cr
2 & 1800 & -420 & -540 & 360 & -600 & 2700\cr
3 & -1200 & 960 & 0 & -960 & 1200 & -4800\cr
4 & 600 & -360 & 540 & 420 & -1800 & 5400\cr
5 & -180 & 96 & -108 & 288 & 924 & -4320\cr
6 & 24 & -12 & 12 & -24 & 120 & 1764\cr
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0\cr
1 & 720 & 0 & 0 & 0 & 0 & 0\cr
2 & 0 & 720 & 0 & 0 & 0 & 0\cr
3 & 0 & 0 & 720 & 0 & 0 & 0\cr
4 & 0 & 0 & 0 & 720 & 0 & 0\cr
5 & 0 & 0 & 0 & 0 & 720 & 0\cr
6 & 0 & 0 & 0 & 0 & 0 & 720\cr
\hline
7\alpha_{ii}c_{7i} & 120 & -48 & 36 & -48 & 120 & -720\cr
\end{array}
$$
</div>
<p>Die Linkseigenvektoren sind $v_5=(17,-14,24,-2,19/5)$,
$v_6=(11,-14,26,-14,11,0)$.
Die Henricischen Fehlerkonstanten sind $C_5^H=-95/288$, $C_6^H=41/140$.</p>
<p>BP7.</p>
<div class=math>
$$
\begin{array}{r|rrrrrrr}
p=7 & 1 & 2 & 3 & 4 & 5 & 6 & 7\cr%BP7
\hline
0 & -720 & 120 & -48 & 36 & -48 & 120 & -720\cr
1 & -7308 & -1680 & 504 & -336 & 420 & -1008 & 5880\cr
2 & 15120 & -3948 & -3024 & 1512 & -1680 & 3780 & -21168\cr
3 & -12600 & 8400 & -1260 & -5040 & 4200 & -8400 & 44100\cr
4 & 8400 & -4200 & 5040 & 1260 & -8400 & 12600 & -58800\cr
5 & -3780 & 1680 & -1512 & 3024 & 3948 & -15120 & 52920\cr
6 & 1008 & -420 & 336 & -504 & 1680 & 7308 & -35280\cr
7 & -120 & 48 & -36 & 48 & -120 & 720 & 13068\cr
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
1 & 5040 & 0 & 0 & 0 & 0 & 0 & 0\cr
2 & 0 & 5040 & 0 & 0 & 0 & 0 & 0\cr
3 & 0 & 0 & 5040 & 0 & 0 & 0 & 0\cr
4 & 0 & 0 & 0 & 5040 & 0 & 0 & 0\cr
5 & 0 & 0 & 0 & 0 & 5040 & 0 & 0\cr
6 & 0 & 0 & 0 & 0 & 0 & 5040 & 0\cr
7 & 0 & 0 & 0 & 0 & 0 & 0 & 5040\cr
\hline
\alpha_{ii}c_{8i} & -90 & 30 & -18 & 18 & -30 & 90 & -630\cr
\end{array}
$$
</div>
<p>Der Linkseigenvektor ist $v_7=(631,-1032,2091,-1664,1221,-120,751/7)$.
Die Henricische Fehlerkonstante ist $C_7^H=-5257/17280$.</p>
<p>BP8.</p>
<div class=math>
$$
\begin{array}{r|rrrrrrrr}
p=8 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8\cr%BP8
\hline
0 & -5040 & 720 & -240 & 144 & -144 & 240 & -720 & 5040\cr
1 & -64224 & -11520 & 2880 & -1536 & 1440 & -2304 & 6720 & -46080\cr
2 & 141120 & -38304 & -20160 & 8064 & -6720 & 10080 & -28224 & 188160\cr
3 & -141120 & 80640 & -18144 & -32256 & 20160 & -26880 & 70560 & -451584\cr
4 & 117600 & -50400 & 50400 & 0 & -50400 & 50400 & -117600 & 705600\cr
5 & -70560 & 26880 & -20160 & 32256 & 18144 & -80640 & 141120 & -752640\cr
6 & 28224 & -10080 & 6720 & -8064 & 20160 & 38304 & -141120 & 564480\cr
7 & -6720 & 2304 & -1440 & 1536 & -2880 & 11520 & 64224 & -322560\cr
8 & 720 & -240 & 144 & -144 & 240 & -720 & 5040 & 109584\cr
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
1 & 40320 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
2 & 0 & 40320 & 0 & 0 & 0 & 0 & 0 & 0\cr
3 & 0 & 0 & 40320 & 0 & 0 & 0 & 0 & 0\cr
4 & 0 & 0 & 0 & 40320 & 0 & 0 & 0 & 0\cr
5 & 0 & 0 & 0 & 0 & 40320 & 0 & 0 & 0\cr
6 & 0 & 0 & 0 & 0 & 0 & 40320 & 0 & 0\cr
7 & 0 & 0 & 0 & 0 & 0 & 0 & 40320 & 0\cr
8 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 40320\cr
\hline
\alpha_{ii}c_{9i} & 560 & -160 & 80 & -64 & 80 & -160 & 560 & -4480\cr
\end{array}
$$
</div>
<p>Es ist $v_8=(460,-954,2196,-2459,2196,-954,460,0)$ und $C_8^H=3956/14175$.</p>
<p>BP9.</p>
<div class=math>
$$
\begin{array}{r|rrrrrrrrr}
p=9 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9\cr%BP9
\hline
0 & -40320 & 5040 & -1440 & 720 & -576 & 720 & -1440 & 5040 & -40320\cr
1 & -623376 & -90720 & 19440 & -8640 & 6480 & -7776 & 15120 & -51840 & 408240\cr
2 & 1451520 & -396576 & -155520 & 51840 & -34560 & 38880 & -72576 & 241920 & -1866240\cr
3 & -1693440 & 846720 & -223776 & -241920 & 120960 & -120960 & 211680 & -677376 & 5080320\cr
4 & 1693440 & -635040 & 544320 & -72576 & -362880 & 272160 & -423360 & 1270080 & -9144576\cr
5 & -1270080 & 423360 & -272160 & 362880 & 72576 & -544320 & 635040 & -1693440 & 11430720\cr
6 & 677376 & -211680 & 120960 & -120960 & 241920 & 223776 & -846720 & 1693440 & -10160640\cr
7 & -241920 & 72576 & -38880 & 34560 & -51840 & 155520 & 396576 & -1451520 & 6531840\cr
8 & 51840 & -15120 & 7776 & -6480 & 8640 & -19440 & 90720 & 623376 & -3265920\cr
9 & -5040 & 1440 & -720 & 576 & -720 & 1440 & -5040 & 40320 & 1026576\cr
\hline
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
1 & 362880 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
2 & 0 & 362880 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
3 & 0 & 0 & 362880 & 0 & 0 & 0 & 0 & 0 & 0\cr
4 & 0 & 0 & 0 & 362880 & 0 & 0 & 0 & 0 & 0\cr
5 & 0 & 0 & 0 & 0 & 362880 & 0 & 0 & 0 & 0\cr
6 & 0 & 0 & 0 & 0 & 0 & 362880 & 0 & 0 & 0\cr
7 & 0 & 0 & 0 & 0 & 0 & 0 & 362880 & 0 & 0\cr
8 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 362880 & 0\cr
9 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 362880\cr
\hline
\alpha_{ii}c_{10i} & -4032 & 1008 & -432 & 288 & -288 & 432 & -1008 & 4032 & -36288\cr
\end{array}
$$
</div>
<p>Es ist $v_9=(20727,-50886,129666,-177102,182880,-110322,51966,-4986,2857)$
und die Henricische Fehlerkonstante ist $C_9^H=-25713/89600$.</p>
<p>BP10.</p>
<div class=math>
$$
\begin{array}{r|rrrrrrrrrr}
p=10 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\cr%BP10
\hline
 0 & -362880 & 40320 & -10080 & 4320 & -2880 & 2880 & -4320 & 10080 & -40320 & 362880\cr
 1 & -6636960 & -806400 & 151200 & -57600 & 36000 & -34560 & 50400 & -115200 & 453600 & -4032000\cr
 2 & 16329600 & -4419360 & -1360800 & 388800 & -216000 & 194400 & -272160 & 604800 & -2332800 & 20412000\cr
 3 & -21772800 & 9676800 & -2756160 & -2073600 & 864000 & -691200 & 907200 & -1935360 & 7257600 & -62208000\cr
 4 & 25401600 & -8467200 & 6350400 & -1330560 & -3024000 & 1814400 & -2116800 & 4233600 & -15240960 & 127008000\cr
 5 & -22861440 & 6773760 & -3810240 & 4354560 & 0 & -4354560 & 3810240 & -6773760 & 22861440 & -182891520\cr
 6 & 15240960 & -4233600 & 2116800 & -1814400 & 3024000 & 1330560 & -6350400 & 8467200 & -25401600 & 190512000\cr
 7 & -7257600 & 1935360 & -907200 & 691200 & -864000 & 2073600 & 2756160 & -9676800 & 21772800 & -145152000\cr
 8 & 2332800 & -604800 & 272160 & -194400 & 216000 & -388800 & 1360800 & 4419360 & -16329600 & 81648000\cr
 9 & -453600 & 115200 & -50400 & 34560 & -36000 & 57600 & -151200 & 806400 & 6636960 & -36288000\cr
10 & 40320 & -10080 & 4320 & -2880 & 2880 & -4320 & 10080 & -40320 & 362880 & 10628640\cr
\hline
 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
 1 & 3628800 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
 2 & 0 & 3628800 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
 3 & 0 & 0 & 3628800 & 0 & 0 & 0 & 0 & 0 & 0 & 0\cr
 4 & 0 & 0 & 0 & 3628800 & 0 & 0 & 0 & 0 & 0 & 0\cr
 5 & 0 & 0 & 0 & 0 & 3628800 & 0 & 0 & 0 & 0 & 0\cr
 6 & 0 & 0 & 0 & 0 & 0 & 3628800 & 0 & 0 & 0 & 0\cr
 7 & 0 & 0 & 0 & 0 & 0 & 0 & 3628800 & 0 & 0 & 0\cr
 8 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3628800 & 0 & 0\cr
 9 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3628800 & 0\cr
10 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3628800\cr
\hline
11\alpha_{ii}c_{11i} & 362880 & -80640 & 30240 & -17280 & 14400 & -17280 & 30240 & -80640 & 362880 & -3628800\cr
\end{array}
$$
</div>
<p>Es ist $v_{10} = (809,-2338,6668,-11014,67822/5,-11014,6668,-2338,809,0)$
und die Henricische Fehlerkonstante ist $C_{10}^H=80335/299376$.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/10-06-readings-in-quantum-computing</link>
		<guid>https://eklausmeier.goip.de/blog/2025/10-06-readings-in-quantum-computing</guid>
		<title>Readings in Quantum Computing</title>
		<category>mathematics</category>
		<pubDate>Mon, 06 Oct 2025 21:00:00 +0200</pubDate>
		<description><![CDATA[
<p>Below is a list of good readings regarding quantum computing.</p>
<h2>1. Introductory</h2>
<ol>
<li><a href="https://arxiv.org/pdf/1907.09415">Quantum Computing: Lecture Notes, by Ronald de Wolf</a></li>
<li><a href="https://simonapers.github.io/sorbonne/sorbonne-primer.pdf">Advanced Quantum Algorithms: Primer on Circuits, QFT and Grover, by Simon Apers</a></li>
<li><a href="https://www.scottaaronson.com">Scott Aaronson: Lecture Notes, blog, courses</a></li>
<li><a href="https://scirate.com">SciRate</a></li>
</ol>
<h2>2. Computability</h2>
<ol>
<li><a href="https://arxiv.org/abs/2408.12473">Directed st-connectivity with few paths is in quantum logspace</a>, also see <a href="https://eklausmeier.goip.de/blog/2024/09-03-directed-st-connectivity-with-few-paths-is-in-quantum-logspace">on this blog</a></li>
<li><a href="https://arxiv.org/abs/2509.20183">Dequantization and Hardness of Spectral Sum Estimation</a></li>
</ol>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/09-09-clear-cache-in-brave-for-android</link>
		<guid>https://eklausmeier.goip.de/blog/2025/09-09-clear-cache-in-brave-for-android</guid>
		<title>Clear Cache in Brave for Android</title>
		<category>Android</category>
		<category>web-browsing</category>
		<pubDate>Tue, 09 Sep 2025 12:40:00 +0200</pubDate>
		<description><![CDATA[
<p>Problem statement: How to clear the cache in the <a href="https://brave.com">Brave browser</a> on Android.</p>
<p>The Brave browser attracted some interest as it provides protection against malware, and blocks annoying ads, like flickering images, popups, which want you to download shady and harmful software.
You can download the Brave browser in the <a href="https://play.google.com/store/apps/details?id=com.brave.browser&amp;hl=en">Google playstore</a>.</p>
<ol>
<li><a href="#short">Short story</a></li>
<li><a href="#long">Long story</a></li>
</ol>
<p>Clearing the cache in the desktop version of Brave is easy: Go to the settings menu, then search for &quot;clear cache&quot;.
Done.</p>
<h2>1. Short story<a id=short></a></h2>
<p>On Android the settings menu for Brave does <em>not</em> offer any method to clear the cache.
Instead, use the App info to clear the cache.</p>
<p>Long press on the Brave icon.</p>
<p><img src="https://eklausmeier.goip.de/img/Android-Brave-Info.webp" alt=""></p>
<p>Press on the encircled <em>i</em>.</p>
<p><img src="https://eklausmeier.goip.de/img/Android-Brave-App-info.webp" alt=""></p>
<p>Press &quot;Clear data&quot;.</p>
<p><img src="https://eklausmeier.goip.de/img/Android-Brave-Clear-cache.webp" alt=""></p>
<p>Finally, press &quot;Clear cache&quot;.</p>
<h2>2. Long story<a id=long></a></h2>
<p>The above short story solves the problem.
However, it does not tell, <em>why</em> this might be necessary.</p>
<p>In a particular case for me I had the need to clear the cache, when I upgraded <a href="https://eklausmeier.goip.de/blog/2023/10-23-pagefind-searching-in-static-sites">Pagefind</a> 1.3 to 1.4.
Apparently, the two version were not compatible, and Pagefind 1.4 was no longer able to search.
I solved this by clearing the cache in Brave.</p>
<p>The reason behind the cache problem was that in the NGINX configuration I had:</p>
<pre><code class="language-conf">location ~ \.(js|css|jpg|jpeg|png|webp|mp4|pdf)$ {
    add_header Cache-Control &quot;public, max-age=7776000&quot;;
}
</code></pre>
<p>JavaScript is advertised by the web-server to be cached by the browser for 90 days: 90 * 60 * 60 * 24 = 7,776,000.</p>
<p>The ordinary user can see this header either in his browser, or using <code>curl</code>:</p>
<pre><code class="language-bash[data-line=10]">$ curl -I https://eklausmeier.goip.de/pagefind/pagefind-ui.js
HTTP/1.1 200 OK
Server: nginx/1.28.0
Date: Tue, 09 Sep 2025 10:26:46 GMT
Content-Type: text/javascript
Content-Length: 84597
Last-Modified: Mon, 08 Sep 2025 17:05:18 GMT
Connection: keep-alive
ETag: &quot;68bf0cce-14a75&quot;
Cache-Control: public, max-age=7776000
Accept-Ranges: bytes
</code></pre>
<p>For images, videos, and PDF that caching interval is adequate.
For Pagefind 1.4 it was not.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/08-25-slides-on-simplified-saaze</link>
		<guid>https://eklausmeier.goip.de/blog/2025/08-25-slides-on-simplified-saaze</guid>
		<title>Slides on Simplified Saaze</title>
		<category>blogging</category>
		<pubDate>Mon, 25 Aug 2025 21:30:00 +0200</pubDate>
		<description><![CDATA[
<p>This very blog is using <a href="https://eklausmeier.goip.de/blog/2021/10-31-simplified-saaze"><em>Simplified Saaze</em></a> as a static site generator.
I.e., I write my blog posts in Markdown, then <em>Simplified Saaze</em> converts them to plain HTML and CSS.</p>
<p><strong>1. Brief history:</strong> In May 2021 I moved from WordPress to the static site generator <a href="https://saaze.dev">Saaze</a>.
See post <a href="https://eklausmeier.goip.de/blog/2021/05-18-moved-blog-to-eklausmeier-goip-de">Moved Blog To eklausmeier.goip.de</a>.
I was particularly attracted by the simplicity of Saaze.
However, a number of features were missing:</p>
<ol>
<li>being able to move the blog around under different root directories</li>
<li>showing math formulas using MathJax</li>
</ol>
<p>I added those two missing features to Saaze.</p>
<p>I noticed that I could improve the speed of Saaze quite significantly.
Furthermore, the code of Saaze could be stripped of unnecessary complexities, but still retaining the old logic.
This led to a modified version of Saaze, which I called <em>Simplified Saaze</em>.
<em>Simplified Saaze</em> has fewer lines of code than Saaze.
Despite this, it is almost two orders of magnitude faster than the original.</p>
<p>See</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2021/10-19-making-static-site-generator-30-times-faster">Making Static Site Generator 30-Times Faster</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2021/11-12-making-static-site-generator-500-times-faster">Making Static Site Generator 500-Times Faster</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2021/11-13-performance-comparison-saaze-vs-hugo-vs-zola">Performance Comparison Saaze vs. Hugo vs. Zola</a></li>
</ol>
<p>Just out of curiosity I wanted to know how much slower <em>Simplified Saaze</em> is than <a href="https://gohugo.io">Hugo</a>.
Hugo self advertises itself as &quot;The world’s fastest framework for building websites&quot;.
Hugo is written in the compiled language Go, while <em>Simplified Saaze</em> is written in the interpreted language PHP.
I expected that Hugo would blow <em>Simplified Saaze</em> out of the water.</p>
<p>To my great surprise the opposite was the case.
<em>Simplified Saaze</em> was one order of magnitude <em>faster</em> than Hugo.
I didn't expect that.</p>
<p>I tested against <a href="https://www.getzola.org">Zola</a>.
Still, <em>Simplified Saaze</em> was faster by a factor than Zola.</p>
<p>There are at least two other static site generators, which are also faster than Hugo and Zola: they are called</p>
<ol>
<li><a href="https://www.getblades.org">Blade</a></li>
<li><a href="https://nift.dev">Nift</a></li>
</ol>
<p>So my findings are not entirely surprising.</p>
<p><strong>2. Conferences.</strong> Besides reporting about my findings on this very blog, I offered slides to the following conferences:</p>
<ol>
<li>PHP conference in Berlin in 2021</li>
<li>Dutch PHP conference in 2022</li>
<li>IPC Berlin 2022</li>
<li>Forum PHP 2022</li>
<li>Frontmania 2022</li>
<li>Longhorn PHP 2022 in Texas</li>
<li>PHP UK Conference 2023</li>
<li>Build Stuff conference 2022</li>
<li>Infobip Shift 2023</li>
</ol>
<p>All the conferences rejected the slides.
This is not entirely uncommon, as the presenter is paid all traveling and hotel costs for the conference.
However, the organizers of PHP conference in Berlin asked me to publish my findings in their magazine called &quot;PHP Magazin&quot;.
It was published there.</p>
<p><strong>3. Slides.</strong>
Here are the slides.</p>
<p><a href="https://eklausmeier.goip.de/pdf/PHP-Conf-2022-Saaze2.pdf">A Static Site Generator in PHP, Faster Than Hugo or Zola</a></p>
<p><strong>4. Themes.</strong>
There are a number of themes for <a href="https://eklausmeier.goip.de/blog/2021/10-31-simplified-saaze"><em>Simplified Saaze</em></a>:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/saaze-example">Saaze example</a>, a pure example theme, simple to use and modify</li>
<li><a href="https://eklausmeier.goip.de/jpilot">J-Pilot</a>, showcasing an open-source software project and having a hierarchical menu</li>
<li><a href="https://eklausmeier.goip.de/koehntopp">Koehntopp</a>, a blog for a computer scientist</li>
<li><a href="https://eklausmeier.goip.de/nukeklaus">NukeKlaus</a>, a blog for a nuclear power engineer</li>
<li><a href="https://eklausmeier.goip.de/mobility">Mobility</a>, a multilingual site for promoting software for battery management used in electric vehicles</li>
<li><a href="https://eklausmeier.goip.de/vonhoff">Vonhoff</a>, a German site for a doctoral student</li>
<li><a href="https://eklausmeier.goip.de/paternoster">Paternoster</a>, a blog of a web developer</li>
<li><a href="https://eklausmeier.goip.de/panorama">Panorama</a>, a site for a restaurant showing their rooms and their menu</li>
<li><a href="https://eklausmeier.goip.de/lemire">Lemire</a>, a site for a computer science professor</li>
<li><a href="https://eklausmeier.goip.de/wendt">Wendt</a>, a German political blog</li>
<li><a href="https://eklausmeier.goip.de/myrawest">Myra West</a>, a personal blog about psychology, friendship, and personal journaling</li>
</ol>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/08-13-invalid-mit-magic-cookie-1-key</link>
		<guid>https://eklausmeier.goip.de/blog/2025/08-13-invalid-mit-magic-cookie-1-key</guid>
		<title>Invalid MIT-MAGIC-COOKIE-1 key</title>
		<category>X11</category>
		<pubDate>Wed, 13 Aug 2025 20:00:00 +0200</pubDate>
		<description><![CDATA[
<p><strong>1. Problem statement:</strong> You can no longer start any X applications.
You just get something like</p>
<pre class="line-numbers"><code class="language-bash">$ xclock
Invalid MIT-MAGIC-COOKIE-1 key
Error: Can't open display: :0
</code></pre>
<p>You cannot even run</p>
<pre class="line-numbers"><code class="language-bash">$ xhost +
Invalid MIT-MAGIC-COOKIE-1 key
xhost:  unable to open display &quot;:0&quot;
</code></pre>
<p>So, you are stuck.</p>
<p><strong>2. Solution.</strong>
Copy current X11 cookie to <code>.Xauthority</code> file, like so:</p>
<pre class="line-numbers"><code class="language-bash">$ cp -p /tmp/serverauth.wBYidy7HBj .Xauthority
</code></pre>
<p>The actual serverauth filename varies.</p>
<p>This was documented here:
<a href="https://unix.stackexchange.com/questions/649651/invalid-mit-magic-cookie-1-keyxhost-unable-to-open-display-0">Invalid MIT-MAGIC-COOKIE-1 keyxhost: unable to open display</a>.</p>
<p>Check with</p>
<pre class="line-numbers"><code class="language-bash">$ xauth list
</code></pre>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/08-04-installing-simplified-saaze-on-oracle-cloud</link>
		<guid>https://eklausmeier.goip.de/blog/2025/08-04-installing-simplified-saaze-on-oracle-cloud</guid>
		<title>Installing Simplified Saaze on Oracle Cloud</title>
		<category>Linux</category>
		<pubDate>Mon, 04 Aug 2025 16:30:00 +0200</pubDate>
		<description><![CDATA[
<p>This blog runs on <a href="https://eklausmeier.goip.de/blog/2021/10-31-simplified-saaze">Simplified Saaze</a>.
<em>Simplified Saaze</em> is a static site generator written in PHP.
I use <em>Simplified Saaze</em> to generate all ca. static 700 HTML files.</p>
<p>I recently configured a minimal Oracle cloud instance, see <a href="https://eklausmeier.goip.de/blog/2025/08-02-first-impressions-on-oracle-cloud">First Impressions on Oracle Cloud</a>.
This blog post shows how to install <em>Simplified Saaze</em> on that instance running on Oracle Linux 9.</p>
<p>I had already written about some installations of <em>Simplified Saaze</em>:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2021/10-31-simplified-saaze#installation"><em>Simplified Saaze</em></a></li>
<li><a href="https://eklausmeier.goip.de/blog/2023/01-03-installing-simplified-saaze-on-windows-10">Installing Simplified Saaze on Windows 10</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2023/01-31-installing-simplified-saaze-on-windows-10-p2">Installing Simplified Saaze on Windows 10 #2</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2024/12-15-installing-simplified-saaze-on-android">Installing Simplified Saaze on Android</a></li>
</ol>
<h2>1. Installing packages</h2>
<p>Install <code>php-cli</code>.</p>
<pre><code class="language-bash">dnf --disablerepo=ol9_oci_included install php-cli
</code></pre>
<p>Packages <code>php-common</code> and <code>php-opcache</code> are automatically installed as dependency as well.</p>
<p>The much large package <code>php</code> contains an httpd-server, which we do not want.
We already have chosen NGINX.
So, we did not install package <code>php</code>, but just <code>php-cli</code> which is way smaller.</p>
<p>We need to compile two PHP PECL extensions:</p>
<ol>
<li><a href="https://pecl.php.net/package/md4c">MD4C</a></li>
<li><a href="https://pecl.php.net/package/yaml">Yaml</a></li>
</ol>
<p>Therefore we need some development libraries.</p>
<pre><code class="language-bash">dnf --disablerepo=ol9_oci_included install php-devel
</code></pre>
<p>This in turn installs dependencies.</p>
<pre><code>autoconf                  noarch       2.69-39.el9                 ol9_appstream           741 k
automake                  noarch       1.16.2-8.el9                ol9_appstream           794 k
cmake-filesystem          x86_64       3.26.5-2.el9                ol9_appstream            11 k
gcc-c++                   x86_64       11.5.0-5.0.1.el9_5          ol9_appstream            13 M
keyutils-libs-devel       x86_64       1.6.3-1.el9                 ol9_appstream            88 k
krb5-devel                x86_64       1.21.1-8.0.1.el9_6          ol9_appstream           187 k
libcom_err-devel          x86_64       1.46.5-7.el9                ol9_appstream            24 k
libkadm5                  x86_64       1.21.1-8.0.1.el9_6          ol9_baseos_latest        75 k
libselinux-devel          x86_64       3.6-3.el9                   ol9_appstream           338 k
libsepol-devel            x86_64       3.6-2.el9                   ol9_appstream            87 k
libstdc++-devel           x86_64       11.5.0-5.0.1.el9_5          ol9_appstream           3.1 M
libtool                   x86_64       2.4.6-46.el9                ol9_appstream           606 k
libverto-devel            x86_64       0.3.2-3.el9                 ol9_appstream            15 k
libxml2-devel             x86_64       2.9.13-11.el9_6             ol9_appstream           1.1 M
m4                        x86_64       1.4.19-1.el9                ol9_appstream           333 k
openssl-devel             x86_64       1:3.2.2-6.0.1.el9_5.1       ol9_appstream           4.0 M
pcre2-devel               x86_64       10.40-6.0.1.el9             ol9_appstream           669 k
pcre2-utf16               x86_64       10.40-6.0.1.el9             ol9_appstream           213 k
pcre2-utf32               x86_64       10.40-6.0.1.el9             ol9_appstream           202 k
perl-File-Compare         noarch       1.100.600-481.1.el9_6       ol9_appstream            12 k
perl-Thread-Queue         noarch       3.14-460.el9                ol9_appstream            28 k
perl-threads              x86_64       1:2.25-460.el9              ol9_appstream            65 k
perl-threads-shared       x86_64       1.61-460.el9                ol9_appstream            50 k
</code></pre>
<p>The PHP Yaml extension needs the yaml C header.</p>
<pre><code class="language-bash">dnf --disablerepo=ol9_oci_included --enablerepo=ol9_codeready_builder install libyaml-devel
</code></pre>
<p>This strange looking <code>--disablerepo=ol9_oci_included</code> was explained in <a href="https://eklausmeier.goip.de/blog/2025/08-02-first-impressions-on-oracle-cloud">First Impressions on Oracle Cloud</a>.
The <code>--enablerepo</code> adds the repo such that <code>dnf</code> finds <code>libyaml-devel</code>.
See <a href="https://docs.oracle.com/en/graalvm/jdk/22/docs/reference-manual/ruby/InstallingLibYAML/">Installing LibYAML</a>.</p>
<h2>2. Compiling extensions</h2>
<p><strong>1. MD4C extension.</strong> Copy the tar-file:</p>
<pre><code class="language-bash">scp -i ~/.ssh/ssh-key-2025-08-02-dl8dbo-opc.key -p md4c-1.1.tgz opc@oracle-cloud-instance:/tmp/
</code></pre>
<p>Unpack, go to to the directory, then run</p>
<pre><code class="language-bash">phpize
./configure
make
</code></pre>
<p><strong>2. Yaml extension.</strong> Copy the tar-file:</p>
<pre><code class="language-bash">scp -i ~/.ssh/ssh-key-2025-08-02-dl8dbo-opc.key -p yaml-2.2.5.tgz opc@oracle-cloud-instance:/tmp/
</code></pre>
<p>Unpack, then run</p>
<pre><code class="language-bash">phpize
./configure
make
make test
</code></pre>
<p>Both modules are then copied to <code>/usr/lib64/php/modules</code>:</p>
<pre><code class="language-bash">cd /usr/lib64/php/modules/
cp -p ~opc/D/md4c-1.1/modules/md4c.so .
cp -p ~opc/D/yaml-2.2.5/modules/yaml.so .
chown root:root md4c.so yaml.so
</code></pre>
<p>Finally, <code>php.ini</code> needs adjustment.
Add the following new file to <code>/etc/php.d/90-md4c-yaml.ini</code>:</p>
<pre><code>extension=md4c
extension=yaml
</code></pre>
<p>Check results with:</p>
<pre><code class="language-bash">php -m
</code></pre>
<p>Result should be:</p>
<pre><code>[PHP Modules]
bz2
calendar
Core
ctype
curl
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
md4c
openssl
pcntl
pcre
Phar
readline
Reflection
session
sockets
SPL
standard
tokenizer
yaml
Zend OPcache
zlib

[Zend Modules]
Zend OPcache
</code></pre>
<h2>3. Installing composer</h2>
<p>There is a lot of <a href="https://en.wikipedia.org/wiki/Tohu_wa-bohu">Tohu wa-bohu</a> around the installation of PHP composer.
I followed the instructions in the <a href="https://gitlab.archlinux.org/archlinux/packaging/packages/composer/-/blob/main/PKGBUILD?ref_type=heads">PKGBUILD</a> from the Arch Linux package <a href="https://archlinux.org/packages/extra/any/composer/">composer</a>.</p>
<p>Here is a simple installation recipe.</p>
<ol>
<li>Download <code>composer.phar</code> from <a href="https://github.com/composer/composer/releases">composer Releases</a>.</li>
<li>Rename: <code>mv composer.phar /usr/local/bin/composer</code></li>
<li><code>chown root:root /usr/local/bin/composer</code></li>
<li>Make it executable: <code>chmod 775 /usr/local/bin/composer</code></li>
</ol>
<p>Checking that it actually works, let's fetch <a href="https://eklausmeier.goip.de/saaze-example">Saaze example</a>.</p>
<pre><code class="language-bash">cd
composer create-project eklausme/saaze-example
</code></pre>
<p>Output is:</p>
<pre><code class="language-bash">$ time composer create-project eklausme/saaze-example
Creating a &quot;eklausme/saaze-example&quot; project at &quot;./saaze-example&quot;
Installing eklausme/saaze-example (v1.4)
  - Downloading eklausme/saaze-example (v1.4)
  - Installing eklausme/saaze-example (v1.4): Extracting archive
Created project in /home/opc/saaze-example
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking eklausme/saaze (v2.5)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Downloading eklausme/saaze (v2.5)
  - Installing eklausme/saaze (v2.5): Extracting archive
Generating optimized autoload files
No security vulnerability advisories found.

real    0m2.132s
user    0m0.467s
sys     0m0.210s
</code></pre>
<h2>4. Using Simplified Saaze</h2>
<p>Now the static HTML files can be generated.</p>
<pre><code class="language-bash">$ time php saaze
Building static site in /home/opc/saaze-example/build...
        execute(): filePath=/home/opc/saaze-example/content/auxil.yml, nSIentries=0, totalPages=0, entries_per_page=20
        execute(): filePath=/home/opc/saaze-example/content/music.yml, nSIentries=11, totalPages=1, entries_per_page=20
        execute(): filePath=/home/opc/saaze-example/content/blog.yml, nSIentries=35, totalPages=2, entries_per_page=20
Finished creating 3 collections, 3 with index, and 47 entries (0.06 secs / 756kB)
#collections=3, parseEntry=0.0020/47-3, md2html=0.0009, toHtml=0.0002/47, renderEntry=0.0054/47, renderCollection=0.0007/6, content=47/0

real    0m0.092s
user    0m0.019s
sys     0m0.035s
</code></pre>
<p>Looking at the result in the <code>build</code> directory.</p>
<pre><code class="language-bash">$ ls -alF build/
total 8
drwxr-xr-x.  4 opc opc   49 Aug  4 13:47 ./
drwxr-xr-x.  7 opc opc  184 Aug  4 13:47 ../
drwxr-xr-x. 38 opc opc 4096 Aug  4 13:47 blog/
-rw-r--r--.  1 opc opc  965 Aug  4 13:47 index.html
drwxr-xr-x.  4 opc opc   48 Aug  4 13:47 music/
</code></pre>
<p>To actually deploy the web-site the following simple shell script will do.
Beforehand, create <code>mkdir /srv/http/oldblogs</code>.</p>
<pre><code class="language-bash">#!/bin/bash
# Deploy Saaze-Example

cd /home/opc/php/saaze-example
time RBASE=&quot;/saaze-example&quot; php saaze -b /tmp/build

cd /tmp/build
rm index.html
ln -s blog/index.html
cp -p /home/opc/php/saaze-example/public/blogklm.css .

cd /srv/http/
rm -rf oldblogs/saaze-example/
mv saaze-example/ oldblogs/

mv /tmp/build/ saaze-example
</code></pre>
<p>To enable NGINX to read all subdirectories in <code>/srv/http</code> you must <a href="https://serverfault.com/questions/131105/how-do-i-get-selinux-to-allow-apache-and-samba-on-the-same-folder">instruct</a> SELinux:</p>
<pre><code class="language-bash">chcon -R -t public_content_rw_t /srv/http
</code></pre>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/08-02-first-impressions-on-oracle-cloud</link>
		<guid>https://eklausmeier.goip.de/blog/2025/08-02-first-impressions-on-oracle-cloud</guid>
		<title>First Impressions on Oracle Cloud</title>
		<category>Linux</category>
		<pubDate>Sat, 02 Aug 2025 22:10:00 +0200</pubDate>
		<description><![CDATA[
<ul>
<li><a href="#InstanceSetup">1. Instance Setup</a></li>
<li><a href="#dnfProblem">2. Problem with <code>dnf</code></a></li>
<li><a href="#SetupNGINX">3. Setup NGINX</a></li>
<li><a href="#SporadicDropouts">4. Problem with sporadic dropouts</a></li>
</ul>
<p>I read about the Oracle <a href="https://docs.oracle.com/en-us/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm">Always Free Instance</a> here:</p>
<ol>
<li><a href="https://prozak.org/005-oracle-cloud-always-free-instance-ubuntu-debian-conversion/">Oracle Cloud Always Free Instance Ubuntu -&gt; Debian Conversion</a></li>
<li><a href="https://www.cflee.com/posts/oci-first-look/">Oracle Cloud: first impressions</a></li>
</ol>
<p>I registered for <a href="https://en.wikipedia.org/wiki/Oracle_Cloud">Oracle cloud</a>.</p>
<p>The registration requires:</p>
<ol>
<li>a credit card</li>
<li>a smartphone with the <a href="https://play.google.com/store/apps/details?id=oracle.idm.mobile.authenticator">Oracle Mobile Authenticator</a> app</li>
</ol>
<h2>1. Instance Setup<a id=InstanceSetup></a></h2>
<p>The credit card will be debited with 0.93 EUR, but this sum will be refunded.</p>
<p>The <a href="https://play.google.com/store/apps/details?id=oracle.idm.mobile.authenticator">Oracle authenticator</a> app is known to be problematic, as it seems there is no way to transfer the credentials to another phone, in case you upgrade your phone.</p>
<p>The setup of a virtual Linux machine on Oracle cloud is quite confusing, but clicking through all the endless dialogues will finally provide you with a simple virtual machine and a public IP.</p>
<p>You can then connect to this public IP giving ssh keys, which were generated during the dialogues.</p>
<pre><code class="language-bash">ssh -l opc -i ssh-key-2025-08-02.key 144.24.181.149
</code></pre>
<p>The machine itself is fast, although it uses a now no longer produced <a href="https://en.wikipedia.org/wiki/Epyc">AMD EPYC</a> 7551 (&quot;Naples&quot;) processor.
This <a href="https://en.wikipedia.org/wiki/Epyc">AMD EPYC</a> 7551 was produced in 2017.</p>
<pre><code class="language-bash">$ lscpu
Architecture:                x86_64
  CPU op-mode(s):            32-bit, 64-bit
  Address sizes:             40 bits physical, 48 bits virtual
  Byte Order:                Little Endian
CPU(s):                      2
  On-line CPU(s) list:       0,1
Vendor ID:                   AuthenticAMD
  Model name:                AMD EPYC 7551 32-Core Processor
    CPU family:              23
    Model:                   1
    Thread(s) per core:      2
    Core(s) per socket:      1
    Socket(s):               1
    Stepping:                2
    BogoMIPS:                3992.49
    Flags:                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe
                             1gb rdtscp lm rep_good nopl xtopology cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcn
                             t tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw
                              topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xg
                             etbv1 clzero xsaveerptr virt_ssbd arat npt nrip_save vgif overflow_recov succor arch_capabilities
Virtualization features:
  Virtualization:            AMD-V
  Hypervisor vendor:         KVM
  Virtualization type:       full
Caches (sum of all):
  L1d:                       64 KiB (1 instance)
  L1i:                       64 KiB (1 instance)
  L2:                        512 KiB (1 instance)
  L3:                        16 MiB (1 instance)
NUMA:
  NUMA node(s):              1
  NUMA node0 CPU(s):         0,1
Vulnerabilities:
  Gather data sampling:      Not affected
  Indirect target selection: Not affected
  Itlb multihit:             Not affected
  L1tf:                      Not affected
  Mds:                       Not affected
  Meltdown:                  Not affected
  Mmio stale data:           Not affected
  Reg file data sampling:    Not affected
  Retbleed:                  Mitigation; untrained return thunk; SMT vulnerable
  Spec rstack overflow:      Vulnerable: Safe RET, no microcode
  Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
  Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:                Mitigation; Retpolines; IBPB conditional; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
  Srbds:                     Not affected
  Tsa:                       Not affected
  Tsx async abort:           Not affected
</code></pre>
<p>Memory is not opulent, one GB:</p>
<pre><code class="language-bash[data-lines=6]">$ lsmem
RANGE                                 SIZE  STATE REMOVABLE BLOCK
0x0000000000000000-0x000000003fffffff   1G online       yes   0-7

Memory block size:       128M
Total online memory:       1G
Total offline memory:      0B
</code></pre>
<p>SSD storage is 30 GB:</p>
<pre><code class="language-bash">$ df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    4.0M     0  4.0M   0% /dev
tmpfs                       252M     0  252M   0% /dev/shm
tmpfs                       101M  2.8M   99M   3% /run
efivarfs                    256K   35K  217K  14% /sys/firmware/efi/efivars
/dev/mapper/ocivolume-root   30G  5.6G   24G  19% /
/dev/sda2                   2.0G  623M  1.4G  32% /boot
/dev/mapper/ocivolume-oled   15G  202M   15G   2% /var/oled
/dev/sda1                   100M  7.2M   93M   8% /boot/efi
tmpfs                        51M     0   51M   0% /run/user/989
tmpfs                        51M     0   51M   0% /run/user/1000
</code></pre>
<p>Partitions are:</p>
<pre><code class="language-bash">$ lsblk -af
lsblk -af
NAME               FSTYPE      FSVER    LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1             vfat        FAT16          AE3C-806E                                92.6M     7% /boot/efi
├─sda2             xfs                        dd88872e-0527-4193-8282-b8281f1ae6fd      1.3G    31% /boot
└─sda3             LVM2_member LVM2 001       13gBAf-puy6-RFhI-zAfe-nNzD-sYAi-3zKEWn
  ├─ocivolume-root xfs                        3aa327e4-ce2d-4637-9f24-7687e2c0e8b9     23.8G    19% /
  └─ocivolume-oled xfs                        1a046f0c-bfff-4334-baf3-32b6db923a8a     14.7G     2% /var/oled
</code></pre>
<p>After I installed NGINX:</p>
<pre><code class="language-bash">[root@instance-20250802-1100 ~]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:44321         0.0.0.0:*               LISTEN      2410/pmcd
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6307/nginx: master
tcp        0      0 127.0.0.1:4330          0.0.0.0:*               LISTEN      3296/pmlogger
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2230/sshd: /usr/sbi
tcp        0      0 10.0.0.138:49994        169.254.169.254:80      ESTABLISHED 3356/runcommand
tcp        0      0 10.0.0.138:53180        169.254.169.254:80      ESTABLISHED 3356/runcommand
tcp        0      0 10.0.0.138:47106        147.154.152.55:443      ESTABLISHED 2421/gomon
tcp        0      0 10.0.0.138:38010        169.254.169.254:80      ESTABLISHED 2421/gomon
tcp        0      0 10.0.0.138:45260        169.254.169.254:80      ESTABLISHED 3356/runcommand
tcp        0    196 10.0.0.138:22           149.172.93.57:60574     ESTABLISHED 4872/sshd: opc [pri
tcp        0      0 10.0.0.138:58454        169.254.169.254:80      ESTABLISHED 3356/runcommand
tcp        0      0 10.0.0.138:51840        169.254.169.254:80      ESTABLISHED 3356/runcommand
tcp        0      0 10.0.0.138:40406        169.254.169.254:80      ESTABLISHED 3356/runcommand
tcp        0      0 10.0.0.138:46170        169.254.169.254:80      ESTABLISHED 3356/runcommand
tcp6       0      0 ::1:44321               :::*                    LISTEN      2410/pmcd
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::80                   :::*                    LISTEN      6307/nginx: master
tcp6       0      0 ::1:4330                :::*                    LISTEN      3296/pmlogger
tcp6       0      0 :::22                   :::*                    LISTEN      2230/sshd: /usr/sbi
</code></pre>
<h2>2. Problem with <code>dnf</code><a id=dnfProblem></a></h2>
<p>Just using <code>dnf</code> or <code>yum</code> will essentially hang the machine.</p>
<p>User Any_Working3520 figured out in <a href="https://www.reddit.com/r/oraclecloud/comments/1bb3iip/dnf_install_is_very_slow_on_my_oci_compute/">dnf install is very slow on my OCI compute instances</a>, that you have to <em>disable</em> one particular repo for dnf/yum:</p>
<pre><code class="language-bash">yum --disablerepo=ol9_oci_included ...
dnf --disablerepo=ol9_oci_included ...
</code></pre>
<p>With that you can update the machine:</p>
<pre><code class="language-bash">dnf --disablerepo=ol9_oci_included update
</code></pre>
<h2>3. Setup NGINX<a id=SetupNGINX></a></h2>
<p>The help center post <a href="https://docs.oracle.com/en/learn/lab_compute_instance/index.html#introduction">&quot;Create a web server on a compute instance&quot;</a> was helpful.</p>
<p>Installing NGINX:</p>
<pre><code class="language-bash">dnf --disablerepo=ol9_oci_included install nginx
systemctrl enable nginx
systemctrl start nginx
</code></pre>
<p>You have to specifically allow incoming TCP traffic for port 80:</p>
<pre><code class="language-bash">firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload
</code></pre>
<p>Then head to <em>Virtual Cloud Networks</em>.</p>
<p><img src="https://eklausmeier.goip.de/img/OracleCloudVCN1.webp" alt="Photo"></p>
<p>Click on the <em>Default Security List for vcn-xyz</em>.
Then <em>Security rules</em>.</p>
<p><img src="https://eklausmeier.goip.de/img/OracleCloudVCN2.webp" alt="Photo"></p>
<p>Create an ingress rule:</p>
<ol>
<li>Source Type: CIDR</li>
<li>Source CIDR: 0.0.0.0/0</li>
<li>IP Protocol: TCP</li>
<li>Source Port Range: All (it's really important to choose <em>All</em>, not just 80)</li>
<li>Destination Port Range: 80</li>
</ol>
<p>Both ports, 22 and 80, must have <em>Source Port Range</em> set to <em>All</em>.
This is somewhat counterintuitive, but required.</p>
<p><img src="https://eklausmeier.goip.de/img/OracleCloudVCN2.webp" alt="Photo"></p>
<p>Check in a browser:</p>
<p><img src="https://eklausmeier.goip.de/img/OracleCloudNGINX.webp" alt="Photo"></p>
<p>If you want to change the NGINX root directory, you <em>must</em> also change the SELinux security context.
See <a href="https://docs.oracle.com/en/learn/ol-nginx/">Install the NGINX Web Server and Proxy on Oracle Linux</a>.
Assume your new root is <code>/srv/http</code>.
Then</p>
<pre><code class="language-bash">chcon -Rt httpd_sys_content_t /srv/http
</code></pre>
<p>Check with ```ls -lZ /srv/http`.</p>
<h2>4. Problem with sporadic dropouts<a id=SporadicDropouts></a></h2>
<p>If you experiment with the above <em>Security Lists</em> be prepared to get yourself disconnected.</p>
<p>However, for unknown reasons the connection to the instance drops completely, i.e., no ssh connection and no HTTP connection.
You have to wait an hour to get it back again.</p>
<p>This happens regularly.</p>
<p>The default <code>iptables</code> rules are:</p>
<pre><code class="language-bash"># iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N BareMetalInstanceServices
-A OUTPUT -d 169.254.0.0/16 -j BareMetalInstanceServices
-A BareMetalInstanceServices -d 169.254.0.2/32 -p tcp -m owner --uid-owner 0 -m tcp --dport 3260 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.2.0/24 -p tcp -m owner --uid-owner 0 -m tcp --dport 3260 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.4.0/24 -p tcp -m owner --uid-owner 0 -m tcp --dport 3260 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.5.0/24 -p tcp -m owner --uid-owner 0 -m tcp --dport 3260 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.0.2/32 -p tcp -m tcp --dport 80 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.169.254/32 -p udp -m udp --dport 53 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.169.254/32 -p tcp -m tcp --dport 53 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.0.3/32 -p tcp -m owner --uid-owner 0 -m tcp --dport 80 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.0.4/32 -p tcp -m tcp --dport 80 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.169.254/32 -p udp -m udp --dport 67 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.169.254/32 -p udp -m udp --dport 69 -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.169.254/32 -p udp -m udp --dport 123 -m comment --comment &quot;Allow access to OBMCS local NTP service&quot; -j ACCEPT
-A BareMetalInstanceServices -d 169.254.0.0/16 -p tcp -m tcp -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j REJECT --reject-with tcp-reset
-A BareMetalInstanceServices -d 169.254.0.0/16 -p udp -m udp -m comment --comment &quot;See the Oracle-Provided Images section in the Oracle Bare Metal documentation for security impact of modifying or removing this rule&quot; -j REJECT --reject-with icmp-port-unreachable
</code></pre>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-20-php-stuttering-under-load</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-20-php-stuttering-under-load</guid>
		<title>PHP stuttering under load</title>
		<category>PHP</category>
		<category>web-server</category>
		<pubDate>Sun, 20 Jul 2025 23:00:00 +0200</pubDate>
		<description><![CDATA[
<p>This very blog is run by <a href="https://eklausmeier.goip.de/blog/2021/10-31-simplified-saaze"><em>Simplified Saaze</em></a>.
<em>Simplified Saaze</em> is a static site generator, i.e., it reads Markdown files and produces HTML files, which are then served from a web-server.
This is called <em>static</em> mode.</p>
<p><em>Simplified Saaze</em> can also be used in a <em>dynamic</em> mode.
In that mode the Markdown file is converted to HTML on the fly, i.e., in the exact moment when the web-server receives a request, <em>Simplified Saaze</em> produces the required HTML.</p>
<p>This blog post describes why I moved back from dynamic mode to static mode.</p>
<ul>
<li><a href="#currentSetup">A. Current setup</a></li>
<li><a href="#deploymentScripts">B. Deployment scripts for static sites</a></li>
<li><a href="#runningDeployments">C. Running deployment scripts</a></li>
<li><a href="#nginx">D. NGINX configuration</a></li>
</ul>
<h2>A. Current setup<a id=currentSetup></a></h2>
<p><strong>1. File processing in <em>Simplified Saaze</em>.</strong>
<a href="https://eklausmeier.goip.de/blog/2021/10-31-simplified-saaze"><em>Simplified Saaze</em></a> is written in PHP.
It does the following for every Markdown file:</p>
<ol>
<li>reads collection file with <a href="https://www.php.net/manual/en/function.file-get-contents.php"><code>file_get_contents()</code></a></li>
<li>recursively traverses the directory for all Markdown files with <a href="https://www.php.net/manual/en/function.scandir.php"><code>scandir()</code></a></li>
<li>read entire file with <a href="https://www.php.net/manual/en/function.file-get-contents.php"><code>file_get_contents()</code></a></li>
<li>parses the file with <a href="https://www.php.net/manual/en/function.yaml-parse.php"><code>yaml_parse()</code></a></li>
<li>file content is checked against keywords (like '[youtube]' or <code>$$</code> for math)</li>
<li>content is then converted to HTML using MD4C</li>
<li>excerpt is computed from HTML using <a href="https://www.php.net/manual/en/function.strip-tags.php"><code>strip_tags()</code></a></li>
<li>content is word counted on original Markdown</li>
<li>the (output) template PHP is run on the HTML, which in turn calls <a href="https://www.php.net/manual/en/function.eval.php"><code>eval()</code></a> on the entire HTML</li>
<li>that is then written to a file using <a href="https://www.php.net/manual/en/function.file-put-contents.php"><code>file_put_contents()</code></a>, or directly fed back to the web-server</li>
</ol>
<p>Quite some file I/O and string processing.</p>
<p>The last few blog posts regarding <a href="https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer8">stability mountains</a> were quite <em>large</em> Markdown files:</p>
<pre class="line-numbers"><code class="language-bash">-rw-r--r-- 1 klm klm 415K Jul 15 10:21 07-14-stability-mountains-for-bdf1.md
-rw-r--r-- 1 klm klm 810K Jul 15 10:30 07-14-stability-mountains-for-bdf2.md
-rw-r--r-- 1 klm klm 1.2M Jul 15 10:32 07-14-stability-mountains-for-bdf3.md
-rw-r--r-- 1 klm klm 1.6M Jul 15 10:36 07-14-stability-mountains-for-bdf4.md
-rw-r--r-- 1 klm klm 2.0M Jul 15 10:38 07-14-stability-mountains-for-bdf5.md
-rw-r--r-- 1 klm klm 2.4M Jul 15 10:39 07-14-stability-mountains-for-bdf6.md
-rw-r--r-- 1 klm klm 1.3M Jul 15 10:43 07-14-stability-mountains-for-tendler3.md
-rw-r--r-- 1 klm klm 1.7M Jul 15 10:44 07-14-stability-mountains-for-tendler4.md
-rw-r--r-- 1 klm klm 2.1M Jul 15 10:45 07-14-stability-mountains-for-tendler5.md
-rw-r--r-- 1 klm klm 2.5M Jul 15 10:46 07-14-stability-mountains-for-tendler6.md
-rw-r--r-- 1 klm klm 3.0M Jul 15 10:47 07-14-stability-mountains-for-tendler7.md
-rw-r--r-- 1 klm klm 1.2M Jul 15 10:51 07-14-stability-mountains-for-tischer3.md
-rw-r--r-- 1 klm klm 1.6M Jul 15 10:55 07-14-stability-mountains-for-tischer4.md
-rw-r--r-- 1 klm klm 2.0M Jul 15 10:56 07-14-stability-mountains-for-tischer5.md
-rw-r--r-- 1 klm klm 2.4M Jul 15 10:58 07-14-stability-mountains-for-tischer6.md
-rw-r--r-- 1 klm klm 2.8M Jul 15 10:59 07-14-stability-mountains-for-tischer7.md
-rw-r--r-- 1 klm klm 3.2M Jul 15 11:00 07-14-stability-mountains-for-tischer8.md
</code></pre>
<p><strong>2. NGINX caching.</strong>
I had NGINX configured such that a once generated HTML file will be cached using <a href="https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_no_cache"><code>fastcgi_no_cache</code></a>.</p>
<pre class="line-numbers" data-line=4,7><code class="language-ini">http {
    root   /srv/http;

    fastcgi_cache_path /var/cache/nginx/ keys_zone=nginxpc:720m inactive=720m;
    fastcgi_cache_key &quot;$request_method$request_uri&quot;;
    fastcgi_cache nginxpc;
    fastcgi_cache_valid 720m;
    ...
}
</code></pre>
<p>I.e., files are cached for 720 minutes, that is 12 hours.</p>
<p>Caching is activated for below files:</p>
<pre class="line-numbers" data-line=12><code class="language-ini">    server {
        set $no_cache 0;
        #Don't cache POST requests
        if ($request_method = POST) {
                set $no_cache 1;
        }
        if ($request_uri !~ &quot;^/(aux|blog|music|gallery|jpilot|koehntopp|lemire|mobility|myrawest|nukeklaus|panorma|paternoster|saaze-example|vonhoff|wendt)&quot;) {
                set $no_cache 1;
        }
        ...
        fastcgi_cache_bypass $no_cache;
        fastcgi_no_cache $no_cache;

    }
</code></pre>
<p>I had hoped that I can get the best of both worlds:</p>
<ol>
<li>speed of static files served by the web-server</li>
<li>dynamic generation of HTML</li>
</ol>
<p>The cache directory is quite full:</p>
<pre class="line-numbers"><code class="language-bash">[root@ryzen /var/cache/nginx]# ls -l | wc
   1110    9983   87565
</code></pre>
<p><strong>3. All sub-blogs via a single index.php.</strong>
Below <code>index.php</code> served <em>all</em> sub-blogs:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog">my own blog</a></li>
<li><a href="https://eklausmeier.goip.de/jpilot">J-Pilot</a></li>
<li><a href="https://eklausmeier.goip.de/koehntopp">Koehntop</a></li>
<li><a href="https://eklausmeier.goip.de/lemire">Lemire</a></li>
<li><a href="https://eklausmeier.goip.de/mobility">Mobility</a></li>
<li><a href="https://eklausmeier.goip.de/myrawest">Myra West</a></li>
<li><a href="https://eklausmeier.goip.de/nukeklaus">Nukeklaus</a></li>
<li><a href="https://eklausmeier.goip.de/panorama">Panorama</a></li>
<li><a href="https://eklausmeier.goip.de/paternoster">Paternoster</a></li>
<li><a href="https://eklausmeier.goip.de/saaze-example">Saaze-Example</a></li>
<li><a href="https://eklausmeier.goip.de/vonhoff">Vonhoff</a></li>
<li><a href="https://eklausmeier.goip.de/wendt">Wendt</a></li>
</ol>
<p>The PHP source code for <code>index.php</code> is as follows.</p>
<pre class="line-numbers" data-line=47><code class="language-php">&lt;?php
    $blog = array(
        // prefix =&gt; array( directory with content, flag for cutting prefix, default sub-URL )
        '/aux' =&gt; array('/home/klm/php/sndsaaze',0),
        '/blog' =&gt; array('/home/klm/php/sndsaaze',0),
        '/gallery' =&gt; array('/home/klm/php/sndsaaze',0),
        '/music' =&gt; array('/home/klm/php/sndsaaze',0),
        '/jpilot' =&gt; array('/home/klm/php/saaze-jpilot',1),
        '/koehntopp' =&gt; array('/home/klm/php/saaze-koehntopp',1),
        '/lemire' =&gt; array('/home/klm/php/saaze-lemire',1,'/blog'),
        '/mobility' =&gt; array('/home/klm/php/saaze-mobility',1),
        '/myrawest' =&gt; array('/home/klm/php/saaze-myrawest',1),
        '/nukeklaus' =&gt; array('/home/klm/php/saaze-nukeklaus',1),
        '/paternoster' =&gt; array('/home/klm/php/saaze-paternoster',1,'/posts'),
        '/panorama' =&gt; array('/home/klm/php/saaze-panorama',1),
        '/saaze-example' =&gt; array('/home/klm/php/saaze-example',1,'/blog'),
        '/vonhoff' =&gt; array('/home/klm/php/saaze-vonhoff',1),
        '/wendt' =&gt; array('/home/klm/php/saaze-wendt',1),
    );

    $query_string = isset($_SERVER['QUERY_STRING']) ? '/' . ltrim($_SERVER['QUERY_STRING'],'/') : '/blog';
    if ($query_string === '/') $query_string = '/blog';
    $dir = '/home/klm/php/sndsaaze';
    foreach ($blog as $prefix =&gt; $dirFlag) {	// linear search in blog[] array
        if (str_starts_with($query_string,$prefix)) {
            $dir = $dirFlag[0];
            if ($dirFlag[1]) {	// cut prefix and set rbase
                $query_string = substr($query_string,strlen($prefix));
                $GLOBALS['rbase'] = $prefix;
            }
            // Set default within the respective blog
            if (strlen($query_string) &lt;= 1 &amp;&amp; isset($dirFlag[2])) $query_string = $dirFlag[2];
            break;
        }
    }
    //if (!isset($dir)) { echo &quot;/srv/http/index.php: Not found in blog-array.\n&quot;; return; }

    // Composer is very slow, see https://eklausmeier.goip.de/blog/2023/10-29-simplified-saaze-monitored-with-phpspy
    require '/home/klm/php/sndsaaze/vendor/eklausme/saaze/CollectionArray.php';
    require '/home/klm/php/sndsaaze/vendor/eklausme/saaze/Collection.php';
    require '/home/klm/php/sndsaaze/vendor/eklausme/saaze/Config.php';
    require '/home/klm/php/sndsaaze/vendor/eklausme/saaze/Entry.php';
    require '/home/klm/php/sndsaaze/vendor/eklausme/saaze/MarkdownContentParser.php';
    require '/home/klm/php/sndsaaze/vendor/eklausme/saaze/Saaze.php';
    require '/home/klm/php/sndsaaze/vendor/eklausme/saaze/TemplateManager.php';

    (new \Saaze\Saaze($dir))-&gt;run($query_string);
</code></pre>
<p><strong>4. NGINX configuration for dynamic mode.</strong>
For above <code>index.php</code> to work, NGINX needs to have some <code>rewrite</code> rules.</p>
<pre class="line-numbers"><code class="language-ini">rewrite &quot;^/(jpilot|koehntopp|lemire|mobility|myrawest|nukeklaus|panorama|paternoster|vonhoff|wendt)/(assets|img|jscss|pagefind|pkg)/(.*)&quot;  &quot;/rewrite/saaze-$1/public/$2/$3&quot; last;
rewrite &quot;^/(saaze-example)/(.*)(\.ico|\.css)&quot;  &quot;/rewrite/$1/public/$2$3&quot; last;
rewrite &quot;^/(jpilot|paternoster)/(.*)(\.ico|\.css)&quot;     &quot;/rewrite/saaze-$1/public/$2$3&quot; last;
rewrite &quot;^/(|aux|blog|music|gallery|404\.html|feed\.xml|sitemap\.html|sitemap\.xml|jpilot|koehntopp|lemire|mobility|myrawest|nukeklaus|panorama|paternoster|saaze-example|vonhoff|wendt)($|/.*)&quot;  &quot;/index.php?$1$2&quot; last;
rewrite &quot;^/lemire(/*)$&quot; &quot;/lemire/blog/&quot; last;
rewrite &quot;^/(aux|blog|music|gallery|jpilot|koehntopp|lemire|mobility|myrawest|nukeklaus|panorama|paternoster|saaze-example|vonhoff|wendt)/(.*[^/])$&quot;  &quot;$1/$2/index.html&quot; last;
</code></pre>
<p>Add to these <code>rewrite</code> rules below symbolic links under <code>/srv/http</code>:</p>
<pre class="line-numbers"><code class="language-bash">$ /srv/http: ls -l rewrite
total 8
lrwxrwxrwx  1 klm  klm    27 Jun 18  2024 saaze-example -&gt; /home/klm/php/saaze-example/
lrwxrwxrwx  1 klm  klm    26 Aug 14  2023 saaze-jpilot -&gt; /home/klm/php/saaze-jpilot/
lrwxrwxrwx  1 klm  klm    29 Aug 14  2023 saaze-koehntopp -&gt; /home/klm/php/saaze-koehntopp/
lrwxrwxrwx  1 klm  klm    26 Dec 17  2023 saaze-lemire -&gt; /home/klm/php/saaze-lemire/
lrwxrwxrwx  1 klm  klm    28 Aug 14  2023 saaze-mobility -&gt; /home/klm/php/saaze-mobility/
lrwxrwxrwx  1 klm  klm    28 Nov 11  2024 saaze-myrawest -&gt; /home/klm/php/saaze-myrawest/
lrwxrwxrwx  1 klm  klm    29 Aug 14  2023 saaze-nukeklaus -&gt; /home/klm/php/saaze-nukeklaus/
lrwxrwxrwx  1 klm  klm    28 Aug 14  2023 saaze-panorama -&gt; /home/klm/php/saaze-panorama/
lrwxrwxrwx  1 klm  klm    31 Aug 14  2023 saaze-paternoster -&gt; /home/klm/php/saaze-paternoster/
lrwxrwxrwx  1 klm  klm    27 Aug 14  2023 saaze-vonhoff -&gt; /home/klm/php/saaze-vonhoff/
lrwxrwxrwx  1 klm  klm    25 Mar  7  2024 saaze-wendt -&gt; /home/klm/php/saaze-wendt/
lrwxrwxrwx  1 klm  klm    22 Aug 14  2023 sndsaaze -&gt; /home/klm/php/sndsaaze/
</code></pre>
<p><strong>5. Problem statement.</strong>
I received the following e-mail from Ahrefs:</p>
<p><img src="https://eklausmeier.goip.de/img/AhrefsTimedOut1.webp" alt="Photo"></p>
<p>The load time was larger than five seconds:</p>
<p><img src="https://eklausmeier.goip.de/img/AhrefsTimedOut2.webp" alt="Photo"></p>
<p>That's quite alarming.</p>
<p><a href="https://ahrefs.com">Ahrefs</a> is a valuable commercial offering to evaluate your web presence with regard to:</p>
<ol>
<li>backlinks</li>
<li>broken backlinks</li>
<li>site audits</li>
<li>outgoing links</li>
<li>performance</li>
<li>and many more</li>
</ol>
<p>They provide a free tier for hobbyists.
That's what I use and find very helpful.
Ahrefs is particularly remarkable as they <a href="https://eklausmeier.goip.de/blog/2023/04-22-website-checking-with-ahrefs">scan your website</a> <em>more frequently</em> than Google!</p>
<p><strong>6. OpCache trickery.</strong>
In return in <a href="https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.memory-consumption"><code>php.ini</code></a> I enlarged from 256M</p>
<pre class="line-numbers"><code class="language-ini">opcache.memory_consumption=512
</code></pre>
<p>I also activated in PHP-FPM's configuration file <code>php-fpm.d/www.conf</code> the slowlog option:</p>
<pre class="line-numbers"><code class="language-ini">slowlog = /var/log/nginx/$pool.log.slow
request_slowlog_timeout = 1
</code></pre>
<p>And, alas, this produced log entries like so:</p>
<pre class="line-numbers" data-line=3,7,11><code class="language-log">[19-Jul-2025 13:52:45]  [pool www] pid 38567
script_filename = /srv/http/index.php
[0x00007fed1f813100] run() /srv/http/index.php:47

[19-Jul-2025 13:52:58]  [pool www] pid 38568
script_filename = /srv/http/index.php
[0x00007fed1f813100] run() /srv/http/index.php:47

[19-Jul-2025 21:09:18]  [pool www] pid 52660
script_filename = /srv/http/index.php
[0x00007fed1f813100] run() /srv/http/index.php:47
</code></pre>
<p>Similar messages in PHP-FPM log:</p>
<pre class="line-numbers" data-line=2,6,11,16><code class="language-log">Jul 19 11:45:30 ryzen systemd[1]: Started The PHP FastCGI Process Manager.
Jul 19 13:52:45 ryzen php-fpm[38565]: [WARNING] [pool www] child 38567, script '/srv/http/index.php' (request: &quot;GET /index.php?blog/2025/07-14-stability-mountains-for-bdf6&quot;) executing too slow (1.067383 sec), logging
Jul 19 13:52:45 ryzen php-fpm[38565]: [NOTICE] child 38567 stopped for tracing
Jul 19 13:52:45 ryzen php-fpm[38565]: [NOTICE] about to trace 38567
Jul 19 13:52:45 ryzen php-fpm[38565]: [NOTICE] finished trace of 38567
Jul 19 13:52:58 ryzen php-fpm[38565]: [WARNING] [pool www] child 38568, script '/srv/http/index.php' (request: &quot;GET /index.php?blog/2025/07-14-stability-mountains-for-tendler7&quot;) executing too slow (1.160562 sec), logging
Jul 19 13:52:58 ryzen php-fpm[38565]: [NOTICE] child 38568 stopped for tracing
Jul 19 13:52:58 ryzen php-fpm[38565]: [NOTICE] about to trace 38568
Jul 19 13:52:58 ryzen php-fpm[38565]: [NOTICE] finished trace of 38568

Jul 19 21:09:18 ryzen php-fpm[38565]: [WARNING] [pool www] child 52660, script '/srv/http/index.php' (request: &quot;GET /index.php?feed.xml&quot;) executing too slow (1.209205 sec), logging
Jul 19 21:09:18 ryzen php-fpm[38565]: [NOTICE] child 52660 stopped for tracing
Jul 19 21:09:18 ryzen php-fpm[38565]: [NOTICE] about to trace 52660
Jul 19 21:09:18 ryzen php-fpm[38565]: [NOTICE] finished trace of 52660

Jul 20 04:17:53 ryzen php-fpm[38565]: [WARNING] [pool www] child 52660, script '/srv/http/index.php' (request: &quot;GET /index.php?wendt/sitemap.html&quot;) executing too slow (1.013112 sec), logging
Jul 20 04:17:53 ryzen php-fpm[38565]: [NOTICE] child 52660 stopped for tracing
Jul 20 04:17:53 ryzen php-fpm[38565]: [NOTICE] about to trace 52660
Jul 20 04:17:53 ryzen php-fpm[38565]: [NOTICE] finished trace of 52660
</code></pre>
<p>This was due to the following bots reading the blog:</p>
<pre class="line-numbers"><code class="language-log">147.135.128.94|19/Jul/2025:13:52:36 +0200|200|698|GET /robots.txt HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:37 +0200|200|106356|GET /blog/2025/07-14-stability-mountains-for-bdf3 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:40 +0200|200|137803|GET /blog/2025/07-14-stability-mountains-for-bdf4 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:41 +0200|200|162942|GET /blog/2025/07-14-stability-mountains-for-bdf5 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:45 +0200|200|189812|GET /blog/2025/07-14-stability-mountains-for-bdf6 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:47 +0200|200|94930|GET /blog/2025/07-14-stability-mountains-for-tendler3 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:49 +0200|200|133534|GET /blog/2025/07-14-stability-mountains-for-tendler4 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:51 +0200|200|163925|GET /blog/2025/07-14-stability-mountains-for-tendler5 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:54 +0200|200|186668|GET /blog/2025/07-14-stability-mountains-for-tendler6 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:52:58 +0200|200|214906|GET /blog/2025/07-14-stability-mountains-for-tendler7 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|
147.135.128.94|19/Jul/2025:13:53:00 +0200|200|109667|GET /blog/2025/07-14-stability-mountains-for-tischer3 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|klm.l5.ca:80|

17.241.75.159|13/Jul/2025:21:09:13 +0200|200|14206|GET /blog/2013/04-27-brian-koberlein-on-google-astronomy-blog HTTP/1.1|-|Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15 (Applebot/0.1; +http://www.apple.com/go/applebot)|klm.us.to:80|
184.73.68.20|15/Jul/2025:21:09:10 +0200|200|22987|GET /blog/2013/09-12-dramatic-faster-sorting-in-linux-using-nsort HTTP/1.1|-|Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36|149.172.93.57:443|on
54.157.84.74|15/Jul/2025:21:09:12 +0200|200|1331|GET /jpilot/blog/1999-05-23-this-site-goes-live HTTP/1.1|-|Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36|klm.ddns.net:443|on
34.227.234.246|15/Jul/2025:21:09:14 +0200|200|17473|GET /blog/2023/06-27-performance-remarks-on-publicomag-website HTTP/1.1|-|Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36|149.172.93.57:443|on
18.205.91.101|15/Jul/2025:21:09:17 +0200|200|14573|GET /music/2024/01-12-music-from-ricardo-castro HTTP/1.1|-|Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36|eklausmeier.mywire.org:443|on
3.208.146.193|15/Jul/2025:21:09:18 +0200|200|1419|GET /jpilot/blog/2021-04-02-fixed-bugs-and-crashes HTTP/1.1|-|Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36|149.172.93.57:443|on
23.23.180.225|16/Jul/2025:21:09:18 +0200|200|14201|GET /blog/2017 HTTP/1.1|-|Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot) Chrome/119.0.6045.214 Safari/537.36|klm.ix.tc:80|
194.233.171.60|17/Jul/2025:21:09:16 +0200|200|2184498|GET /feed.xml HTTP/2.0|-|Mozilla/5.0 (compatible; Miniflux/v2.2.10; +https://miniflux.app)|eklausmeier.goip.de:443|on
65.21.149.1|18/Jul/2025:21:09:16 +0200|200|2109321|GET /feed.xml HTTP/2.0|-|Mozilla/5.0 (compatible; Miniflux/v2.2.10; +https://miniflux.app)|eklausmeier.goip.de:443|on
80.71.159.94|19/Jul/2025:21:09:16 +0200|200|2109370|GET /feed.xml HTTP/2.0|-|Mozilla/5.0 (compatible; Miniflux/v2.2.10; +https://miniflux.app)|eklausmeier.goip.de:443|on

135.181.79.106|20/Jul/2025:04:17:51 +0200|200|214928|GET /blog/2025/07-14-stability-mountains-for-tendler7 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|eklausmeier.mywire.org:443|on
135.181.79.106|20/Jul/2025:04:17:54 +0200|200|109676|GET /blog/2025/07-14-stability-mountains-for-tischer3 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|eklausmeier.mywire.org:443|on
135.181.79.106|20/Jul/2025:04:17:56 +0200|200|131549|GET /blog/2025/07-14-stability-mountains-for-tischer4 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|eklausmeier.mywire.org:443|on
135.181.79.106|20/Jul/2025:04:17:59 +0200|200|160833|GET /blog/2025/07-14-stability-mountains-for-tischer5 HTTP/1.1|-|Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)|eklausmeier.mywire.org:443|on
</code></pre>
<p>This shows that quick successions of reads can trigger a <em>slow</em> response.</p>
<p>So, despite the OpCache trickery we have <em>sporadic</em> slow response times.</p>
<p><strong>7. Back to static files.</strong>
Above results lead to the conclusion that the dynamic mode of <a href="https://eklausmeier.goip.de/blog/2021/10-31-simplified-saaze"><em>Simplified Saaze</em></a> is not performant enough, when there are many large files involved.
The 17 new blog posts about <a href="https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-bdf1">stability mountains</a> triggered this.
But any other significant increase in data would have done the same.
So, my various static blogs are converted to static.</p>
<h2>B. Deployment scripts for static sites<a id=deploymentScripts></a></h2>
<p>Below are the very simple shell scripts to deploy each of the above static sites.
The <code>time</code> command included in those scripts is only for measuring how long it takes.</p>
<p><strong>1. My blog.</strong>
Shell script <code>blogdeploy</code>:</p>
<pre class="line-numbers" data-line=5,8><code class="language-bash">#!/bin/bash
# Automate the steps to deploy content from Saaze to my eklausmeier.goip.de blog

cd /home/klm/php/sndsaaze
time php saaze -mortb /tmp/build

cd /tmp/build
time pagefind -s . --exclude-selectors aside --exclude-selectors footer --force-language=en
ln -s blog/index.html

cd /srv/http
rm -rf oldblogs/klmblog/
mkdir -p oldblogs/klmblog
mv 404.html aux blog feed.xml gallery index.html music pagefind sitemap.html sitemap.xml oldblogs/klmblog/

cd /tmp/build
mv 404.html aux blog feed.xml gallery index.html music pagefind sitemap.html sitemap.xml /srv/http/
</code></pre>
<p><strong>2. J-Pilot.</strong>
Shell script <code>blogjpilotDeploy</code>:</p>
<pre class="line-numbers" data-line=5><code class="language-bash">#!/bin/bash
# Deploy J-Pilot website

cd /home/klm/php/saaze-jpilot
time RBASE=&quot;/jpilot&quot; php saaze -morb /tmp/build

cd /tmp/build
cp -pr /home/klm/php/saaze-jpilot/public/jpilot.css .
cp -pr /home/klm/php/saaze-jpilot/public/img .
cp -pr /home/klm/php/saaze-jpilot/public/pkg .
rm index.html
ln -s blog/index.html

cd /srv/http/
rm -rf oldblogs/jpilot/
mv jpilot/ oldblogs/
mv /tmp/build/ jpilot
</code></pre>
<p><strong>3. Koehntopp.</strong>
Shell script <code>blogkoehntoppDeploy</code>:</p>
<pre class="line-numbers" data-line=5,7><code class="language-bash">#!/bin/bash
# Deploy Kristian Koehntopp's blog

cd /home/klm/php/saaze-koehntopp/
time RBASE=&quot;/koehntopp&quot; php saaze -mrtb /tmp/build
cd /tmp/build
time pagefind -s . --exclude-selectors aside --exclude-selectors footer --force-language=en

cd /srv/http/
rm -rf oldblogs/koehntopp/
mv koehntopp/ oldblogs/
mv /tmp/build koehntopp
</code></pre>
<p><strong>4. Lemire.</strong>
Shell script <code>bloglemireDeploy</code>:</p>
<pre class="line-numbers" data-line=5,8><code class="language-bash">#!/bin/bash
# Deploy Daniel Lemire's blog, assuming static build is in /tmp/build

cd /home/klm/php/saaze-lemire/
time RBASE=&quot;/lemire&quot; php saaze -rmb /tmp/build

cd /tmp/build
time pagefind -s . --exclude-selectors aside --exclude-selectors footer --force-language=en
cp -pr /home/klm/php/saaze-lemire/public/jscss .
ln -s blog/index.html

cd /srv/http
rm -rf oldblogs/lemire/
mkdir -p oldblogs/lemire
mv lemire oldblogs/

mv /tmp/build/ /srv/http/lemire
</code></pre>
<p><strong>5. Mobility.</strong>
Shell script <code>blogmobilityDeploy</code>:</p>
<pre class="line-numbers" data-line=5><code class="language-bash">#!/bin/bash
# Deploy Mobility website

cd /home/klm/php/saaze-mobility
time RBASE=&quot;/mobility&quot; php saaze -morb /tmp/build

cd /tmp/build
cp -pr /home/klm/php/saaze-mobility/public/img .

cd /srv/http/
rm -rf oldblogs/mobility/
mv mobility/ oldblogs/
mv /tmp/build/ mobility
</code></pre>
<p><strong>6. Myra West.</strong>
Shell script <code>blogmyrawestDeploy</code>:</p>
<pre class="line-numbers" data-line=5,8><code class="language-bash">#!/bin/bash
# Deploy Myra West's blog

cd /home/klm/php/saaze-myrawest
time RBASE=&quot;/myrawest&quot; php saaze -morb /tmp/build

cd /tmp/build
time pagefind -s . --exclude-selectors aside --exclude-selectors footer --force-language=en
cp -pr /home/klm/php/saaze-myrawest/public/img .

cd /srv/http/
rm -rf oldblogs/myrawest/
mv myrawest/ oldblogs/
mv /tmp/build/ myrawest
</code></pre>
<p><strong>7. Nukeklaus.</strong>
Shell script <code>blognukeklausDeploy</code>:</p>
<pre class="line-numbers" data-line=5,8><code class="language-bash">#!/bin/bash
# Deploy nukeklaus's blog: build directory is in /tmp/build (for speed reasons)

cd /home/klm/php/saaze-nukeklaus/
time RBASE=&quot;/nukeklaus&quot; php saaze -mortb /tmp/build

cd /tmp/build
time pagefind -s . --exclude-selectors aside --exclude-selectors footer --force-language=de
cp -pr /home/klm/php/saaze-nukeklaus/public/img/ .

cd /srv/http
rm -rf oldblogs/nukeklaus/
mv nukeklaus/ oldblogs/
mv /tmp/build/ /srv/http/nukeklaus
</code></pre>
<p><strong>8. Panorama.</strong>
Shell script <code>blogpanoramaDeploy</code>:</p>
<pre class="line-numbers" data-line=5><code class="language-bash">#!/bin/bash
# Deploy Panorama's restaurant blog

cd /home/klm/php/saaze-panorama
time RBASE=&quot;/panorama&quot; php saaze -morb /tmp/build

cd /tmp/build
cp -pr /home/klm/php/saaze-panorama/public/img .

cd /srv/http
rm -rf oldblogs/panorama
mv panorama/ oldblogs/
mv /tmp/build/ panorama
</code></pre>
<p><strong>9. Paternoster.</strong>
Shell script <code>blogpaternosterDeploy</code>:</p>
<pre class="line-numbers" data-line=5><code class="language-bash">#!/bin/bash
# Deploy Paternoster's blog

cd /home/klm/php/saaze-paternoster
time RBASE=&quot;/paternoster&quot; php saaze -morb /tmp/build

cd /tmp/build
cp -pr /home/klm/php/saaze-paternoster/public/img .
cp -pr /home/klm/php/saaze-paternoster/public/paternoster.css .
ln -s posts/index.html

cd /srv/http
rm -rf oldblogs/paternoster
mv paternoster/ oldblogs/
mv /tmp/build/ /srv/http/paternoster
</code></pre>
<p><strong>10. Saaze-Example.</strong>
Shell script <code>blogsaazeexampleDeploy</code>:</p>
<pre class="line-numbers" data-line=5><code class="language-bash">#!/bin/bash
# Deploy Saaze-Example

cd /home/klm/php/saaze-example
time RBASE=&quot;/saaze-example&quot; php saaze -b /tmp/build

cd /tmp/build
rm index.html
ln -s blog/index.html
cp -p /home/klm/php/saaze-example/public/blogklm.css .

cd /srv/http/
rm -rf oldblogs/saaze-example/
mv saaze-example/ oldblogs/

mv /tmp/build/ saaze-example
</code></pre>
<p><strong>11. Vonhoff.</strong>
Shell script <code>blogvonhoffDeploy</code>:</p>
<pre class="line-numbers" data-loine=5><code class="language-bash">#!/bin/bash
# Deploy Dr. Rolf Vonhoff's blog: build directory is in /tmp/build (for speed reasons)

cd /home/klm/php/saaze-vonhoff/
time RBASE=&quot;/vonhoff&quot; php saaze -b /tmp/build
cp -pr public/img/ /tmp/build/

cd /srv/http
rm -rf oldblogs/vonhoff/
mv vonhoff/ oldblogs/
mv /tmp/build/ vonhoff
</code></pre>
<p><strong>12. Wendt.</strong>
Shell script <code>blogwendtDeploy</code>:</p>
<pre class="line-numbers" data-line=5,8><code class="language-bash">#!/bin/bash
# Deploy Wendt

cd /home/klm/php/saaze-wendt
time RBASE=&quot;/wendt&quot; php saaze -morb /tmp/build

cd /tmp/build
time pagefind -s . --exclude-selectors aside --exclude-selectors footer --force-language=de

cd /srv/http/
rm -rf oldblogs/wendt/
mv wendt/ oldblogs/
mv /tmp/build/ wendt
</code></pre>
<p><strong>13. All munged together.</strong></p>
<pre class="line-numbers"><code class="language-bash">#!/bin/bash
# Do all the blog deployments

time blogdeploy
time blogjpilotDeploy
time blogkoehntoppDeploy
time bloglemireDeploy
time blogmobilityDeploy
time blogmyrawestDeploy
time blognukeklausDeploy
time blogpanoramaDeploy
time blogpaternosterDeploy
time blogsaazeexampleDeploy
time blogvonhoffDeploy
time blogwendtDeploy
</code></pre>
<h2>C. Running deployment scripts<a id=runningDeployments></a></h2>
<p>Running the munged together scripts.</p>
<p>Runtime environment is Arch Linux as depicted in below table.</p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>CPU</td>
<td>AMD Ryzen 7 5700G</td>
</tr>
<tr>
<td>RAM</td>
<td>64 GB</td>
</tr>
<tr>
<td>OS</td>
<td>6.15.7-arch1-1 #1 SMP PREEMPT_DYNAMIC</td>
</tr>
<tr>
<td>PHP with JIT</td>
<td>PHP 8.4.10 (cli), Zend Engine v4.4.10 with Zend OPcache v8.4.10</td>
</tr>
<tr>
<td><em>Simplified Saaze</em></td>
<td>Version 2.5, 02-Dec-2024</td>
</tr>
</tbody>
</table>
<p><strong>1. My blog.</strong></p>
<pre class="line-numbers"><code class="language-bash">$ time blogAllDeploy | tee /tmp/blogAllDeploy.log
Building static site in /tmp/build...
        execute(): filePath=./content/error.yml, nSIentries=0, totalPages=0, entries_per_page=20
        execute(): filePath=./content/music.yml, nSIentries=89, totalPages=5, entries_per_page=20
        execute(): filePath=./content/gallery.yml, nSIentries=16, totalPages=1, entries_per_page=20
        execute(): filePath=./content/blog.yml, nSIentries=528, totalPages=27, entries_per_page=20
        execute(): filePath=./content/aux.yml, nSIentries=8, totalPages=1, entries_per_page=20
Finished creating 5 collections, 4 with index, and 676 entries (0.69 secs / 191.97MB)
#collections=5, parseEntry=0.0310/676-5, md2html=0.1314, toHtml=0.1347/676, renderEntry=0.1374/676, renderCollection=0.0040/38, content=676/0

real    0m0.718s
user    0m0.532s
sys     0m0.184s

Running Pagefind v1.3.0
Running from: &quot;/tmp/build&quot;
Source:       &quot;&quot;
Output:       &quot;pagefind&quot;

[Walking source directory]
Found 715 files matching **/*.{html}

[Parsing files]
Did not find a data-pagefind-body element on the site.
↳ Indexing all &lt;body&gt; elements on the site.

[Reading languages]
Discovered 1 language: en

[Building search indexes]
Total:
  Indexed 1 language
  Indexed 715 pages
  Indexed 51664 words
  Indexed 0 filters
  Indexed 0 sorts

Finished in 3.101 seconds

real    0m3.146s
user    0m2.731s
sys     0m0.552s

real    0m4.119s
user    0m3.274s
sys     0m0.977s
</code></pre>
<p><strong>2. J-Pilot.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=/home/klm/php/saaze-jpilot/content/pages.yml, nSIentries=0, totalPages=0, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-jpilot/content/doc.yml, nSIentries=10, totalPages=1, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-jpilot/content/blog.yml, nSIentries=18, totalPages=1, entries_per_page=20
Finished creating 3 collections, 3 with index, and 29 entries (0.01 secs / 1.2MB)
#collections=3, parseEntry=0.0005/29-3, md2html=0.0008, toHtml=0.0006/29, renderEntry=0.0008/29, renderCollection=0.0002/5, content=29/0

real    0m0.033s
user    0m0.018s
sys     0m0.014s

real    0m0.051s
user    0m0.022s
sys     0m0.029s
</code></pre>
<p><strong>3. Koehntopp.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=/home/klm/php/saaze-koehntopp/content/aux.yml, nSIentries=3, totalPages=1, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-koehntopp/content/posts.yml, nSIentries=964, totalPages=49, entries_per_page=20
Finished creating 2 collections, 2 with index, and 967 entries (0.16 secs / 23.82MB)
#collections=2, parseEntry=0.0187/967-2, md2html=0.0267, toHtml=0.0142/967, renderEntry=0.0248/967, renderCollection=0.0098/52, content=967/0

real    0m0.186s
user    0m0.133s
sys     0m0.052s

Running Pagefind v1.3.0
Running from: &quot;/tmp/build&quot;
Source:       &quot;&quot;
Output:       &quot;pagefind&quot;

[Walking source directory]
Found 1019 files matching **/*.{html}

[Parsing files]
Did not find a data-pagefind-body element on the site.
↳ Indexing all &lt;body&gt; elements on the site.

[Reading languages]
Discovered 1 language: en

[Building search indexes]
Total:
  Indexed 1 language
  Indexed 1019 pages
  Indexed 58550 words
  Indexed 0 filters
  Indexed 0 sorts

Finished in 4.394 seconds

real    0m4.459s
user    0m3.863s
sys     0m0.738s

real    0m4.880s
user    0m4.010s
sys     0m1.006s
</code></pre>
<p><strong>4. Lemire.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=/home/klm/php/saaze-lemire/content/blog.yml, nSIentries=2771, totalPages=139, entries_per_page=20
Finished creating 1 collections, 1 with index, and 4483 entries (0.52 secs / 95.75MB)
#collections=1, parseEntry=0.0673/4483-1, md2html=0.0904, toHtml=0.0576/4483, renderEntry=0.0563/4483, renderCollection=0.0128/140, content=4483/0

real    0m0.552s
user    0m0.358s
sys     0m0.190s

Running Pagefind v1.3.0
Running from: &quot;/tmp/build&quot;
Source:       &quot;&quot;
Output:       &quot;pagefind&quot;

[Walking source directory]
Found 4623 files matching **/*.{html}

[Parsing files]
Did not find a data-pagefind-body element on the site.
↳ Indexing all &lt;body&gt; elements on the site.

[Reading languages]
Discovered 1 language: en

[Building search indexes]
Total:
  Indexed 1 language
  Indexed 4623 pages
  Indexed 60265 words
  Indexed 0 filters
  Indexed 0 sorts

Finished in 11.176 seconds

real    0m11.351s
user    0m10.005s
sys     0m1.936s
        real 12.96s
        user 10.42s
        sys 0
        swapped 0
        total space 0
</code></pre>
<p><strong>5. Mobility.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=/home/klm/php/saaze-mobility/content/auxil.yml, nSIentries=21, totalPages=2, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-mobility/content/blog.yml, nSIentries=9, totalPages=1, entries_per_page=20
Finished creating 2 collections, 1 with index, and 31 entries (0.01 secs / 1.41MB)
#collections=2, parseEntry=0.0006/31-2, md2html=0.0008, toHtml=0.0014/31, renderEntry=0.0010/31, renderCollection=0.0002/2, content=31/0

real    0m0.033s
user    0m0.018s
sys     0m0.015s

real    0m0.068s
user    0m0.019s
sys     0m0.049s
</code></pre>
<p><strong>6. Myra West.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=./content/blog.yml, nSIentries=40, totalPages=2, entries_per_page=20
Finished creating 1 collections, 1 with index, and 41 entries (0.01 secs / 3.07MB)
#collections=1, parseEntry=0.0009/41-1, md2html=0.0016, toHtml=0.0017/41, renderEntry=0.0018/41, renderCollection=0.0002/3, content=41/0

real    0m0.036s
user    0m0.023s
sys     0m0.013s

Running Pagefind v1.3.0
Running from: &quot;/tmp/build&quot;
Source:       &quot;&quot;
Output:       &quot;pagefind&quot;

[Walking source directory]
Found 45 files matching **/*.{html}

[Parsing files]
1 page found without an &lt;html&gt; element.
Pages without an outer &lt;html&gt; element will not be processed by default.
If adding this element is not possible, use the root selector config to target a different root element.
Did not find a data-pagefind-body element on the site.
↳ Indexing all &lt;body&gt; elements on the site.
  * &quot;/sitemap.html&quot; has no &lt;html&gt; element

[Reading languages]
Discovered 1 language: en

[Building search indexes]
Total:
  Indexed 1 language
  Indexed 44 pages
  Indexed 3158 words
  Indexed 0 filters
  Indexed 0 sorts

Finished in 0.236 seconds

real    0m0.244s
user    0m0.212s
sys     0m0.039s

real    0m0.305s
user    0m0.238s
sys     0m0.074s
</code></pre>
<p><strong>7. Nukeklaus.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=/home/klm/php/saaze-nukeklaus/content/aux.yml, nSIentries=4, totalPages=1, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-nukeklaus/content/blog.yml, nSIentries=164, totalPages=9, entries_per_page=20
Finished creating 2 collections, 1 with index, and 178 entries (0.05 secs / 11.2MB)
#collections=2, parseEntry=0.0048/178-2, md2html=0.0055, toHtml=0.0063/178, renderEntry=0.0110/178, renderCollection=0.0013/10, content=178/0

real    0m0.079s
user    0m0.055s
sys     0m0.023s

Running Pagefind v1.3.0
Running from: &quot;/tmp/build&quot;
Source:       &quot;&quot;
Output:       &quot;pagefind&quot;

[Walking source directory]
Found 189 files matching **/*.{html}

[Parsing files]
Did not find a data-pagefind-body element on the site.
↳ Indexing all &lt;body&gt; elements on the site.

[Reading languages]
Discovered 1 language: de

[Building search indexes]
Total:
  Indexed 1 language
  Indexed 189 pages
  Indexed 23135 words
  Indexed 0 filters
  Indexed 0 sorts

Finished in 1.556 seconds

real    0m1.578s
user    0m1.370s
sys     0m0.225s

real    0m1.715s
user    0m1.430s
sys     0m0.301s
</code></pre>
<p><strong>8. Panorama.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=/home/klm/php/saaze-panorama/content/auxil.yml, nSIentries=2, totalPages=1, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-panorama/content/blog.yml, nSIentries=8, totalPages=1, entries_per_page=20
Finished creating 2 collections, 2 with index, and 10 entries (0.01 secs / 745kB)
#collections=2, parseEntry=0.0002/10-2, md2html=0.0002, toHtml=0.0013/10, renderEntry=0.0006/10, renderCollection=0.0001/4, content=10/0

real    0m0.030s
user    0m0.017s
sys     0m0.013s

real    0m0.068s
user    0m0.021s
sys     0m0.046s
</code></pre>
<p><strong>9. Paternoster.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=/home/klm/php/saaze-paternoster/content/aux.yml, nSIentries=3, totalPages=1, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-paternoster/content/posts.yml, nSIentries=210, totalPages=11, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-paternoster/content/notes.yml, nSIentries=470, totalPages=10, entries_per_page=50
        execute(): filePath=/home/klm/php/saaze-paternoster/content/links.yml, nSIentries=249, totalPages=5, entries_per_page=50
Finished creating 4 collections, 4 with index, and 932 entries (0.08 secs / 6.56MB)
#collections=4, parseEntry=0.0149/936-4, md2html=0.0074, toHtml=0.0041/932, renderEntry=0.0113/932, renderCollection=0.0044/31, content=932/0

real    0m0.105s
user    0m0.065s
sys     0m0.040s

real    0m0.241s
user    0m0.073s
sys     0m0.166s
</code></pre>
<p><strong>10. Saaze-Example.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /srv/http/saaze-example...
        execute(): filePath=/home/klm/php/saaze-example/content/auxil.yml, nSIentries=0, totalPages=0, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-example/content/music.yml, nSIentries=11, totalPages=1, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-example/content/blog.yml, nSIentries=35, totalPages=2, entries_per_page=20
Finished creating 3 collections, 3 with index, and 47 entries (0.01 secs / 882kB)
#collections=3, parseEntry=0.0006/47-3, md2html=0.0003, toHtml=0.0006/47, renderEntry=0.0007/47, renderCollection=0.0005/6, content=47/0

real    0m0.035s
user    0m0.021s
sys     0m0.013s
        real 0.04s
        user 0.02s
        sys 0
        swapped 0
        total space 0
</code></pre>
<p><strong>11. Vonhoff.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=/home/klm/php/saaze-vonhoff/content/blog.yml, nSIentries=4, totalPages=1, entries_per_page=20
        execute(): filePath=/home/klm/php/saaze-vonhoff/content/auxil.yml, nSIentries=1, totalPages=1, entries_per_page=20
Finished creating 2 collections, 2 with index, and 5 entries (0.01 secs / 745kB)
#collections=2, parseEntry=0.0001/5-2, md2html=0.0004, toHtml=0.0030/5, renderEntry=0.0004/5, renderCollection=0.0002/4, content=5/0

real    0m0.030s
user    0m0.018s
sys     0m0.012s

real    0m0.043s
user    0m0.019s
sys     0m0.024s
</code></pre>
<p><strong>12. Wendt.</strong></p>
<pre class="line-numbers"><code class="language-bash">Building static site in /tmp/build...
        execute(): filePath=./content/alexander.yml, nSIentries=770, totalPages=39, entries_per_page=20
        execute(): filePath=./content/alte-weise.yml, nSIentries=131, totalPages=7, entries_per_page=20
        execute(): filePath=./content/archi-bechlenberg.yml, nSIentries=5, totalPages=1, entries_per_page=20
        execute(): filePath=./content/bernd-zeller.yml, nSIentries=332, totalPages=17, entries_per_page=20
        execute(): filePath=./content/cora-stephan.yml, nSIentries=1, totalPages=1, entries_per_page=20
        execute(): filePath=./content/david-berger.yml, nSIentries=1, totalPages=1, entries_per_page=20
        execute(): filePath=./content/fake-news.yml, nSIentries=28, totalPages=2, entries_per_page=20
        execute(): filePath=./content/film.yml, nSIentries=1, totalPages=1, entries_per_page=20
        execute(): filePath=./content/hansjoerg-mueller.yml, nSIentries=2, totalPages=1, entries_per_page=20
        execute(): filePath=./content/hausbesuch.yml, nSIentries=2, totalPages=1, entries_per_page=20
        execute(): filePath=./content/joerg-friedrich.yml, nSIentries=2, totalPages=1, entries_per_page=20
        execute(): filePath=./content/mag.yml, nSIentries=1235, totalPages=62, entries_per_page=20
        execute(): filePath=./content/matthias-matussek.yml, nSIentries=1, totalPages=1, entries_per_page=20
        execute(): filePath=./content/medien-kritik.yml, nSIentries=123, totalPages=7, entries_per_page=20
        execute(): filePath=./content/politik-gesellschaft.yml, nSIentries=486, totalPages=25, entries_per_page=20
        execute(): filePath=./content/redaktion.yml, nSIentries=112, totalPages=6, entries_per_page=20
        execute(): filePath=./content/samuel-horn.yml, nSIentries=3, totalPages=1, entries_per_page=20
        execute(): filePath=./content/spreu-weizen.yml, nSIentries=596, totalPages=30, entries_per_page=20
        execute(): filePath=./content/wolfram-ackner.yml, nSIentries=6, totalPages=1, entries_per_page=20
Finished creating 19 collections, 19 with index, and 1248 entries (5.16 secs / 1.82GB)
#collections=19, parseEntry=0.7782/23712-19, md2html=1.2083, toHtml=1.2890/23712, renderEntry=0.1177/1248, renderCollection=0.0420/224, content=23712/0

real    0m5.193s
user    0m4.426s
sys     0m0.734s

Running Pagefind v1.3.0
Running from: &quot;/tmp/build&quot;
Source:       &quot;&quot;
Output:       &quot;pagefind&quot;

[Walking source directory]
Found 1473 files matching **/*.{html}

[Parsing files]
Did not find a data-pagefind-body element on the site.
↳ Indexing all &lt;body&gt; elements on the site.

[Reading languages]
Discovered 1 language: de

[Building search indexes]
Total:
  Indexed 1 language
  Indexed 1473 pages
  Indexed 133262 words
  Indexed 0 filters
  Indexed 0 sorts

Finished in 18.948 seconds

real    0m19.155s
user    0m17.431s
sys     0m1.890s

real    0m24.780s
user    0m21.878s
sys     0m3.027s
</code></pre>
<p>The total runtime.</p>
<pre class="line-numbers"><code class="language-bash">        real 49.78s
        user 41.82s
        sys 0
        swapped 0
        total space 0

        real 49.77s
        user 0.00s
        sys 0
        swapped 0
        total space 0
</code></pre>
<h2>D. NGINX configuration<a id=nginx></a></h2>
<p>All the <code>rewrite</code> rules, which were in place to generate HTML on the fly, can now be removed.
I added one <code>rewrite</code> rule to <em>not</em> to redirect to the URL with a slash appended.
This spares one roundtrip due to a HTTP 301 return code.</p>
<pre class="line-numbers" data-line=59-60,146-147><code class="language-ini"># NGINX configuration for chieftec
# Elmar Klausmeier, 22-Aug-2023
# Elmar Klausmeier, 21-Jul-2025

#user http;
worker_processes  1;

error_log  /var/log/nginx/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

load_module /usr/lib/nginx/modules/ngx_http_brotli_filter_module.so;
load_module /usr/lib/nginx/modules/ngx_http_brotli_static_module.so;


events {
    worker_connections  1024;
}


http {
    root   /srv/http;
    index  index.html;
    client_max_body_size 15900M;

    http2 on;
    gzip  on;
    brotli on;
    brotli_comp_level 10;
    brotli_types application/xml image/svg+xml text/css text/csv text/javascript text/markdown text/plain text/vcard text/xml application/rss+xml;
    gzip_types application/xml image/svg+xml text/css text/csv text/javascript text/markdown text/plain text/vcard text/xml application/rss+xml;

    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; '
    #                  '$status $body_bytes_sent &quot;$http_referer&quot; '
    #                  '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';
    log_format hiawatha_format '$remote_addr|$time_local|$status|$bytes_sent|$request|$http_referer|$http_user_agent|$host:$server_port|$https';

    access_log  /var/log/nginx/access.log hiawatha_format;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    http3 on;
    http3_hq on;
    types_hash_max_size 4096;

    server {
        listen       80;
        server_name  localhost;

    #  Umkehrung von https://timmehosting.de/blog/nginx-trailing-slash-zu-urls-hinzufuegen-rewrite-rule
    rewrite &quot;^/(aux|blog|music|gallery|jpilot|koehntopp|lemire|mobility|myrawest|nukeklaus|panorama|paternoster|saaze-example|vonhoff|wendt)(/*|[^\.]*[^/])$&quot;  &quot;/$1/$2/index.html&quot; last;

    #charset koi8-r;
        #error_page  404              /rewrite/sndsaaze/public/index.php?/404.html;

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        location ~ \.(jpg|jpeg|png|webp|mp4|pdf)$ {
            add_header Cache-Control &quot;public, max-age=7776000&quot;;
    }

        location ~ \.php$ {
            try_files $fastcgi_script_name =404;

            # default fastcgi_params
            include fastcgi_params;

            # fastcgi settings
            fastcgi_pass			unix:/run/php-fpm/php-fpm.sock;
        #fastcgi_index			index.php;
            fastcgi_buffers			8 16k;
            fastcgi_buffer_size		32k;

            # fastcgi params
            fastcgi_param DOCUMENT_ROOT	$realpath_root;
            fastcgi_param SCRIPT_FILENAME	$realpath_root$fastcgi_script_name;
        }

        location ~ ^/ttyd(.*)$ {
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection &quot;upgrade&quot;;
        proxy_pass http://eklausmeier.goip.de:7681/$1;
        #proxy_pass http://84.119.108.23:7681/$1;
        }
        location ~ ^/nucttyd(.*)$ {
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection &quot;upgrade&quot;;
            proxy_pass http://192.168.0.24:7681/$1;
        }
    }


    # HTTPS server
    #
    server {
        listen       443 quic;
    listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /etc/letsencrypt/live/eklausmeier.goip.de-0002/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/eklausmeier.goip.de-0002/privkey.pem;

    # From https://blog.qualys.com/product-tech/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers &quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

        #location / {
            # used to advertise the availability of HTTP/3
            add_header Alt-Svc 'h3=&quot;:443&quot;; ma=86400';
        #}

    # Umkehrung von  https://timmehosting.de/blog/nginx-trailing-slash-zu-urls-hinzufuegen-rewrite-rule
    rewrite &quot;^/(aux|blog|music|gallery|jpilot|koehntopp|lemire|mobility|myrawest|nukeklaus|panorama|paternoster|saaze-example|vonhoff|wendt)(/*|[^\.]*[^/])$&quot;  &quot;/$1/$2/index.html&quot; last;

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location ~ \.(jpg|jpeg|png|webp|mp4|pdf)$ {
            add_header Cache-Control &quot;public, max-age=7776000&quot;;
    }

        location ~ \.php$ {
            try_files $fastcgi_script_name =404;

            # default fastcgi_params
            include fastcgi_params;

            # fastcgi settings
            fastcgi_pass			unix:/run/php-fpm/php-fpm.sock;
        #fastcgi_index			index.php;
            fastcgi_buffers			8 16k;
            fastcgi_buffer_size		32k;

            # fastcgi params
            fastcgi_param DOCUMENT_ROOT	$realpath_root;
            fastcgi_param SCRIPT_FILENAME	$realpath_root$fastcgi_script_name;
        }

        location ~ ^/ttyd(.*)$ {
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection &quot;upgrade&quot;;
            proxy_pass http://eklausmeier.goip.de:7681/$1;
        }
        location ~ ^/nucttyd(.*)$ {
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection &quot;upgrade&quot;;
            proxy_pass http://192.168.0.24:7681/$1;
        }
    }

}
</code></pre>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-19-asrock-deskmeet-x300-with-amd-ryzen-5700g</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-19-asrock-deskmeet-x300-with-amd-ryzen-5700g</guid>
		<title>ASRock DeskMini X300 with AMD Ryzen 5700G</title>
		<category>CPU</category>
		<category>hardware</category>
		<pubDate>Sat, 19 Jul 2025 18:00:00 +0200</pubDate>
		<description><![CDATA[
<p>I ordered the following parts from Mindfactory and Amazon.</p>
<table>
<thead>
<tr>
<th>Part</th>
<th>#</th>
<th align="right">EUR</th>
</tr>
</thead>
<tbody>
<tr>
<td>ASRock <a href="https://www.asrock.com/nettop/AMD/DeskMini%20X300%20Series/index.us.asp">DeskMini X300</a> AM4</td>
<td>1</td>
<td align="right">140.98</td>
</tr>
<tr>
<td>AMD Ryzen 7 5700G 8x 3.80GHz So.AM4 BOX</td>
<td>1</td>
<td align="right">134.99</td>
</tr>
<tr>
<td>1TB Crucial E100 M.2 2280 PCIe 4.0 x4 3D-NAND QLC (CT1000E100SSD8)</td>
<td>1</td>
<td align="right">54.89</td>
</tr>
<tr>
<td>Crucial RAM CT2K32G4SFD832A 64GB (2x32GB) DDR4 3200MHz CL22 (2933MHz oder 2666MHz) Laptop Arbeitsspeicher Kit</td>
<td>1</td>
<td align="right">125.11</td>
</tr>
<tr>
<td><strong>Sum</strong></td>
<td></td>
<td align="right"><strong>455.97</strong></td>
</tr>
</tbody>
</table>
<p>Compare this with the &quot;previous&quot; model <a href="https://eklausmeier.goip.de/blog/2020/07-07-asrock-deskmini-a300m-with-amd-ryzen-3400g">ASRock A300M with Ryzen 3400G</a>, which I bought five years ago and costed twice as much.
More so, the 3400G only has half the cores of the 5700G.</p>
<p><a href="https://www.pcgameshardware.de/CPU-CPU-154106/News/AMD-dominiert-die-CPU-Verkaufzahlen-1476777/">PCGH</a> wrote:</p>
<blockquote>
<p>CPU-Monopol: AMD übernimmt Mindfactory nahezu vollständig</p>
<p>Die aktuellen CPU-Verkaufszahlen des deutschen Online-Händlers <a href="https://www.pcgameshardware.de/mindFactory-Firma-220667/">Mindfactory</a>, welche wie gewohnt von <a href="https://x.com/TechEpiphanyYT/status/1942650430703522085">TechEpiphany</a> über X - vormals Twitter - veröffentlicht wurden, verdeutlichen die Dominanz von AMDs Ryzen-Prozessoren. Im DIY-Geschäft beläuft sich der CPU-Marktanteil von AMD bei Mindfactory auf mehr als 95 Prozent, während rund 97 Prozent der CPU-Umsätze auf Zen-Prozessoren entfallen. Damit erreicht AMDs &quot;CPU-Monopol&quot; auf Mindfactory jetzt einen neuen Rekordstand.</p>
</blockquote>
<h2>1. Hardware setup</h2>
<p>On 12-Jul-2025 the packets arrived.</p>
<p><img src="https://eklausmeier.goip.de/img/ASRockX300-01.webp" alt="Photo"></p>
<p>The AMD Ryzen 5700G CPU.</p>
<p><img src="https://eklausmeier.goip.de/img/ASRockX300-02.webp" alt=""></p>
<p>Mounted the CPU on the board.</p>
<p><img src="https://eklausmeier.goip.de/img/ASRockX300-03.webp" alt=""></p>
<p>Inserted SODIMM modules.</p>
<p><img src="https://eklausmeier.goip.de/img/ASRockX300-04.webp" alt="Photo"></p>
<p>Inserted harddrive and CPU fan.</p>
<p><img src="https://eklausmeier.goip.de/img/ASRockX300-05.webp" alt="Photo"></p>
<p>Booting into BIOS.</p>
<p><img src="https://eklausmeier.goip.de/img/ASRockX300-06.webp" alt="Photo"></p>
<p>Comparison to typical smartphone standing next to the entire ASRock.</p>
<p><img src="https://eklausmeier.goip.de/img/ASRockX300-08.webp" alt="Photo"></p>
<p>With a wattmeter I checked the power consumption: it is 9-10 Watts in idle mode.
That's exactly what was expected.</p>
<h2>2. Installation of Arch Linux</h2>
<p><strong>1. Installation.</strong> I followed my own blog posts:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2022/05-02-copy-archlinux-to-ssd">Copy Arch Linux to SSD</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2014/06-01-setting-up-luksdm-crypt-for-external-usb-drive">Setting-Up LUKS/dm-crypt for External USB-Drive</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2020/08-29-configure-boot-settings-in-uefi">Configure boot settings in UEFI</a></li>
</ol>
<p>The hard drive is partitioned using <a href="https://man.archlinux.org/man/gparted.8"><code>gparted</code></a> into 750MB FAT32 (vfat) and the rest for LUKS, which hosts ext4.</p>
<p>UEFI was setup using <a href="https://man.archlinux.org/man/efibootmgr.8"><code>efibootmgr</code></a>.
UEFI shell is <a href="https://archlinux.org/packages/extra/any/edk2-shell/"><code>/usr/share/edk2-shell/x64/Shell_Full.efi</code></a>.</p>
<p>Forgetting to sym-link <code>sbin</code> results in:</p>
<p><img src="https://eklausmeier.goip.de/img/ASRockX300-07.webp" alt="Photo"></p>
<p><strong>1. Booting via ssh.</strong>
To boot the machine from remote use the following <code>HOOKS</code> line in <code>mkinitcpio.conf</code>:</p>
<pre><code class="language-ini">HOOKS=&quot;base udev block keymap keyboard autodetect consolefont modconf netconf dropbear encryptssh filesystems fsck&quot;
</code></pre>
<p>Modules <code>netconf</code> is in Arch Linux package <code>mkinitcpio-netconf</code>.
<code>encryptssh</code> is contained in package  <code>mkinitcpio-utils</code>.</p>
<p><strong>2. <code>xdm</code> annoyances.</strong>
File <code>initramfs-linux.img</code> needs <code>amdgpu</code> and <code>radeon</code> drivers included via <code>MODULES</code> in <code>mkinitcpio.conf</code>.</p>
<pre><code class="language-ini">MODULES=(amdgpu radeon)
</code></pre>
<p>After that run <code>mkinitcpio -p linux</code>.
Without that <code>xdm</code> would not start automatically via systemd.</p>
<p>I would normally set keyboard and deadkey handling directly in <code>/etc/X11/xorg.conf.d/00-keyboard.conf</code>:</p>
<pre><code class="language-ini">Section &quot;InputClass&quot;
        Identifier &quot;system-keyboard&quot;
        MatchIsKeyboard &quot;on&quot;
        Option &quot;XkbLayout&quot; &quot;de&quot;
        Option &quot;XkbVariant&quot; &quot;nodeadkeys&quot;
EndSection
</code></pre>
<p>In this case I used the <code>setxkbmap</code> command in <code>.xinitrc</code>:</p>
<pre><code class="language-bash">setxkbmap -layout de -variant nodeadkeys
</code></pre>
<p>In doing so, every user can individually set his language preferences.</p>
<p>Install <code>glxgears</code> via</p>
<pre><code class="language-bash">pacman -S mesa-utils
</code></pre>
<p><strong>3. Disable pipewire.</strong>
I noticed that pulseaudio and pipewire in combination to not work together.
So I disabled pipewire.</p>
<pre><code class="language-bash">systemctl --global mask pipewire
systemctl --global mask pipewire.socket
</code></pre>
<p>Unfortunately, pipewire cannot be easily uninstalled.</p>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-donelson-hansen1-6</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-donelson-hansen1-6</guid>
		<title>Stability Mountains for Donelson &amp; Hansen 1-6</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:41:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/07-06-stability-regions-for-mihelcics-formulas">Stability Regions for Mihelčić's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/07-09-stability-regions-for-donelson-hansen-formulas">Stability Regions for Donelson and Hansen Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">rm /tmp/x9; for i in 1 2 3 4 5 6; do stabregion2 -f DonelsonHansen$i -o3 -r140 -L500 &gt;&gt; /tmp/x9; done
</code></pre>
<p>Honestly, all charts look weird.</p>
<p>Donelson &amp; Hansen 1:</p>
<div id="container_DonelsonHansen1" class="chartarea"></div>
<p>Donelson &amp; Hansen 2:</p>
<div id="container_DonelsonHansen2" class="chartarea"></div>
<p>Donelson &amp; Hansen 3:</p>
<div id="container_DonelsonHansen3" class="chartarea"></div>
<p>Donelson &amp; Hansen 4:</p>
<div id="container_DonelsonHansen4" class="chartarea"></div>
<p>Donelson &amp; Hansen 5:</p>
<div id="container_DonelsonHansen5" class="chartarea"></div>
<p>Donelson &amp; Hansen 6:</p>
<div id="container_DonelsonHansen6" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-mihelcics-formulas</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-mihelcics-formulas</guid>
		<title>Stability Mountains for Mihelčić's Formulas</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:34:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/07-06-stability-regions-for-mihelcics-formulas">Stability Regions for Mihelčić's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/07-09-stability-regions-for-donelson-hansen-formulas">Stability Regions for Donelson and Hansen Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -m4 -o3 -r50
stabregion -m5 -o3 -r30
stabregion -m6 -o3 -r26
stabregion -m7 -o3 -r30
</code></pre>
<p>Mihelcic4:</p>
<div id="container_Mihelcic4" class="chartarea"></div>
<p>Mihelcic5:</p>
<div id="container_Mihelcic5" class="chartarea"></div>
<p>Mihelcic6:</p>
<div id="container_Mihelcic6" class="chartarea"></div>
<p>Mihelcic7:</p>
<div id="container_Mihelcic7" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer8</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer8</guid>
		<title>Stability Mountains for Tischer8</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:28:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -s8 -o3 -r600
</code></pre>
<p>Tischer8:</p>
<div id="container_Tischer8" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer7</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer7</guid>
		<title>Stability Mountains for Tischer7</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:27:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -s7 -o3 -r600
</code></pre>
<p>Tischer7:</p>
<div id="container_Tischer7" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer6</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer6</guid>
		<title>Stability Mountains for Tischer6</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:26:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -s6 -o3 -r600
</code></pre>
<p>Tischer6:</p>
<div id="container_Tischer6" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer5</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer5</guid>
		<title>Stability Mountains for Tischer5</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:25:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -s5 -o3 -r600
</code></pre>
<p>Tischer5:</p>
<div id="container_Tischer5" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer4</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer4</guid>
		<title>Stability Mountains for Tischer4</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:24:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -s4 -o3 -r600
</code></pre>
<p>Tischer4:</p>
<div id="container_Tischer4" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer3</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tischer3</guid>
		<title>Stability Mountains for Tischer3</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:23:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -s3 -o3 -r600
</code></pre>
<p>Tischer3:</p>
<div id="container_Tischer3" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tendler7</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tendler7</guid>
		<title>Stability Mountains for Tendler7</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:17:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -t7 -o3 -r600
</code></pre>
<p>Tendler7:</p>
<div id="container_Tendler7" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tendler6</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tendler6</guid>
		<title>Stability Mountains for Tendler6</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:16:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -t6 -o3 -r600
</code></pre>
<p>Tendler6:</p>
<div id="container_Tendler6" class="chartarea"></div>

		]]></description>
	</item>
	<item>
		<link>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tendler5</link>
		<guid>https://eklausmeier.goip.de/blog/2025/07-14-stability-mountains-for-tendler5</guid>
		<title>Stability Mountains for Tendler5</title>
		<category>mathematics</category>
		<pubDate>Mon, 14 Jul 2025 18:15:00 +0200</pubDate>
		<description><![CDATA[
<p>Beware, this three-dimensional graphic needs some time to load. You can rotate the graphic around any axis.</p>
<p>This is in continuation of:</p>
<ol>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-01-stability-regions-for-bdf-and-tendlers-formulas">Stability Regions for BDF and Tendler's Formulas</a></li>
<li><a href="https://eklausmeier.goip.de/blog/2025/06-19-stability-regions-for-tischers-formulas">Stability Regions for Tischer's Formulas</a></li>
</ol>
<p>Below is the output of:</p>
<pre><code class="language-bash">stabregion -t5 -o3 -r600
</code></pre>
<p>Tendler5:</p>
<div id="container_Tendler5" class="chartarea"></div>

		]]></description>
	</item>
</channel>
</rss>
