Parametrische Spline-Interpolation

Eine Spline-Interpolation, wie ich sie in Kubischer Spline veröffentlicht habe, hat den Nachteil, dass die Werte auf der Abszisse streng monoton steigend sein müssen. Schon im Falle eines einzigen übereinander liegenden Paares versagt die dort angewendete Mathematik wegen unendlicher Steigung. Die Lösung ist die Einführung eines Parameters. Angeregt von Professor Scheibls Spline-Interpolation im 2D wurde also die benötige tridiagonale Matrix auf Ordinate und Abszisse angewendet. Alle dafür nötigen Berechnungen wurden, soweit sie auf dem Tabellenblatt nicht notwendigerweise ersichtlich sein müssen, mittels Namen umgesetzt. Die Begrenzung eines Namens auf 255 Zeichen erzwang für Matrix und beide Vektoren eine entsprechende Aufteilung. Matrix “M” und Vektor “V” nutzen für die Funktion INDEX (vorteilhaft nicht volatil und als Bezugsversion verwendet) das “very hidden” Tabellenblatt “X”, damit bei einem eventuellen Umbau wegen gelöschter Zeilen oder/und Spalten keine Bezugsprobleme auftreten können.
Im Prinzip handelt es sich um eine Weiterentwicklung von Kubischer Spline mit folgenden Unterschieden:

  • x-Werte können nun beliebig gewählt werden
  • Für einen “runden” Verlauf im Diagramm sorgt jetzt die dafür erweiterte benutzerdefinierte Funktion SPLINE(X_Werte; S_Werte; Xs_Werte; Ss_Werte; [n_ZW]). Xs_Werte und Ss_Werte sind die Ableitungen nach dem Parameter, die via Namen berechnet werden.
  • Die Abfrage kann jetzt wahlweise für x- oder S(x)-Werte durchgeführt werden
  • Die Werte dafür werden von der benutzerdefinierten Funktion SPLINE_VAL(x; Sx; xs; Ssx; Wert; [Art]; [Aufsteigend]) geliefert. Wert ist die Basis der Abfrage, mit Art (optional mit Default = “x”) und aufsteigender Sortierung (optional mit Default = WAHR).
  • Für den Typ “periodisch” werden nun gleiche Ordinaten und Abszissen der Endpunkte vorausgesetzt, d. h. eine Bedingte Formatierung streicht die Wahl bei Nichterfüllung durch.

Der Vorteil eines parametrischen Splines wird beispielhaft sehr schön anhand einer verschlungenen geschlossen Figur gezeigt. Die Microsoft’sche Methode des Glättens kommt in solchen Fällen leider noch schlechter weg! Das Eck bei geschlossenen Figuren lässt sich überdies nur durch Tricksereien über eng benachbarte Punkte vermeiden.
Natürlich wäre es unsinnig zu erwarten, dass diese Methode bei sehr vielen Punkten angewendet werden würde! Aber dafür dürfte ich aus heutiger Sicht schon ein deutlich einfacheres und trotzdem funktionierendes Prinzip für eine Näherung mit den zwei Nachbarpunkten gefunden haben.
Bis zu dessen Veröffentlichung wünsche ich viel Freude mit der folgenden Datei:

PS: Die beim Öffnen auftretende Fehlermeldung ist scheinbar unvermeidlich.

Kubischer Spline

Eine substantielle Verbesserung der Option “Linie glätten” (engl. “Smoothed line”), der ich mich immer noch widme, hängt an einer Modifikation der Definition der Steigung. Dass diese insbesondere an den Enden verbesserungswürdig ist, habe ich in Linie glätten 3 dargelegt. Die Straklatte stellt für mich dafür den Idealfall dar. Wenn man dies für eine Funktion erfüllen will, dann drängt sich der kubische Spline förmlich auf!
Bei meinen Recherchen traf ich auf Arndt Brünners Kubische Splines. Erklärung und Herleitung haben mich gefesselt! Der Rechner als Java-Applet lädt zum Spielen ein, wobei augenscheinlich deutlich wird, dass die Veränderung jedes Punktes logischerweise Auswirkungen auf den gesamten Spline hat. Der Einfluss ebbt allerdings mit der Entfernung deutlich ab. Es könnte also sehr wohl zielführend sein, “nur” die beiden unmittelbaren Nachbarpunkte zur Definition der Steigung heranzuziehen. Im Gegensatz zu Microsoft nehme man aber nicht den “simplen” Richtungsvektor durch diese beiden Punkte, sondern einen “viferen” kubischen Spline, der durch die 3 Punkte die simpelste Variante einer Straklatte darstellt.
Professor Brünner hat den natürlichen Spline umgesetzt, der in den Endpunkten die Krümmung = 0 aufweist, wobei er beliebige Eingaben der 2. Ableitung offeriert. Ich wollte aber auch Steigungen vorgeben können, was zum vollständigen Spline führt. Überdies wäre es für den periodischen Fall nötig, dass die Endpunkte gleiche 1. und 2. Ableitung aufweisen.
Die folgende Excel-Datei enthält die Berechnung eines kubischen Splines für bis zu max. 52 Knoten {x, S(x)}. Die Restriktion galt für Matrix-Funktionen (z. B. MINV) bis Version 2003. Wer mit 2007 ff. werkt, kann das einfache Prinzip relativ leicht erweitern: Die Steigungen S'(x) an den Knoten ergeben sich als Vektor zufolge Multiplikation einer invertierten tridiagonalen Matrix mit einem Vektor. Das Funktionieren der Matrix- und Vektor-Formel bedingt dabei, dass bezogene Werte und die Formeln selbst nicht in der 1. Zeile beginnen!
Neben diesen ausgeblendeten Spalten findet sich die Auswahl des Typs: natürlich, vollständig und periodisch. Je nach Typ können S'(x) oder S”(x) festgelegt werden. Die Wahl von “periodisch” führt zu gleichen 1. und 2. Ableitungen und damit zu identischer Steigungen und Krümmungen. Im Falle unsinnigerweise ungleicher Ordinaten der Endpunkte wird diese Wahl mittels Bedingter Formatierung durchgestrichen.
Die Anzahl der Zwischenpunkte kann ausgehend von 0 (deckungsgleich mit geglätteter Linie) so eingestellt werden, dass der durch eine benutzerdefinierte Funktion SPLINE(X_Werte; S_Werte; Ss_Werte; [n_ZW]) realisierte Verlauf “rund” wird. X_Werte (Abszisse) und S_Werte (Ordinate) sind die vorgegebenen Knoten, Ss_Werte die errechneten Steigungen und n_ZW (optional mit Default = 0) die Anzahl der Zwischenpunkte.
Darunter können S(x), S'(x) und S”(x) für einen beliebigen x-Werte abgefragt werden. Das Diagramm zeigt sehr schön den Unterschied zwischen Microsoft’scher Methode und kubischem Spline, insbesondere die gekünstelt wirkende Dämpfung durch das Glätten, von den hässlichen Enden gar nicht zu sprechen. Für erste Spielereien sind die Ordinaten Zufallszahlen, die mit F9 zum Leben erweckt werden können:

PS: Die beim Öffnen auftretende Fehlermeldung ist scheinbar unvermeidlich.

Bolzen-Verdrehsicherung

Sind Bolzen höher belastet oder/und schmierbar ausgelegt, dürfen sie sich im Allgemeinen nicht verdrehen. Einerseits sollen die Schmierbohrungen nicht im Pressungsbereich zu liegen kommen, andererseits darf die Kerbwirkung dieser Bohrungen nicht in die höchstbelasteten Randfasern gelangen. In der Praxis finden sich, abgesehen vom klassischen Achshalter, die unterschiedlichsten Lösungen, oftmals mit Schweißungen und Bohrungen, die nachteilig für die (Dauer-)Festigkeit sind. Viele Ausführungen könnten als quasi Werknormen betrachtet werden, denen man die Vorlieben und Möglichkeiten früherer (eigener) Fertigungsmöglichkeiten ansieht! Die vorgeschlagene Ausführung der Bolzen-Verdrehsicherung geht – angenähert durch einfache Kreisbögen – vom Prinzip der geschlossenen Epizykloide und Hypozykloide (Hypotrochoide) aus. Deren Verwandte in Form des Innensechsrunds (Torx) und der Polygonprofile sind bekannt. Es liegt also ein mehrfacher Formschluss vor, der gedrungen bleiben kann und somit wenig Zerspanungsvolumen nach sich zieht, wobei obig erwähnte Schweißungen und Bohrungen samt deren Nachteilen entfallen. Die Ausführungsmöglichkeiten wurden bereits umfangreich mittels Excel (Optimierung via Solver) und CAD beleuchtet. Dies und Prinzip-Skizzen samt mathematischer Herleitungen können zur Findung einer bestmöglichen Ausführung zur Verfügung gestellt werden.

