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