Ik zit met een probleempje met een programma wat ik aan het schrijven ben voor mijn rekenmachine (TI84+ van Texas Instruments). In het komende wiskunde proefwerk komt veel statistiek en daarbij veel normale verdelingen, en nu wil ik dus een programma schrijven zodat ik niet zoveel hoef in te tikken voor de normale verdelingen. Ik heb nu dit:
<? //kleur
Lbl S
Menu("Onbekende",linker grens",1,"rechter grens",2,"oppervlak",3,"mu",4,"sigma",5,"afsluiten",6)
// Deel 1, om de linker grens uit te rekenen
Lbl 1
ClrHome
Input "R=",R
Input "A=",A
Input "mu=",M
Input "sigma=",S
solve((normalcdf(L,R,M,S)-A),L,0,{-10^99,10^99})
Disp "X=",L
Pause
Goto S
// Deel 3, om het oppervlak te berekenen
Lbl 3
ClrHome
Input "L=",R
Input "R=",R
Input "mu=",M
Input "sigma=",S
normalcdf(L,R,M,S)->A
Disp "A=",A
Pause
Goto S
// Lbl 6, einde van het programma :)
Lbl 6
Het begin is enkel een menuutje om te kiezen welke optie van het programma je wil gaan gebruiken. Optie 3 heb ik al geschreven en die werkt ook prima (Dat is dus bij Lbl 3). Echter bij optie 1 begint het probleem. Ik weet niet precies hoe je de solver gebruikt in het programmeertaalte van de TI. Je hebt voor normale verdelingen de functie normalcdf(), maar die berekend het oppervlak voor de gegeven linkergrens, rechtergrens, mu (midden) en sigma (standaarddeviatie).
De solver onder het menuutje MATH optie 0, kan een vergelijking op 0 met meerdere variabelen oplossen. Om met een gegeven oppervlak dus de linkergrens uit te rekenen, zet ik de linkergrens (L) als variabele in de solver en trek ik het oppervlak (A) van het totaal af. Omdat normalcdf het oppervlak uitrekent, krijg je oppervlak minus oppervlak en moet het totaal dan dus 0 zijn.
In de solver zelf werkt dit uitstekend, maar in mijn programma niet. Het probleem zit hem dus waarschijnlijk in deze regel code:
Zonder de onder/bovengrens tussen de accoladen krijg je een syntaxis error en dat lijkt me ook logisch want het zijn de grenswaarden waartussen de uitkomst ligt. In de gewone solver (niet als functie voor programma) moet je die ook aangeven..
Dit is het dus niet.. Enig idee nog?
Edit: de syntax error kwam door een haakjes foutje van mezelf. Nu rekent de solver wel wat, maar geeft niet de juiste waarde aan de variabele L. L geeft altijd hetzelfde getal, wat ik vantevoren kan invullen (123 -> L). De variable L krijgt dus geen waarde toegekend door de solver. Ook met de standaard variabele X werkt dit niet. Wie helpt me verder?
Blue - 17/01/2007 23:53 (laatste wijziging 17/01/2007 23:56)
Nieuw lid
waarschijnlijk is je schatting niet goed genoeg, de syntax klopt iig
bij sommige functies moet je hierin heel precies zijn door de manier waarop word gesolved (nl. methode van newton).
ik heb ff wat zitten klooien:
solve( normalcdf(L,1,1,1)-.1 , L , 1)
geeft: .746...
EDIT: ff je edit gelezen, je moet hem ook in L opslaan:
solve((normalcdf(L,R,M,S)-A),L,0,{-10^99,10^99}) -> L
De schatting wordt gebruikt als startwaarde voor de berekening. Omdat alle entries variable zijn neem ik hiervoor 0, zodat hij alle waarden uitrekent. De 'schatting' is er toch enkel voor het rekenwerk wat sneller te laten gaan, voor wanneer je zeker weet dat je uitkomst boven de 50 ligt ofzo?