Obiges ist die Beschreibung eines am 18.01.2017 ans ASI übermittelten Projektantrags, dem folgendes Schicksal beschieden war:
“Das Komitee 029 hat in seiner 629. Sitzung, am 21. Juni 2017 folgendes bzgl. Ihres Projektantrages beschlossen: Da dieses Normprojekt derzeit keine Marktrelevanz aufweist und sich auch keine weiteren Stakeholder für eine Beteiligung an der Mitwirkung eines derartigen Normprojektes während der Einspruchsphase gemeldet haben, ist das Komitee 029 der Meinung, dieses Vorhaben nicht zu starten. Es wird daher einstimmig beschlossen, den Projektantrag nicht in das Arbeitsprogramm aufzunehmen und daraus folgend kein Normprojekt zu starten.”

Da die “Beschreibung, was sein würde, wenn die Norm/ONR nicht er- oder überarbeitet wird” lautet: “Dann würde ich meine Erkenntnisse als bereits vorliegende Excel-Berechnungen auf meiner privaten Homepage www.excelution.at präsentieren.”, biete ich für Interessenten 2 Downloads an:

Die Excel-Datei enthält, ausgehend von der einst selbst entwickelten singulären Parabel, die mehrfachen Zykloiden und deren Vereinfachungen, wobei der Sonderfall als “einfachste” Form auch für die optimierte Auslegung zur Verfügung steht:

Die STEP-Baugruppen-Datei beinhaltet dazu alle 5 Varianten, wie sie in der Excel-Datei optimiert wurden. Die Ausführung ist dabei die – zumindest für mich – denkbar einfachste, da die Verdrehsicherung zugleich die Aufgabe der Lagerung übernimmt (Dicke t muss entsprechend erhöht werden) und der Kopf durch einen Sprengring nach DIN 5417 für Wälzlager gemäß DIN 616 gebildet wird. Wenn die dafür erforderlichen Toleranzen nicht (wirtschaftlich) umgesetzt werden können, oder ein (fixer) größerer Kopf benötigt wird, dann braucht es eine entsprechende Aufgabenteilung:

Durchschnittssaldo-Monatsplaner

Für ein Konto mit Mindest-Durchschnittssaldo habe ich zur Abschätzung – mittlerweile für verschiedene Perioden – die Excel-App Durchschnittssaldo veröffentlicht.
Der überwiegende Teil der Buchungen dürfte jedes Monat bezüglich Zeitpunkt und Höhe ziemlich regelmäßig sein. Somit wäre es aber auch möglich, schon am Anfang des Monats zu wissen, welcher Kontostand zu einem ausreichend hohen Durchschnittssaldo an dessen Ende führen würde!
Ausgehend von diesem Kontostand könnte über Ein- und Auszahlungen für jeden Tag der laufende Durchschnittssaldo exakt berechnet werden. Über die Zielwertsuche wäre dieser dann wie gewünscht wählbar. Bankfeiertage sollten sich dabei durch Wahl des Jahres und des Monats von selbst einstellen, damit man Buchungen gegebenenfalls passend verschieben kann. Eine grafische Darstellung darf natürlich auch nicht fehlen!
Die angebotene Excel-App enthält dies alles, wobei für die Berechnung des Ostersonntags (bis einschließlich 8.702 😉 ) 2 alternative Lösungen umgesetzt wurden: Mittels Namen und Benutzerdefinierter Funktionen in eigenen Tabellenblättern. Die Füllfarben für Sams-, Sonn- und Feiertage ergeben sich durch Bedingte Formatierungen. Die Vorgehensweise sollte so selbst erklärend sein, dass Nicht-Österreicher ihre Feiertage auf eine der 2 Arten leicht implementieren können.

Präferenzanalyse

