Assenstelsels en het plotten van Functies in LOGO Nicky Van Thuyne [email protected] http://studwww.rug.ac.be/~nvthuyne/index.htm Herhaling van de Logo werelden • • • • Schildpadwereld Taalwereld Muziekwereld Sprokenwereld Doelstellingen • Wiskunde toegepast op LOGO • Tekenen van assenstelsels (les 1) • Functies (les 2) – Evalueren – Tekenen – Toepassingen Het Assenstelsel • Uit wat bestaat een assenstelsel? – 2 assen (horizontaal = Xas & verticaal = Yas) – Een nulpunt : punt met coordinaten (0,0) – Schaalfactoren : Deze zijn nodig om de eenheden op de assen aan te duiden Een voorbeeld Assenstelsel opbouwen (1) • Instellen van de schaalfactoren – Voor de X-as nemen we bv 10 – Voor de Y-as nemen we bv 10 • LOGO scherm gaat van –500 tot 500 • Dus dan hebben we 50 eenheden op de halve X-as en 50 op de halve Y-as. Assenstelsel opbouwen (2) • Een voorbeeld – Als we wensen het punt met coordinaat (2,3) aanduiden dan moeten we wat doen? – 2 * 10 stappen op de x-as – 3 * 10 stappen op de y-as Toegepast op logo ASSEN bepalen schaalfactoren 2 * halve Y-as tekenen 2 * halve X-as tekenen Functie ASSEN to ASSEN :xs :ys make "xschaal :xs make "yschaal :ys local "xrep local "yrep make "xrep int (xdim / :xschaal) make "yrep int (ydim / :yschaal) repeat 2 [yas :yrep rt 90 xas :xrep rt 90] end • Opslaan schaalfactoren • Aanmaken 2 locale variabelen die aantal eenheden aanduiden op halve assen • Tekenen van de assen zelf adv repeat Procedures Xas & Yas to XAS :xrep repeat :xrep [mark :xschaal] bk product :xrep :xschaal end to YAS :yrep repeat :yrep [mark :yschaal] bk product :yrep :yschaal end • Beide functies zijn analoog – “Aantal streepjes op de halve as” keer wordt de functie mark uitgevoerd – Daarna wordt terug gekeerd naar de oorsprong Helpfuncties & verder verloop to XDIM output 500 end to YDIM output 500 end to MARK :schaal fd :schaal cross :schaal end • Hulpfuncties die de “lengte” van halve Xas en Y-as weergeven • De functie mark die een platte T zal tekenen De functie Cross to CROSS :schaal local "bar make "bar :schaal / 10 lt 90 fd :bar bk 2* :bar fd :bar rt 90 end • Locale variabele die grootte van een half streepje bevat • En we nemen de schaalfactor gedeeld door 10 voor deze variabele • Daarna tekenen we het streepje Bewegen van de schildpad to SCHALEN :xs :ys :punt op list (:xs * first :punt) ( :ys * last :punt) end to SP :punt setpos schalen :xschaal :yschaal :punt end • In deze eerste procedure worden de ingegeven punten herschaald • En in de tweede wordt de schildpad naar de juiste positie gebracht in het assenstelsel Voorbeeld van herschaling • Stel we wensen een coordinaat (3, 3) aan te duiden • En de schaalfactoren voor de X-as en Y-as zijn respectievelijk 20 en 10 • Dan moeten we wat ingeven? • Antwoord : (60, 30) Toepassing : een huisje to HUISJE pu sp [1 1] pd sp [11 1] pu sp [0 5] pd sp [6 11] pu sp [6 8] pu sp [2 1] pd sp [2 4] pu sp [5 2] pd sp [5 5] pu home end sp [11 6] sp [1 6] sp [1 1] sp [12 5] pd circle :xschaal sp [4 4] sp [10 5] pd sp [4 1] sp [10 2] sp [5 2] Resultaat : het huisje Functies • Wat zijn functies? • Functies zijn wiskundige formuleringen van de volgende vorm : y = f(x) waarbij x en y variabelen zijn. • Een eenvoudig voorbeeld : y = 3x+2 Waarom nu functies? • Voor het tekenen van functies hebben we een assenstelsel nodig • Dit hebben we in de vorig les behandeld en zitten nog fris in het geheugen. • Maar toch een korte herhaling… Hoe functies tekenen • We kiezen een minimum en maximum waarde van x waarvoor we de functie gaan plotten (de grenzen genaamd) • We berekenen f(x) voor gekozen x (meestal min waarde) en duiden bekomen resultaat aan op assenstelsel • Daarna doen we hetzelfde voor een volgende waarde (bv x+1) en dit tot maximum waarde bereikt wordt Hoe een functie evalueren in LOGO? • Dit gebeurt met behulp van het volgende commando – Run [regel] • Een voorbeeld (op de commando lijn) – make “x 8 – Show run [3*:x–9] – Resultaat = 15 Procedure EVALX to EVALX :regel :x op run :regel end • Ingeven in command line is omslachtig • Dus steken we de evaluatie in een procedure • Vb : show Evalx [3*:x-9] 8 Hoe gaan we te werk? • We creëren een functie graph, die we gebruiken om de volledige functie af te beelden; deze roept een functie plot op die de afbeelding maakt De functie Graph to GRAPH :regel :x :max local "statelist make "statelist pos pu plot :regel :x :max pu setpos :statelist pd end • De argumenten zijn respectievelijk de functie, de startwaarde en het maximum • De beginpositie van de schildpad wordt opgeslagen om na het plotten van de functie (met dezelfde argumenten als de functie Graph) te kunnen terugplaatsen De functie Plot to PLOT :regel :x :max if :x > :max [stop] setpos list :xschaal * :x :yschaal * evalx :regel :x pd plot :regel :x + :inc :max end • Controle of maximum nog niet overstegen is • Eerste x evalueren en de schildpad naar het punt verzetten • Recursieve oproep naar plot met de zelfde regel en de zelfde waarde voor max maar andere waarde voor x. -> waarde van x verhogen met inc Extra procedure : Setinc to SETINC :num make "inc :num end • Waarom een extra procedure? • Antwoord : We zetten die waarde niet rechtstreeks in de procedure plot , omdat we nu we heel gemakkelijk de waarde ervan kunnen veranderen. Oefeningen/voorbeelden • Teken een assenstelsel factoren 10 10 • Zet waarde van inc op 1 • Teken de functie van y = 3x – 4 voor x gaande van –14 tot 14 • Teken nieuw assenstelsel factoren 50 50 • Plot functie x*x van –3 tot 3 • Corrigeer door ander inc te kiezen • Enz. Waarvoor kunnen we dit nu gebruiken ? • Sneller een schatting maken van de snijpunten van een functie met de assen. Of kan je de snijpunten van 2 functies vinden, dit kan je dan gebruiken voor het oplossen van stelsel en dergelijke. • Het kan ook gebruikt worden om de minima en maxima te vinden van een functie, dit kan je gebruiken bij afgeleiden en integralen. Oefeningen/voorbeelden • Opm : zoek zelf de beste waarden voor inc en grenzen • Bepaal ongeveer de snijpunten van de assen met de volgende functie : y = 0.3x – 4 • Zoek de snijpunten (ongeveer) van de volgende functies : y = (x-5)(x+4) en z = 0.7(x-2) • enz