<Index kursus>

1114:

meer technieken uit de statistiek...

curve matching

het vinden van een funktie die met een gegeven kurve overeenkomt

Een probleem waarvoor we ons vaak geplaatst zien, is het vinden van een algebraische vergelijking die zo precies mogelijk een gegeven reeks input gegevens kan omzetten in een gewenste reeks output gegevens. Anders gesteld, we willen een vergelijking vinden die doorheen een gegeven (en eindige) reeks meetpunten gaat en die kontinu verloopt.

Voorbeelden zijn er te over:

Een van de meest gebruikte wiskundige technieken -vooral ontwikkeld ten behoeve van de statistiek en talloze empirische wetenschappen- bestaat erin een n-de graads vergelijking op te stellen waarbij met een minimum aan termen, de gewenste precizie zo goed mogelijk wordt gehaald. Dergelijke vergelijkingen hebben de algemene vorm:

y = c(0) + c(1)*x + c(2)*x^2 + c(3)* x^3 + c(4) * x^4 + ... c(n) * x^n

waarin C(0).... C(n) de coefficienten zijn van de n-de graads vergelijking.

Het zal duidelijk zijn de komplexiteit van de vergelijking erg stijgt met hogere waarden van n. Het vinden van de geschikte koefficienten is een wiskundig erg lastig probleem waarvoor vandaag gelukkig komputerprogrammas werden ontwikkeld. We geven hier de werkwijze met het programma GAUSFIT.EXE. (Dit programma, afkomstig van Paralax Inc., de makers van de Basic Stamps, waarover verder in deze kursus meer, moet gedownload worden: save to disk dus!)

Eerst en vooral maken we aan zuiver ascii bestandje aan, waarin we een reeks waarden voor input en output opgeven. Tussen elk koppel getallen moet een komma staan. Je gebruikt best Notepad of DosEdit om dit bestandje te maken. Dit bestandje noemen we gf.dat. De naam van dit bestand is hardgekodeerd in gausfit.exe en kan noch mag dus nooit anders heten. Het kan er bvb. uitzien alsvolgt:

100,68

101,69

102,71

103,73

104,76

105,79

106,83

107,87

108,93

109,100

Nu geven we in een command-venster (DOS window) volgende opdracht: GAUSFIT n waarbij n staat voor het aantal termen waartoe we ons willen beperken bij het berekenen van de koefficienten voor onze vergelijking. Probeer steeds eerst met lage waarden (1 ,2 of hooguit 3) en pas wanneer de rezultaten te ver zijn van de gewenste precizie, moeten we de waarde van n stap per stap gaan verhogen. Wanneer de opdracht is uitgevoerd, heeft dit twee output bestanden voor gevolg: gf-n.cof en gf-n.fit.

gf-n.cof, waarin n moet worden gesubsitueerd voor het aantal termen waarmee de gausfit instruktie werd gegeven, ziet er voor hiervoor gegeven data en met n=3 uit als:

1594.235

-16.82551

-.1275338

1.431852E-03

Deze koeficienten moeten in elk geval als singles worden gedefinieerd bij toepassing van de vergelijking, ook al willen we uiteindelijk slechts integers in het rezultaat. Dit bestand kan worden gelezen met NotePad of gewoon binnen dos met TYPE gf-n.cof. Onze vergelijking kan met deze coefficienten nu eenvoudig in PowerBasic worden geschreven als een gewone funktie:

FUNCTION MijnFunktie (BYVAL x AS SINGLE) AS SINGLE

STATIC tog AS BYTE

STATIC c() AS SINGLE

IF ISFALSE tog THEN

    DIM c(0 to 3) AS STATIC SINGLE

    C(0)=1594.235

    C(1)=-16.82551

    C(2)=-.1275338

    C(3)=1.431852E-03

    tog = %True

END IF

FUNCTION = C(0) + (C(1)* x) + (C(2) * (x^2)) + (C(3) * (x^3))

END FUNCTION

Om het vlug en numeriek testen van de rezultaten te vergemakkelijken dient de tweede gegenereerde file: gf-n.fit. Die ziet eruit als:

j Xd Yc Yd dY
0 100 68.19746 68 -.197464
1 101 69.12429 69 -.1242905
2 102 70.66357 71 .3364334
3 103 72.82426 73 .1757431
4 104 75.61458 76 .3854218
5 105 79.0435 79 -4.349518E-02
6 106 83.11922 83 -.1192245
7 107 87.85061 87 -.8506088
8 108 93.24624 93 -.2462387
9 109 99.31458 100 .6854172

In de j kolom (de plaatsing in een tabel deden we alleen om ze binnen html restrikties leesbaar te houden) vinden we het volgnummer in de lijst van de input gegevens. Xd geeft de input gegevens, de waarden voor x. Yc geeft de output waarden zoals ze volgen uit de funktie met de berekende koefficienten, terwijl Yd de opgegeven gewenste waarden weergeeft. De dY kolom geeft de afwijking tussen de berekende waarden en de gewenste. Wanneer bepaalde input/output gegevens belangrijker zijn dan andere (wanneer ze een groter gewicht in de schaal moeten werpen dus) dan kunnen we dat koppel meerdere malen in de input file plaatsen.


Filedatum: September 30, 2001

Naar inhoudstafel kursus: <Index-Kursus>

Naar Homepage dr.Godfried-Willem RAES