Gute Entscheidungen kommen nicht von ungefähr, d. h. man sollte zu Kopf und/oder Bauch noch die passenden Hilfsmittel benutzen. Unterstützung heranzuziehen ist vor allem empfehlenswert, wenn mehrere schwer oder gar nicht quantifizierbare Kriterien gewichtet werden sollen. Eine mir vorliegende und auch schon genutzte “Gewichtungsmatrix” hat mich in Wikipedia zum Thema schmökern lassen, wobei ich auf die Nutzwertanalyse gestoßen bin. Dort findet sich für die Gewichtung der Ziele bzw. Kriterien unter anderem die Präferenzanalyse mit dem Screenshot eines Excel-Tabellenblatts. Dessen Aufbau hat mir derart gut gefallen, dass ich es quasi “nachbauen” musste! 😉
Die nutzbaren 14 Kriterien sind übrigens mehr als genug, da in der Literatur darauf hingewiesen wird, dass 7±2 der handhabbare Bereich ist: Millersche Zahl.
Die in der Abbildung dargestellten Pfeile zur besseren Orientierung beim paarweisen Vergleich dienten wohl mehr der Illustration, weswegen ich es als Hilfe beim Befüllen vorgezogen habe, beim Markieren einer Bewertungszelle via VBA eine Datenüberprüfung mit Zellendropdown zu erstellen und die betroffenen Kriterien samt Nummerierung fett zu formatieren:

Diagramm Bezug-angepasst kopieren

Diagramme, die beim Kopieren eines Tabellenblattes darin noch nicht vorhanden sind, halten unangepasst an ihren Bezügen fest, wenn man sie nachträglich kopiert. Verwendet man – wie ich es häufig tue – Namen, dann nutzt das bereits vorhandene Diagramm allerdings auch nichts! Die Namen werden zwar angelegt, das Diagramm verweist aber immer noch auf jene des ursprünglichen Tabellenblatts.
Da ich in Excel dafür keine Option finden konnte, war lange Zeit Handarbeit angesagt, aber immer öfter drängte sich der Gedanke eines Automatismus auf, der dies weitgehend erledigt.
Bevor ich selbst zu stricken beginne, mache ich mir immer bewusst, dass ich wohl nicht der Erste mit dieser Problematik sein dürfte! So wurde ich auf Beverly’s Excel-Inn fündig, wobei die zum Gratis-Download angebotene Datei “nur” Diagramme mit Zellbezügen zwischen 2 Tabellenblättern kopieren kann. Auf Peltier Technical Services, Inc., einer generell sehr empfehlenswerten Seite, müsste man ein umfangreiches Add-In käuflich erwerben, das ein Feature namens “Edit Series Formula” enthält.
Demzufolge wurde eine eigene App programmiert, die Folgendes kann:

  • Tabellenblätter samt deren Diagramme innerhalb der gerade geöffneten Arbeitsmappen kopieren oder verschieben, wobei die Bezüge aller Datenreihen angepasst werden;
  • Diagramme innerhalb der gerade geöffneten Tabellenblätter kopieren oder verschieben, wobei nur Bezüge auf Zellen erlaubt sind und identisch angepasst werden;
  • Tabellenblätter ohne Diagramme lassen sich der Vollständigkeit halber natürlich auch kopieren und verschieben, was Excel aber ohnehin anbietet.

Die folgende Arbeitsmappe enthält den für die beschriebenen Features benötigten VBA-Code, der von der Befehlsschaltfläche “Tabellenblatt und Diagramm verschieben und kopieren” aufgerufen wird:

Versionstabelle

PS: Die App verwendet zur strukturierten Darstellung der Arbeitsmappen, Tabellenblätter und Diagramme das ActiveX-Steuerelement TreeView von Microsoft. Beim Öffnen der Arbeitsmappe wird abhängig von der Einstellung in “DATEI > Optionen > Trust Center > Einstellungen für das Trust Center > ActiveX-Einstellungen” darauf reagiert. Im Falle von “Alle Steuerelemente ohne Benachrichtigung deaktivieren” ist die App nicht lauffähig.

Linie glätten 3

