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?!

Take it easy

Bei einem Treffen mit ehemaligen Kollegen lernte ich meinen Nachfolger kennen, der sich gerade für ein Spiel interessierte. Und zwar suchte er nach einer Bestätigung, dass bei Take it easy die maximal mögliche Punktezahl tatsächlich 307 ist. Ohne vorliegenden Beweis und bei theoretisch maximal 339 Punkten können durchaus Zweifel aufkommen. Angesichts 270.061.246.290.137.702.400.000 Möglichkeiten (Kombination ohne Wiederholung von 19 aus 27 Steinen und Permutation dieser 19 Steine) erscheint ein Durchprobieren mit heutiger Rechnerleistung aussichtslos!
Meine kühne Behauptung: Eine bessere Lösung als jene 16 mit 307 Punkten ist gleichfalls nur mit durchgehend gleichen Zahlen in den Spalten und den Haupt- und Nebendiagonalen machbar!
Kombinatorik ist keine meiner Stärken, weswegen ich anfangs irrtümlich von “nur” 13.824 (= 24³) derartigen Lösungen ausging, die weitere Beschäftigung führte dann allerdings zu einem Lösungsumfang von 729.000 (= 90³, um den Faktor 53 größer 😳 ).
Im 1. Schritt versuchte ich den Solver auf das Problem anzusetzen, wobei ich wegen der “Sprunghaftigkeit” erstmals den Evolutionären Algorithmus einsetzen musste. Mit den Standardeinstellungen wurde – ausgehend von verschiedenen 307er-Anordnungen – vermeldet: “Solver kann die aktuelle Lösung nicht verbessern. Alle Nebenbedingungen wurden eingehalten.” Änderung einer Zahl, wodurch nur ein einziger Stein doppelt verwendet wurde, ergab: “Solver konnte keine machbare Lösung finden.” Das Ändern von Optionen, insbesondere das Hochschrauben der “Größe der Grundgesamtheit” auf 10.000, brachte – abgesehen von “leerer” Rechenzeit – nichts, weswegen der Versuch abgebrochen wurde!
Der 2. Schritt war die Programmierung der Prozedur Lösungen, die 3 verschachtelte Schleifen abarbeitet und zulässige Lösungen in einem eigenen Tabellenblatt einträgt.

Die folgende Datei enthält 2 Tabellenblätter:

  •  Spiel zeigt Take it easy im obig beschriebenen Modus samt einer Liste aller Steine und deren Verwendung mittels Bedingter Formatierung;
  •  Liste enthält alle 1.296 gefundenen Lösungen, wobei diese via Befehlsschaltfläche in Spiel angezeigt werden können.

Bemerkung: Wegen der verwendeten Symbolsätze der Bedingten Formatierungen nicht als 97-2003-Version.

Take it easy-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

Linie glätten

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. Dass nicht nur ich an Werten dieser Kurve interessiert war, zeigte mir eine Recherche im Internet. Unglücklicherweise bietet weder Excel einen diesbezüglichen Zugang noch offeriert Microsoft eine Dokumentation des Algorithmus!
Den Hinweis, dass Excel dazu möglicherweise einen Kubisch Hermiteschen Spline aus ineinander übergehenden Kubischen Bézierkurven verwendet, verdanke ich Brian T. Murphy, dessen Respekt einflößende Datei ich als Ausgangsbasis meiner 1. Arbeit nahm (Version 1.00). Für die darin vorkommende Notwendigkeit, die Nullstellen eines Polynoms 3. Grades zu finden, bediente ich mich dankenswerterweise bei Excel4Managers, wobei ich die nicht zwingend nötig ausgelagerten Funktionen für die 3. Wurzel und den Arkuskosinus wieder integriert habe.
Der Kritik in einem Forum, dass Murphys Lösung fehlerbehaftet sei (z. B. im Bereich 10 bis 11 für [9;8] [10;12] [11;12] [14;6]), folgte meinerseits ein Tabellenblatt zum Testen aller möglichen Konstellationen für 4 Punkte, was obigen Fehler ausmerzte, aber in weiterer Folge nicht alle Schwächen dieses Ansatzes beseitigte.
User Ihem zeigt in der Microsoft Community einen einfacheren und stimmigeren Ansatz mittels Catmull-Rom-Spline, der auf dem Tabellenblatt “Test” nachvollzogen werden kann (worauf ich nicht näher eingehen möchte). Seinen angeführten Code, der als Algorithmus für bloß einen Punkt bei bekannter Laufvariable taugt, habe ich zu einer praxistauglichen und universellen benutzerdefinierten Funktion SLINE_VAL(Wert;Typ;Sortierreihenfolge;Diagramm;Datenreihe;Endenmodifikation) erweitert (Version 3.00): Man erhält Werte der Schnittpunkte der geglätteten Linie für einen numerischen Wert des Typs 0 oder 1 (optional mit Default = 0 = Abszisse, t, x,… und 1 = Ordinate, f(t), y(x),…) 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_VAL 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!
Wer überdies Abszissen oder/und Ordinaten zu einer bestimmten Steigung benötigt (eventuell für Extrema), findet die Lösung im Beitrag Linie glätten 2.
Die folgende Datei bietet einerseits die Möglichkeit, den Algorithmus auf Herz und Nieren zu testen, um bisher unentdeckte Fehler zu finden (bei Verdacht unbedingt auf 400% zoomen), und andererseits die Nutzung der benutzerdefinierten Funktion SLINE_VAL nachzuvollziehen, wobei die anschauliche Animation hilfreich sein dürfte:

Versionstabelle

Linie glaetten
PS: Entdeckte Fehler bitte nicht für sich zu behalten!

Einsteins Rätsel

Im Jahre 2001 bin ich offensichtlich auf einen Intelligenztest gestoßen, den Albert Einstein verfasst haben soll und nur von 2% der Weltbevölkerung gelöst werden kann. Dazu wollte ich natürlich gehören und nutzte Excel, um überraschenderweise sogar 2 Lösungen zu finden! Excel ist dafür überhaupt nicht nötig, nur sehr praktisch beim Kopieren und Verschieben.
Jetzt wieder zufällig darauf gestoßen, konnte ich recherchieren, dass Einsteins Rätsel vielmehr als Zebrarästel bekannt ist und mit ihm wohl nichts zu tun haben dürfte.
Es handelt sich jedenfalls um ein nettes Logical, das – sinnerfassendes Lesen und Ausdauer vorausgesetzt – von einem großen Teil der Weltbevölkerung gelöst werden kann:

Einsteins Raetsel

Spannungsquerschnitt

Für die Berechnung des Spannungsquerschnitts verwendet man beim ISO-Gewinde eine Kreisfläche, wobei sich deren Durchmesser als arithmetisches Mittel aus Flanken- und Kerndurchmesser ergibt. Da dies bei der ovalen Form des Querschnitts nur eine Näherung sein kann, war die Herleitung und Untersuchung der exakten Lösung reizvoll.
Wie die folgende Datei zeigt, führt die Näherung zu “versteckten” Reserven von respektablen 22% bei M1 bis zu relevanten 6,2% bei M64. Der Versuch einer genaueren Näherungsformel führte zwar zu deutlich kleineren Abweichungen, ist aber für die Praxis untauglich:

Spannungsquerschnitt