Français
Source/ Codesnippets

Curve Fitting - Gegeben: Messpunkte, gesucht: Le meilleur Formel en supplément!

 

p.specht

c'est pas toujours léger, trop einem empirisch gefundenen Bezug entre deux Größen une geeignete mathématique Formel pour trouver. cela folgende Programme hilft dabei, une Funktion avec possible kleiner Abweichung de den tatsächlichen Messergebnissen pour trouver - sur Englisch est cela "Curve fitting". attention, reine Demo - situation juridique ungeprüft!
Titre de la fenêtre "KURVEN-ANPASSUNG à Meßpunktwolke"
'{ (D) Demoware, 2012-05 traduit aus HP-Basic pour XProfan by P. Specht
' sans jegliche Gewähr! Nutzung dans alleiniger responsabilité des Anwenders!
' Rechtsvermerk qui Présentation:
' Copyright  1987
' John H. Mathews
' Dept. of Mathematics
' California State University, Fullerton
' Nonlinear Curve Fitting
' PROGRAM CURVEFIT
'}
'{ MAIN LOOP
AppendMenubar 10,"Welcher Gleichungstyp gibt mon Messdaten am besten wieder?"
Font 2:Randomiser:Set("decimals",15)' : Set("numwidth",15)
Var MaxN&=100
Déclarer X![100],X1![100],Y![100],Y1![100]
Déclarer à l'$,tmp$,n&,k&,CTYPE&,A!,B!,C!,D!,E!,F!,X!
Déclarer XMEAN!,YMEAN!,SUMX!,SUMXY!,ERRER!,L!,LM!
g115:
p200' call SUBROUTINE GET DATA
g125:
p400' call SUBROUTINE CURVE TYPE
p2000' call SUBROUTINE CHANGE VARIABLES
p3000' call SUBROUTINE LINEAR REGRESSION
p4000' call SUBROUTINE CONSTANTS
p5000' call SUBROUTINE RESULTS
Imprimer "\n WANT TO FIT ANOTHER CURVE TO THIS DATA ? ";
Contribution ANS$
Cas (ANS$ = "Y") Or (ANS$ = "y") Or (ANS$ = "J") Or (ANS$ = "j"): p6000' call SUBROUTINE REFRESH
Cas (ANS$ = "Y") Or (ANS$ = "y") Or (ANS$ = "J") Or (ANS$ = "j"): Goto "g125"
Imprimer "\n WANT TO FIT A CURVE FOR SOME NEW DATA? ";
Contribution ANS$
Cas (ANS$ = "Y") Or (ANS$ = "y") Or (ANS$ = "J") Or (ANS$ = "j"): Goto "g115"
Goto "g9999"
'}

Proc p200' SUBROUTINE GET DATA

    CLS Tour(8^8)
    Imprimer "\n Verwendet wird la méthode 'données-Linearisierung'"
    Imprimer " Verfügbare Formeln:\n"
    Imprimer " (1) Y=A*X+B,   (2) Y=A/X+B,   (3) Y=D/(X+C)       "
    Imprimer " (4) Y=1/(A*X+B), (5) Y=X/(A+B*X), (6) Y=A*Ln(X)+B "
    Imprimer " (7) Y=C*Exp(A*X),  (8) Y=C*X^A,  (9) Y=(A*X+B)^-2 "
    Imprimer " (10) Y=C*X*Exp(-D*X),    (11) Y=L/(1+C*Exp(A*X))  "
    Imprimer "\n ...pour N Messpunkte (X1,Y1),(X2,Y2)...(Xn,Yn) "
    Imprimer " Nombre de Messpunkte:  N = ";
    Contribution N&
    Cas  N&<2:N&=2
    Imprimer

    WhileLoop n&:K&=&Boucle

        Imprimer "X(";K&;") = ";
        Contribution tmp$
        X![K&]=Val(tmp$)
        X1![K&]=X![K&]
        Localiser %csrlin-1,%pos+35
        Imprimer "Y(";K&;") = ";
        Contribution tmp$
        Y![K&]=Val(tmp$)
        Y1![K&]=Y![K&]
        'PRINT

    Endwhile

ENDPROC

Proc p400' SUBROUTINE CURVE_TYPE

    CLS Tour(8^8)
    Imprimer "      WHICH CURVE DO YOU WANT TO FIT ?\n"
    Imprimer " 1:   Y = A * X + B"
    Imprimer " 2:   Y = A / X + B"
    Imprimer " 3:   Y = D / (X + C)"
    Imprimer " 4:   Y = 1 / (A * X + B)"
    Imprimer " 5:   Y = X / (A + B * X)"
    Imprimer " 6:   Y = A * Ln(X) + B"
    Imprimer " 7:   Y = C * Exp(A * X)"
    Imprimer " 8:   Y = C * X^A"
    Imprimer " 9:   Y = (A * X + B)^-2"
    Imprimer "10:   Y = C * X * EXP(-D * X)"
    Imprimer "11:   Y = L / (1 + C * EXP(A * X) )\n"
    Imprimer "      CHOOSE TYPE OF CURVE [1-11]: ";
    Contribution CTYPE&

    Si  CTYPE& = 11

        Goto "g550"

    D'autre

        Goto "g645"

    EndIf

    g550:
    CLS
    Imprimer
    Imprimer "     YOU CHOSE THE CURVE  Y = L / (1 + C * EXP(A * X))"
    Imprimer
    Imprimer " THE LIMITING  VALUE  L =  LIM   Y(X)  MUST BE GIVEN."
    Imprimer "                                         X ->INF"
    Imprimer
    Imprimer " ENTER  THE  VALUE    L = ";
    Contribution L!
    LM!=Abs(Y![1])

    WhileLoop 2,n&:k&=&Boucle

        Cas LM!<Abs(Y![K&]): LM!=Abs(Y![K&])

    Endwhile

    Cas L!<=LM!: L!=LM! * 1.0001
    g645:

ENDPROC

Proc p1000' SUBROUTINE FUNCTIONS

    Select CTYPE&

        CaseOf 1: F!=A!*X!+B! : Goto "g1115"

        CaseOf 2: F!=A!/X!+B! : Goto "g1115"

        CaseOf 3: si (X!+C!)<>0:F!=D!/(X!+C!): D'autre F!=10^30:endif :Goto "g1115"

        CaseOf 4: F!=1/(A!*X!+B!) : Goto "g1115"

        CaseOf 5: F!=X!/(A!+B!*X!) : Goto "g1115"

        CaseOf 6: F!=A!*LG(X!)+B! : Goto "g1115"

        CaseOf 7: F!=C!*Exp(A!*X!) : Goto "g1115"

        CaseOf 8: F!=C!*Exp(A!*LG(X!)) : Goto "g1115"

        CaseOf 9: F!=1/((A!*X!+B!)*(A!*X!+B!)) : Goto "g1115"

        CaseOf 10: F!=C!*X!*Exp(-D!*X!) : Goto "g1115"

        CaseOf 11: F!=L!/(1+C!*Exp(A!*X!))

    EndSelect

    g1115:

ENDPROC

Proc p2000' SUBROUTINE CHANGE VARIABLES

    WhileLoop n&:k&=&Boucle

        Select CTYPE&

            CaseOf 1

            X![K&]=X1![K&]:Y![K&]=Y1![K&] : Goto "g2118"

            CaseOf 2

            X![K&]=1/X1![K&]:Y![K&]=Y1![K&] : Goto "g2118"

            CaseOf 3

            X![K&]=X1![K&]*Y![K&]:Y![K&]=Y1![K&] : Goto "g2118"

            CaseOf 4

            X![K&]=X1![K&]:Y![K&]=1/Y1![K&] : Goto "g2118"

            CaseOf 5

            X![K&]=1/X1![K&]:Y![K&]=1/Y1![K&] : Goto "g2118"

            CaseOf 6

            X![K&]=LG(X1![K&]):Y![K&]=Y1![K&] : Goto "g2118"

            CaseOf 7

            X![K&]=X1![K&]:Y![K&]=LG(Y1![K&]) : Goto "g2118"

            CaseOf 8

            X![K&]=LG(X1![K&]):Y![K&]=LG(Y1![K&]) : Goto "g2118"

            CaseOf 9

            X![K&]=X1![K&]:Y![K&]=1/SQR(Y1![K&]) : Goto "g2118"

            CaseOf 10

            X![K&]=X1![K&]:Y![K&]=LG(Y1![K&]/X1![K&]) : Goto "g2118"

            CaseOf 11

            X![K&]=X1![K&]:Y![K&]=LG(L!/Y1![K&]-1) : Goto "g2118"

        EndSelect

        g2118:

    Endwhile

ENDPROC

Proc p3000' SUBROUTINE LINEAR REGRESSION

    XMEAN!=0

    WhileLoop n&:k&=&Boucle

        XMEAN!=XMEAN!+X![K&]

    Endwhile

    XMEAN!=XMEAN!/n&
    YMEAN!=0

    WhileLoop n&:k&=&Boucle

        YMEAN!=YMEAN!+Y![K&]

    Endwhile

    YMEAN!=YMEAN!/N&
    SUMX!=0

    WhileLoop n&:k&=&Boucle

        SUMX!=SUMX!+(X![K&]-XMEAN!)*(X![K&]-XMEAN!)

    Endwhile

    SUMXY!=0

    WhileLoop n&:k&=&Boucle

        SUMXY!=SUMXY!+(X![K&]-XMEAN!)*(Y![K&]-YMEAN!)

    Endwhile

    A!=SUMXY!/SUMX!
    B!=YMEAN!-A!*XMEAN!