Wenn es um Kurvenverläufe geht, dann baue ich immer ein Gerüst, das gleichmäßig gerastert so fein wie nötig aber so grob wie möglich ist. Bei Optimierungen ist aber zufolge ständiger Veränderungen, insbesondere bei Verwendung des Solvers, nicht abzusehen, wo Stützpunkte gebraucht werden. Um Zwischenwerte und insbesondere Extrema in ausreichender Genauigkeit zu erhalten, kann man Werte der geglätteten Linie eines Punkt (XY)-Diagramms verwenden. Mittels Linie glätten konnte ich das umsetzen, ergänzt um Steigungen (primär für Extrema) durch Linie glätten 2.
Für den überwiegenden Bereich der geglätteten Linie ist dies durchaus praktikabel, aber die Segmente an beiden Enden präsentieren sich unbefriedigend! Dazu muss man wissen, dass der verwendete Catmull-Rom-Spline segmentweise immer 4 Punkte zu dessen Berechnung benötigt, wovon an diesen Enden einer fehlt. Die Excel-Entwickler bei Microsoft haben das sehr einfach gelöst, indem sie den jeweils vorletzten Punkt am letzten gespiegelt und damit den mathematisch unerlässlichen Hilfspunkt erzeugt haben. Dadurch ergibt sich am Endpunkt immer eine Tangente in Richtung des vorletzten Punktes, was wiederum ein Prinzip dieses Splines ist, dass der Vektor durch die beiden Nachbarpunkte die Tangentenrichtung vorgibt.
Eine bessere Wahl des Hilfspunkts könnte Abhilfe schaffen, wobei das Prinzip natürlich unangetastet bleiben soll. Eine Quadratische Bézierkurve bietet prinzipiell alles Wünschenswerte, mit dem Schönheitsfehler, dass von deren 3 bestimmenden Punkten einer nicht auf der Kurve liegt! Aber die Funktionsgleichung lässt sich so umformen, dass unser Kurvenpunkt jenen des Kontrollpolygons bestimmt. Dabei muss für die Beibehaltung obigen Tangentenprinzips der Parameter t = 0,5 gesetzt sein.
Der Schenkel des Kontrollpolygons zum Endpunkt ist dessen Tangente. Spiegelt man nun den vorletzten Punkt mittels Spiegelungsmatrix an der Tangentennormalen durch den Endpunkt, dann ergibt sich der Verlauf der geglätteten Linie deutlich verbessert, wobei das Prinzip der Tangentendefinition wiederum erfüllt ist!
Linie glätten und Linie glätten 2 wurden um diese Option ergänzt.
Die folgende Datei zeigt das erläuterte Prinzip durch 3 frei wählbare Punkte, was den Spieltrieb anstacheln sollte:

Linie glätten 3

PS: Sollte jemand eine bessere Lösung parat haben, dann bitte her damit! Vielleicht kann man sogar Microsofts Excel-Entwickler zur Implementierung animieren?!

Orthogonale Axonometrie

Manchmal benötigt man Abmessungen von Objekten, die einem nicht physisch zur Verfügung stehen. Im Internet sind mittels Suchmaschinen zwar oft schöne Bilder und Darstellungen zu finden (z. B. auch jene in PDF-Dateien von Betriebsanleitungen, Ersatzteillisten,…), aber wie lässt sich daraus das Gewünschte herausmessen?
Für Draufsicht und Vorder- bzw. Seitenansicht einer Normalprojektion ist dies keine Kunst. Wenn eine Grafik allerdings als Axonometrie, genauer gesagt als Orthogonale Axonometrie vorliegt, dann müsste man aus der Achsenanordnung auf die Verkürzungen der Achsen schließen. Kennt man dann noch eine Abmessung, so ließen sich mittels eines Maßstabes alle weiteren Maße eruieren!

Die folgende Datei erwartet dazu als Eingabe die beiden Winkel α und β zwischen der za-Achse (die stets als vertikal nach oben orientiert angenommen wird) und der xa– und ya-Achse und errechnet daraus den Drehwinkel ζ um die z-Achse (Zwischenlage xζ– und yζ-Achse) und ξ um die x-Achse und daraus die Verkürzungen aller 3 Achsen. Wenn man nun noch einen abgemessenen Wert einer bekannten Größe in die entsprechende Achsenrichtung einträgt, dann kann mittels Zielwertsuche der Maßstab derart eingestellt werden, dass die Ausgangsbasis für weitere Abmessungen eingerichtet wird. Eine anschauliche Grafik dient dabei der Kontrolle der Achsenlage:

Orthogonale Axonometrie-97-2003-1.00

Linie glätten 2

Wer häufiger mit einem Punkt (XY)-Diagramm (engl. XY (scatter) chart) oder einem Verbund-Diagramm, das eine Linie enthält, arbeitet, dürfte die Option “Linie glätten” (engl. “Smoothed line”) kennen.
Als Linie glätten nach einigem Hin und Her vollbracht war, und somit – je nach Vorgabe – Abszisse oder Ordinate berechenbar waren, kam sofort der Wunsch auf, Extrema eruieren zu können. Und wenn man Punkte mit Steigung 0 sucht, dann kann man auch gleich jeden beliebigen Winkel vorgeben!
Ausgehend vom bereits in Linie glätten benutzten Code, stelle ich eine praxistaugliche und universelle benutzerdefinierte Funktion SLINE_GRD(Steigung;Sortierreihenfolge;Diagramm;Datenreihe;Endenmodifikation) zur Verfügung: Man erhält die Abszissen ti und die Ordinaten f(t)i der geglätteten Linie für eine Steigung (optionaler Winkel im Bogenmaß mit Default = 0) gemäß Sortierreihenfolge (optional mit Default = WAHR für aufsteigend) für eine Datenreihe (optional mit Default = 1) eines Diagramms (optional mit Default = 1) mit Endenmodifikation (optional mit Default = FALSCH; Erklärung siehe Linie glätten 3).
Achtung: SLINE_GRD benötigt die Maßstäbe des Diagramms, das sich aber erst am Schluss aktualisiert, was bei automatischen Achsen-Grenzen zu dann geänderten Maßstäben und somit falschen Ergebnissen führen kann. Deswegen wird im Ereignis “Private Sub Worksheet_Calculate()” des jeweiligen Worksheets zur Sicherheit eine 2. Berechnung erzwungen!
Die folgende Datei bietet die Möglichkeit, den Einsatz der benutzerdefinierten Funktion SLINE_GRD einfach nachzuvollziehen, wobei die anschauliche Animation hilfreich sein dürfte:

Versionstabelle

Linie glaetten 2-97-2003-1.10

Satz von Roberts

Da ich zur Genaulagen-Synthese von Koppelgetrieben einen Beitrag veröffentlichen wollte, war ich auf der Suche nach entsprechendem Material. Dabei bin ich auf die empfehlenswerte Homepage von Herrn Prof. em. R. Braune gestoßen. Die dort offerierten Vortragsfilme habe ich natürlich angesehen, wobei es mir die in “04_Maßsynthese II” behandelte Hain-Zange besonders angetan hat. Ich wollte die beschriebene Vorgehensweise via der am Institut entwickelten Software GENESYS mit meiner eigenen Excel-Methode, die den Solver nutzt, nachvollziehen! Im Zuge dessen wollte ich darüber hinaus weitere Ansätze probieren. Die dafür in Frage kommenden angenäherten Geradführungen (Haine nutzte ja eine asymmetrische Version von Tschebyschow) waren nicht alle in ihrer Ursprungsanordnung brauchbar und so erinnerte ich mich an den Satz von Roberts, der für jedes Gelenkviereck, egal ob als Kurbelschwinge, Doppelschwinge oder Doppelkurbel vorliegend, zwei weitere Lösungen zur Erzeugung der gleichen Koppelkurve anbietet.
Auf der Suche nach Unterlagen stieß ich auf die Veröffentlichung Modellgetriebe zum Satz von Roberts/Tschebyschev von Herrn Prof. em. G. Dittrich, dessen sehr verständliche Erläuterung ich umgesetzt habe.
Die folgende Datei enthält neben der erwähnten Vorlage, deren Animation unten zu sehen ist, noch die angenäherten Geradführungen von Roberts, Watt, Tschebyschow, Evans und Hoecken. Ausgehend von diesen Beispielen kann ganz leicht ein eigenes Koppelgetriebe definiert und die beiden ausblendbaren Ersatzgetriebe erzeugt und animiert werden:

Bemerkung: Wegen eines beim erstmaligen Aktivieren des Tabellenblatts durch das Diagramm verursachten Problems nicht als 97-2003-Version.