| |
|
|
p.specht
| Interpolation liefert toujours exakte Werte à den Stützstellen. cela unterscheidet vous de qui Approximation, qui versucht, sogenannte Ausgleichskurven entre viele Messdaten avec geringstem faute einzupassen.
une Interpolation par konvergente Kettenbruch-Entwicklung hat folgende Stärke: Rationale Funktionen peut déjà sur la base de wenigen Stützstellen so entwickelt volonté, qui gute Näherungen existieren; une exzellente variante ist qui sog. Thiele'sche Kettenbruch. qui ici gefundenen (im wahrsten Sinne des Wortes) "Bruchstücke" volonté ausgegeben, anschließend peut x-Werte eingegeben volonté, um Zwischenwerte entre den Stützstellen abzufragen. comme Demo wurde sur File-I/O verzichtet. sans chacun Gewähr:
Titre de la fenêtre "Interpolation par konvergente Kettenbruchentwicklung"
Fenêtre Style 24:randomize:font 2:set("decimals",17)
'{ Interpolation par Kettenbruchentwicklung
'*************************************************************
'* Interpolate a function F(x) by continuous fractions *
'* --------------------------------------------------------- *
'* SAMPLE RUN: *
'* (Interpolate function e(x) between x=0 and x=2) *
'* *
'* Number of points: 3 *
'* X, Y: 0,1 *
'* X, Y: 1,2.71828 *
'* X, Y: 2,7.38906 *
'* *
'* Coefficients D(K): *
'* D(0) = 1.000000 *
'* D(1) = 0.581977 *
'* D(2) = -3.718271 *
'* *
'* X = 1.5 *
'* *
'* For X = 1.5 Y = 4.351909 *
'* *
'* --------------------------------------------------------- *
'* Ref.: "Methodes de calcul numerique, Tome 2 By Claude *
'* Nowakowski, PSI Edition, 1984" [BIBLI 04]. *
'* *
'* Basic Release By J-P Moreau, Paris. *
'* (www.jpmoreau.fr) *
'*************************************************************
'* *
'* XProfan-Version by 2014-10 by P.Specht, vienne *
'* *
'}************************************************************
CLS rnd(8^8)
Déclarer n1&,n&,m&,K&,L&,xxx!,yyy!,DD!,DL!,XX!,S!
PRINT "\n Anzahl Stützwerte: ";:INPUT N1& :imprimer
N&=N1&-1
Déclarer X![N&],Y![N&],D![N&]
'Read data à partir de screen
whileloop 0,n&:k&=&Boucle
imprimer " X("+str$(k&)+") = ";
input xxx!
X![K&]=xxx!
imprimer tab(20);" Y("+str$(k&)+") = ";
input yyy!
Y![K&]=yyy!
endwhile
'Calculate coefficients D(K)
whileloop 0,n&:k&=&Boucle
D![K&] = Y![K&]
endwhile
M&=N&
whileloop m&:L&=&Boucle
whileloop L&,N&:K&=&Boucle
DD! = (X![K&]-X![L&-1])/(D![K&]-D![L&-1])
IF K&<>L&
D![K&]=DD!
ELSE
DL!=DD!
ENDIF
endwhile
D![L&]=DL!
endwhile
'imprimer coefficients
PRINT
PRINT " Koeffizienten D(K):"
whileloop 0,n&:k&=&Boucle
PRINT " D[";K&; "] = ";
PRINT format$("%g",D![K&])
endwhile
REPEAT
'Interpolate for X=XX
PRINT
imprimer " X = ",:Contribution XX!
'Evaluate continuous fraction
S!=(XX!-X![N&-1])/D![N&]
whileloop n&-1,1,-1:k&=&Boucle
S!=(XX!-X![K&-1])/(D![K&]+S!)
endwhile
S!=S!+D![0]
cas %csrlin>23:cls rnd(8^8)
PRINT
PRINT " Pour cela eingegebene X=";format$("%g",XX!);" ist (ses Stützwerte zugrunde- "
imprimer " gelegt) qui Interpolierte Funktionswert Y =";format$("%g",S!)
imprimer "---------------------------------------------------------------------"
waitinput
UNTIL 0
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 16.05.2021 ▲ |
|
|
|