ENDPROC

Proc p4000' SUBROUTINE CONSTANTS

    Si  CTYPE& = 3

        Goto "g4020"

    D'autre

        Goto "g4050"

    EndIf

    g4020:
    C!= -1.0/A! : D!= -B!/A! : Goto "g4210"
    g4050:

    Si  CTYPE& = 7

        Goto "g4070"

    D'autre

        Goto "g4090"

    EndIf

    g4070:
    C!=Exp(B!) : Goto "g4210"
    g4090:

    Si  CTYPE& = 8

        Goto "g4110"

    D'autre

        Goto "g4130"

    Endif

    g4110:
    C!=Exp(B!) : Goto "g4210"
    g4130:

    Si  CTYPE& = 10

        Goto "g4150"

    D'autre

        Goto "g4180"

    EndIf

    g4150:
    C!=Exp(B!):D!= -1*A! : Goto "g4210"
    g4180:

    Si  CTYPE& = 11

        Goto "g4200"

    D'autre

        Goto "g4210"

    EndIf

    g4200:
    C!=Exp(B!)
    g4210:

ENDPROC

Proc p5000' SUBROUTINE RESULTS

    CLS

    Select CTYPE&

        CaseOf 1

        Imprimer "  F(X) = A*X +B"
        Imprimer
        Imprimer "    A  = ",A!
        Imprimer "    B  = ",B!
        Goto "g5120"

        caseof 2

        Imprimer "  F(X) = A/X + B"
        Imprimer
        Imprimer "    A  =",A!
        Imprimer "    B  =",B!
        Goto "g5120"

        caseof 3

        Imprimer "  F(X) = D/(X + C)"
        Imprimer
        Imprimer "    C  =",C!
        Imprimer "    D  =",D!
        Goto "g5120"

        CaseOf 4

        Imprimer "  F(X) = 1/(A*X + B)"
        Imprimer
        Imprimer "    A  =",A!
        Imprimer "    B  =",B!
        Goto "g5120"

        CaseOf 5

        Imprimer "  F(X) = X/(A + B*X)"
        Imprimer
        Imprimer "    A  =",A!
        Imprimer "    B  =",B!
        Goto "g5120"

        CaseOf 6

        Imprimer "  F(X) = A*Ln(X) + B"
        Imprimer
        Imprimer "    A  =",A!
        Imprimer "    B  =",B!
        Goto "g5120"

        CaseOf 7

        Imprimer "  F(X) = C*Exp(A*X)"
        Imprimer
        Imprimer "    A  =",A!
        Imprimer "    C  =",C!
        Goto "g5120"

        CaseOf 8

        Imprimer "  F(X) = C*X^A"
        Imprimer
        Imprimer "    A  =",A!
        Imprimer "    C  =",C!
        Goto "g5120"

        caseof 9

        Imprimer "  F(X) = (A*X + B)^-2"
        Imprimer
        Imprimer "    A  =",A!
        Imprimer "    B  =",B!
        Goto "g5120"

        CaseOf 10

        Imprimer "  F(X) = C*X*EXP(-D*X)"
        Imprimer
        Imprimer "    C  =",C!
        Imprimer "    D  =",D!
        Goto "g5120"

        CaseOf 11

        Imprimer "  F(X) = L/(1+C*EXP(A*X))"
        Imprimer
        Imprimer "    L  =",L!
        Imprimer "    C  =",C!
        Imprimer "    A  =",A!

    EndSelect

    g5120:
    Imprimer
    Imprimer "K            Xk            Yk           F(Xk)       Error  "
    Imprimer "_______________________________________________"

    WhileLoop n&:k&=&Boucle

        X! = X1![K&]
        p1000' call SUBROUTINE FUNCTIONS
        ERRER!=Y1![K&] - F!
        Imprimer K&, X1![K&], Y1![K&], F!, ERRER!

    Endwhile

ENDPROC

Proc p6000' SUBROUTINE REFRESH

    WhileLoop  N&:k&=&Boucle

        X![K&]=X1![K&]
        Y![K&]=Y1![K&]

    Endwhile

ENDPROC

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



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

491 Views

Untitledvor 0 min.
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
R.Schneider28.05.2021
Michael W.28.05.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie