Polynoom
Wat gaan we maken?
Start het elm programma powfuncpointsdraw.elm. Je ziet het volgende:



In het vakje links onder kun je de a, b en c invullen voor functies van de vorm:
y = ax2 + bx + c
Vul in het vakje links onder 5 in en druk op Enter.
Je ziet nu de grafiek voor de functie y=5 voor -100 =< x =< 100.
Vul in het vakje links onder 1,0 in en druk op Enter.
Je zie nu de grafiek voor de functie y=x voor -100 =< x =< 100.
Vul in het vakje links onder 1,2 in en druk op Enter.
Je zie nu de grafiek voor de functie y=x+2 voor -100 =< x =< 100.
Vul in het vakje links onder 1,0,0 in en druk op Enter.
Je zie nu de grafiek voor de functie y=x2 voor -100 =< x =< 100.
Vul in het vakje links onder 1,0,-4 in en druk op Enter.
Je zie nu de grafiek voor de functie y=x2-4 voor -100 =< x =< 100.
Vul in het vakje links onder 1,2,-4 in en druk op Enter.
Je zie nu de grafiek voor de functie y=x2+2x-4 voor -100 =< x =< 100.
Vul nog wat andere waardes in voor a, b en c in en kijk wat er gebeurt. Als je een half wilt invullen moet dat met 0.5 en een tiende met 0.1.
Vul vier getallen in en kijk wat er gebeurt.
Hoe pakken we het aan?
We gaan het vorige programma in Elm programmeren. Dit doen we met de volgende stappen.
- Maak een recursieve functie pow die een macht berekent
- Maak een recursieve functie powfunc die de waarde van y berekent voor de waarde van x.
- Maak een recursieve functie powfuncpoints die de waarden van y berekend met powfunc voor -10 <= x <= 10
- Gebruik het resultaat van powfuncpoints om een grafiek te tekenen voor -100 <= x <= 100
Maak pow
Je gaat een recursie functie pow maken. Deze functie pow heeft als invoer twee getallen g en m en geeft als uitvoer gm. Je gebruikt de functie pow later om functies te bereken van de vorm y = ax2 + bx + c. Daarom is de functie pow goed genoeg als je voor m alleen gehele positieve getallen mag gebruiken. De functie pow heeft als uitkomst een getal dat gm weergeeft.
Start het elm programma pow.elm. Vul in het vakje 2,3 in. Je vraagt nu om 23 te berekenen en het resultaat is 8. Vul nog wat meer waarden voor g en m in en check de uitkomst.
Start het elm programma mypow.elm dat je gekregen hebt. Elm geeft als foutmelding dat de functie pow ontbreekt. Dat klopt want dat is nu juist de functie die jij zelf moet schrijven.
Voeg de functie pow toe aan mypow.elm volgens de volgende omschijving. Pow heeft als invoer twee getallen g en m. Daarvan is g het grondtal en m de macht. Pow geeft als resultaat gm terug.
Gebruik daarbij recursie volgens dit schema:

Maak powfunc
Je gaat een recursieve functie powfunc maken voor functies van de vorm y = ax2 + bx + c. Deze functie powfunc heeft als invoer een waarde voor x en een lijst met de waarden voor a, b en c. In deze lijst zijn a, b en c opgeslagen als Floats. De functie powfunc heeft als uitkomst een getal dat de waarde van y weergeeft.
Start het elm programma powfunc.elm. De test in dit programma werkt met een vaste waarde voor x die 2 is. Vul in het vakje 2,3 in. Dit staat voor y=2x+3. Als x dus 2 is, komt hier 7 uit. Vul nog wat meer waarden voor a,b en c in en check de uitkomst.
Start het elm programma mypowfunc.elm dat je gekregen hebt. Elm geeft als foutmelding dat de functie powfunc ontbreekt. Dat klopt want dat is nu juist de functie die jij zelf moet schrijven.
Voeg de functie powfunc toe aan mypowfunc.elm volgens de volgende omschijving. Powfunc heeft als invoer een getal x en een lijst van Floats l. Daarvan is x de waarde van x en bevat l de waarden van a, b en c voor een functie van de vorm y = ax2 + bx + c. Powfunc geeft als resultaat de uitkomst terug van y voor de functie y = ax2 + bx + c waarbij x, a, b en c zijn ingevuld.
Gebruik daarbij recursie volgens dit schema:

Maak powfuncpoints
Je gaat een recursieve functie powfuncpoints maken om een List van Floats met x en y waarden voor functies van de vorm y = ax2 + bx + c te maken. Deze functie powfuncpoints heeft als invoer drie getallen c, s en e en een lijst met de waarden voor a, b en c. In deze lijst zijn a, b en c opgeslagen als Floats. De getallen c, s en e zijn achtereenvolgens de beginwaarde voor x, de stap waarmee x wordt opgehoogd en de eindwaarde van x. De functie powfuncpoints heeft als uitkomst een List van Floats met x en y waarden voor een bepaalde range van x.
Start het elm programma powfuncpoints.elm. De test in dit programma werkt met vaste waarden voor c, s en e. Deze waarden zijn -10, 1 en 10. Vul in het vakje 2,3 in. Dit staat voor y=2x+3. Je krijgt nu een lijst met waardes voor x en y voor -10 <= x <= 10.. Vul nog wat meer waarden voor a,b en c in en check de uitkomst.
Start het elm programma mypowfuncpoint.elm dat je gekregen hebt. Elm geeft als foutmelding dat de functie powfuncpoints ontbreekt. Dat klopt want dat is nu juist de functie die jij zelf moet schrijven.
Voeg de functie powfuncpoints toe aan mypowfuncpoints.elm volgens de volgende omschijving. Powfuncpoints heeft als invoer drie getallen c, s en e en een lijst met de waarden voor a, b en c. In deze lijst zijn a, b en c opgeslagen als Strings. De getallen c, s en e zijn achtereenvolgens de beginwaarde voor x, de stap waarmee x wordt opgehoogd en de eindwaarde van x. De functie powfuncpoints heeft als uitkomst een String met paren van x en y waarden met de door c, e en s opgegeven range van x.
Gebruik daarbij recursie volgens dit schema:

Maak powfuncpointsdraw
Kopieer je bestand mypowfuncpoints.elm naar mypowfuncpointsdraw.elm.
Voeg bovenaan in mypowfuncpointsdraw.elm het volgende toe:
import Svg exposing (..)
import Svg.Attributes exposing (..)
Vervang in mypowfuncpointsdraw.elm:
view model =
div []
[ input [onKeyDown KeyDown, onInput Input] []
, div [] [ text ("Result: " ++ model.outputData) ]
]
door:
view model =
div []
[ input [onKeyDown KeyDown, onInput Input] []
, svg [ viewBox "0 0 200 200", width "400px" ]
[ g [ transform "translate(100, 100) scale(1,-1)" ]
[ polyline [ fill "none", stroke "black", points model.outputData] []
, polyline [ fill "none", stroke "black", points(pointsListToString (powfuncpoints -100 1 100 [0]))] []
, polyline [ fill "none", stroke "black", points "0,-100 0,100"] []
]
]
]
Pas powfuncpointsTest zo aan dat de test gaat voor -100 <= x <= 100.
Uitleg
In het view model maak je een svg tag. Binnen deze svg tag maak je een polyline aan met als punten de uitkomst van:
model | outputData = powfuncpointsTest model.inputData
De andere twee polylines zijn de x-as en de y-as.
Zie https://www.w3schools.com/graphics/svg_polyline.asp als je meer over svg en polyline wilt weten.