Italia
Fonte/ Codesnippets

Interpolation durch Kettenbruch-Entwicklung: Der Thiele-Algorithmus

 

p.specht

Interpolation liefert immer exakte Werte an den Stützstellen. Das unterscheidet sie von der Approximation, die versucht, sogenannte Ausgleichskurven zwischen viele Messdaten mit geringstem Fehler einzupassen.

Eine Interpolation durch konvergente Kettenbruch-Entwicklung hat folgende Stärke: Rationale Funktionen können schon auf Basis von wenigen Stützstellen so entwickelt werden, daß gute Näherungen existieren; eine exzellente Variante ist der sog. Thiele'sche Kettenbruch. Die hier gefundenen (im wahrsten Sinne des Wortes) "Bruchstücke" werden ausgegeben, anschließend können x-Werte eingegeben werden, um Zwischenwerte zwischen den Stützstellen abzufragen.
Als Demo wurde auf File-I/O verzichtet. Ohne jede Gewähr:
WindowTitle "Interpolation durch konvergente Kettenbruchentwicklung"
WindowStyle 24:randomize:font 2:set("decimals",17)
'{ Interpolation durch 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, Wien        *
'*                                                           *
'}************************************************************
CLS rnd(8^8)
Declare n1&,n&,m&,K&,L&,xxx!,yyy!,DD!,DL!,XX!,S!
PRINT "\n Anzahl Stützwerte: ";:INPUT  N1& :print
N&=N1&-1
Declare X![N&],Y![N&],D![N&]
'Read data from screen

whileloop 0,n&:k&=&Loop

    print "  X("+str$(k&)+") = ";
    input xxx!
    X![K&]=xxx!
    print tab(20);" Y("+str$(k&)+") = ";
    input yyy!
    Y![K&]=yyy!

endwhile

'Calculate coefficients D(K)

whileloop 0,n&:k&=&Loop

    D![K&] = Y![K&]

endwhile

M&=N&

whileloop m&:L&=&Loop

    whileloop L&,N&:K&=&Loop

        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

'print coefficients
PRINT
PRINT " Koeffizienten D(K):"

whileloop 0,n&:k&=&Loop

    PRINT " D[";K&; "] = ";
    PRINT format$("%g",D![K&])

endwhile

REPEAT

    'Interpolate for X=XX
    PRINT
    print " X = ",:Input XX!
    'Evaluate continuous fraction
    S!=(XX!-X![N&-1])/D![N&]

    whileloop n&-1,1,-1:k&=&Loop

        S!=(XX!-X![K&-1])/(D![K&]+S!)

    endwhile

    S!=S!+D![0]
    case %csrlin>23:cls rnd(8^8)
    PRINT
    PRINT " Für das eingegebene X=";format$("%g",XX!);" ist (Ihre Stützwerte zugrunde- "
    print " gelegt) der Interpolierte Funktionswert Y =";format$("%g",S!)
    print "---------------------------------------------------------------------"
    waitinput

UNTIL 0

 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
16.05.2021  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.426 Views

Untitledvor 0 min.
Erhard Wirth14.06.2024
p.specht21.11.2021
R.Schneider20.11.2021
Uwe Lang20.11.2021
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie