Download Programmieren mit DERIVE
Transcript
Böhm: Programmieren mit DERIVE 49 LOOP( i:=1,z_:=z, LOOP( Nun folgt wieder eine geschachtelte Schleife, die die Zeilen der Matrix erzeugt, die aus der Übereinstimmung der ersten Ableitungen folgen. Diese wird in der Wiedergabe übersprungen und wir schauen uns die nächste Schleife näher an, die die geforderten Übereinstimmungen der zweiten Ableitungen beschreibt. "@ die zweiten Ableitungen müssen übereinstimmen ", j:=1, LOOP( i:=1,z_:=z, LOOP( IF(i=3,EXIT), z_:= REPLACE((4-i)!*m SUB (j+1) SUB 1^(2-i),z_,4j-4+i), i:+1), i:=5, LOOP( IF(i=7,EXIT), z_:= REPLACE(-(8-i)!*m SUB (j+1) SUB 1^(6-i),z_,4j-4+i), i:+1), mat:= APPEND(mat,[z_]), j:+1, IF (j=m_-1,EXIT)), "@ die zweiten Ableitungen an den Raendern verschwinden", Die Kommentarzeile sagt schon wie es weitergeht. Ähnlich dem Beginn werden die zweiten Ableitungen an den Rändern berücksichtigt. Ein letztes Mal wird die Matrix um eine Zeile erweitert und dann extrahieren wir die letzte Spalte der mit ROW_REDUCE behandelten Matrix. Ihre Elemente sind die Koeffizienten der gesuchten Splines - immer schön in Viererpäckchen, wenn die Matrix regulär ist. Das aber wird in Zeile 2 abgefragt. mat:= APPEND(mat,[z_]), koeff:=(ROW_REDUCE(mat) COL (4m_-3))`, "@ Bestimmung der Splinefunktionen ", 3 spls := VECTOR([x^3,x^2,x,1]* koeff ROW [4i_-3,...4i_], i_,m_-1), 2 IF(NOT NUMBER?(SUBST(spls SUB 1,x,0)), RETURN "singulaere Matrix !"), bk teachware