Problem Description: | Problembeschreibung: |
| Imagine we have run a physical experiment, and put the measured values into an x/y coordinate system. Assuming the measuring was fine enough, the sample points describe the measured behaviour well enough — but how can we derive a finer and even finer resulting graph from the diagram? | Stell dir vor, wir hätten ein physikalisches Experiment durchgeführt und die Meßwerte in ein x/y-Koordinatensystem eingetragen. Angenommen, die Messung war feinmaschig genug, dann beschreiben die Stützpunkte das gemessene Verhalten völlig hinreichend — wie aber können wir eine immer feinere Ergebniskurve aus dem Diagramm ableiten? |
| Or take a 2D graphics example: the user shall be able to describe softly/naturally curved shapes with just a few mouse clicks. Also here we might use an iterative procedure to close the gaps. In the example image you see where the user clicked as green balls, and the iterative steps as grey rings that get smaller and darker with every iteration step (a fixed number of iterations was used here). | | Oder nimm ein Beispiel aus der 2D-Graphik: der Nutzer soll natürlich gewundene Formen mit nur wenigen Mausklicks erstellen können. Auch hier könnten wir eine iterative Prozedur verwenden, um die Lücken zu schließen. In dem Beispielbild siehst du die vom Nutzer angeklickten Punkte als grüne Bälle, und die iterativen Schritte als graue Ringe, die mit jedem Iterationsschritt kleiner und dunkler werden (hier wurde eine festeingestellte Iterationszahl verwendet). |
Solution: | Lösung: |
| First we need to assign the correct curve gradient to every sample point. The best algorithm (in computer programming) is to first do this with all the middle points, and only then with the leftmost (starting) and the rightmost (ending) point. The number of sample points is here written as C ("count"). | Zuerst müssen wir jedem Meßpunkt den richtigen Kurvenanstieg zuweisen. Der beste Algorithmus (beim Programmieren) ist es dabei, dies zunächst mit den mittleren Punkten, und erst dann mit dem linken (Anfangs-) und rechten (End-) Punkt zu tun. Die Anzahl an Meßwerten schreiben wir hier als C. |
| n = 1..C-2 : mn = (Yn+1 - Yn-1)/(Xn+1 - Xn-1) m0 = 2((Y1 - Y0)/(X1 - X0)) - m1 mC-1 = 2((YC-1 - YC-2)/(XC-1 - XC-2)) - mC-2 |
| Now we need to spread the curve´s data. This will be shown here in Turbo Delphi Pascal code. | Nun müssen wir die Kurvendaten aufspreizen. Dies wird hier in Pascal-Code für Turbo Delphi gezeigt. |
| for i:= C-1 downto 1 do PointData[2*i] := PointData[i]; |
| Finally we can calculate the new value for each gap (every odd n). | Schließlich nun können wir den neuen Wert für jede Lücke (jedes ungerade n) errechnen. |
| Yn = (Yn-1 + Yn+1 + (Xn+1 - Xn-1)*(mn-1 - mn+1)/4)/2 |
Derivation: | Herleitung: |
| The last formula we get when we use the EJIP formula and set s = Δs/2. The gradient formulas are quite straightforward solutions when you make some sketches on paper. | Die letzte Formel erhalten wir, wenn wir die EJIP-Formel verwenden und s = Δs/2 setzen. Die Anstiegsformeln zwingen sich geradezu auf, wenn man sich mal ein paar Skizzen auf Papier macht. |
Commentary: | Kommentar: |
| This method might be used in artificial intelligence applications, where multidimensional experience clusters shall be read out to give a response to sensoric input from the environment. The iterativeness should be a fair equivalent to how our own brains work: the less time we have for a quick response, the coarser and less precisely it may be. | Dieses Verfahren könnte für künstliche Intelligenz genutzt werden, wo multidimensionale Erfahrungscluster ausgelesen werden sollen, um eine Reaktion auf sensorische Wahrnehmungen der Umwelt zu bewirken. Die iterativen Schritte dürften ein gutes Äquivalent zur Funktionsweise unserer eigenen Gehirne darstellen: je weniger Zeit wir für eine schnelle Reaktion haben, desto gröber und ungenauer mag sie ausfallen. |
| Has IJIP the same accuracy as EJIP? No, although it comes pretty close. The difference is that the gradient in the interpolated point as calculated with EJIP should be 3ΔY/2ΔX - (mn-1 + mn+1)/4 whereas in IJIP we can only use ΔY/ΔX because mn-1 and mn+1 are unknown. | Ist IJIP so genau wie EJIP? Nein, obwohl es ihm sehr nahe kommt. Die Abweichung liegt im Anstieg des interpolierten Punktes, der nach EJIP berechnet 3ΔY/2ΔX - (mn-1 + mn+1)/4 beträgt, während wir in IJIP nur ΔY/ΔX verwenden können, da mn-1 und mn+1 unbekannt sind. |