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