Jono GeoGebrassa

Päivitän tämän tarinan lopullista versiota omaan blogiini. Siellä tullee olemaan myös tarinan lopullisen version pdf-tiedosto.

Tämä on kolmas osa trilogiastani, joka liittyy GeoGebran listoihin. Aikaisemmat  osat: Listat GeoGebrassa ja Sovituskomennot GeoGebrassa.

GeoGebran Jono-komento (Sequence) vastaa perinteisissä ohjelmointikielissä for-next -silmukkaa. Sen avulla saadaan luotua tarvittaessa pitkiäkin listoja, joiden jäseninä voi olla muita GeoGebran objekteja; lukuja, pisteitä, yhtälöitä, taso- ja 3D geometrian objekteja jne.

Jonon kielioppi

Jonoa voi käyttää monella eri syntaksilla, sillä voi olla 1 – 5 syötettä. Tutustutaan näihin esimerkkien avulla. Kirjoitan seuraavassa komennot GeoGebra Classic 5:n CAS:iin tai Syöttökenttään. GeoGebra 6:n CAS:issa komennot toimivat täsmälleen samalla tavoin.

Kun syötteenä on yksi luku n, niin Jono tuottaa listan, jonka alkioina ovat luvut 1, …, n.

Jono(5)
→ {1, 2, 3, 4, 5}

Kun syötteenä on kaksi lukua ja n, niin Jono tulostaa listan, jonka alkioina ovat luvut m, …, n.

Jono(3,8)
→{3, 4, 5, 6, 7, 8}
Jono(8, 3)
→ {8, 7, 6, 5, 4, 3}

Kun syötteenä on kolme lukua m, ja k, niin Jono tulostaa listan, jonka alkioina ovat luvut m:stä n:ään siten, että m:stä alkaen otetaan joka k:s luku n:ään asti. Listan alkiot muodostavat aritmeettisen jonon.

Jono(2,13,3)
→ {2, 5, 8, 11}
Jono(1/2, 42/13, 1/3)
→ {0.5, 0.833, 1.167, 1.5, 1.833, 2.167, 2.5, 2.833, 3.167}

Kun Jonon syötteessä on viisi oliota, niistä ensimmäinen on muuttujan sisältävä lauseke, toinen on muuttuja, kolmas muuttujan ensimmäinen arvo, neljäs muuttujan viimeinen arvo ja viides askelväli. Viimeisen voi jättää pois, jolloin askeleen pituus on yksi. Jos käyttää muuttujaa Jonon lausekkeessa, niin GeoGebra pyrkii tuottamaan tuloste listaansa tarkat arvot.

Jono(k^2, k, -3, 3)
→ {9, 4, 1, 0, 1, 4, 9}
L1: =Jono(k,k,1/2,42/13,1/3)
→ L1≔{1/2, 5/6, 7/6, 3/2, 11/6, 13/6, 5/2, 17/6, 19/6}
Summa(L1)
→ 33/2

Komento Summa laskee syötelistan alkioiden summan.

Katsotaan muutamia esimerkkejä, mitä Jonolla saa aikaiseksi. Luodaan ensin liu’ut ala, ylä ja väli. Niiden avulla voidaan säätää Jonon muuttujia. Luodaan ensin kaksi suoraparvea: = k x ja = k. Kirjoitetaan CAS:iin tai syöttökenttään

ala≔5
→ ala:=5
ylä:=5
→ ylä:=5
väli:=5
→ väli:=5

Kun klikataan Algebraikkunassa tai CAS:issa vasemmalla olevaan ympyrään, niin liu’ut ilmestyvät näkyviin piirtoalueelle. Luodaan origon kautta kulkevista suorista lista1 ja y-akselin suuntaisista suorista lista2.

lista1:=Jono(y = k x,k,ala,ylä,väli)
→ lista1:={y = (-5 / 2 * x), y = (-11/ 5 * x), …, y = 19/5}

ja y-akselin suuntaiset suorat

lista2:=Jono(x = k,k,ala,ylä,väli)
→ lista2:={x = -5 / 2, x = -11 / 5, … , x = 19 / 5}

Esimerkki

Edellisessä esimerkissä tuotettiin suoria, luodaan seuraavaksi (x, y) pisteitä koordinaatistoon. Michael Borcherds’n ja Dag Oscar Madsenin LinkedIn keskustelusta löytyi seuraava mielenkiitoisia kuvioita tuottava yhden rivin pisteistö. Tässä inc-liukusäädin saa Ominaisuudet -ikkunassa arvoja: Min: 0.01,Max:1, ja Askelväli: 0.01. Kun muuttujan inc arvoa muuttaa, pisteet näyttävät joillain arvoilla tuottavan kauniita käyriä. Miksiköhän?

Jono((ln(n), sin(n)), n, 1, 1000, inc)

Tähti

Joskus kaukaisessa menneisyydessä 1980-luvun lopussa tutustuin Logo-ohjelmointiin. Logon kilpikonnagrafiikan avulla sai yksinkertaisilla ohjelmanpätkillä mielenkiintoisia kuvia tasolle. Logon innoittaman innostuin tutkimaan tähtikuvioita ihan omaksi ilokseni.

Tehdään sovellus, jonka avulla voi tutkia tähtikuvioita, joiden kärjet ovat yksikköympyrään piirretyn säännöllisen monikulmion kärkipisteissä. Aluksi luodaan liukusäätimet ja m. Liukujen asetuksissa saa arvot Min:3, Max:50, Animaatioaskel:1 ja arvot Min:1, Max: n-1 ja Animaatioaskel: 1. Luodaan seuraavaksi yksikköympyrään lista karjet säännöllisen monikulmion kärkipisteistä. Puolipiste pisteen erottimena tuottaa pisteet napakoordinaateissa.

karjet = Jono((1; aa 2π / n), aa, 1, n)

Monikulmio(A, B, n)-komento tuottaa säännöllisen n-kulmion, siten, että yksi sivu on jana AB. Komento karjet(x) tuottaa karjet listan x:n jäsenen.

kuvio1 = Monikulmio(karjet(1), karjet(2), n)

Tähtikuvion kärkiä varten tarvitaan jakojäännöksiä. Otetaan karjet listasta joka m:s jäsen, toistetaan tätä kertaa. Annetaan listalle nimi tkarjet. Koska listan jäsenet numeroidaan 1, …, pitää jakojäännökseen lisätä 1, jotta järjestysnumeroksi ei tulisi nolla.

tkarjet = Jono(karjet(Jakojäännös(i, n) + 1), i, 1, n m, m)

Kun Monikulmio-komennossa on syötteenä lista, niin se tuottaa monikulmion siten, että listan pisteet ovat kärkipisteinä. Tähtikuvio syntyy komennolla

Monikulmio(tkarjet)

Joillain muuttujien arvoilla ja syntyy tähtikuvioita. Esimerkiksi m= 5 ja n= 2 tuottaa pentagrammin. Usein kirjallisuudessa käytetään merkintää säännölliselle viisikulmiolle {5/1} ja pentagrammille {5/2}. Aina ei synny tähtikuviota {6/2} on kolmio ja {6/3} on jana. Joskus syntyy tähtikuvio, mutta siinä ei välttämättä ole kappaletta kärkipisteitä, {18/4} on tähtikuvio, jossa on 9 kärkeä.

Tästähän saa mielenkiintoisen tutkimustehtävän oppilaille. Milloin tulee tähtiä, milloin säännöllisiä monikulmioita ja milloin janoja? Itse asiassa ennen tätä oppilaat voisivat luokitella minkä tyyppisiä kuvioita eri n:n ja m:n arvot tuottavat. Millä n:n arvoilla ei synny lainkaan tähtiä? Millaiset n:n arvot tuottavat tähtiä kaikilla m:n arvoilla 1 < < n– 1? Lahjakkaammat oppilaat ja opettajat voivat myös pohtia löytämiensä lauseiden todistuksia.

Monte Carlon sammakko

Monte Carlo -menetelmässä käytetään satunnaislukuja, kun simuloidaan hankalan ongelman ratkaisua. Anders Skjäl esitti MAOL eKerhon Facebook-ryhmässä syyslomahupitehtävän: ”Sammakko hyppää yhden pituusyksikön satunnaiseen suuntaan ja sen jälkeen puoli pituusyksikköä uudessa satunnaisessa suunnassa. … Määritä sammakon lopullisen sijainnin todennäköisyysjakauma.” Hetken aikaa ongelmaa pohdittuani totesin, että tuo vaikuttaa ilkeältä integroimisongelmalta, niinpä päätin simuloida sammakon hyppelyä.

Luodaan hyppelyjä kuvaava muuttuja n. Toki tästä voi tehdä myös liu’un, mutta kannattaa pitää sen yläraja mielekkäässä kokoluokassa. Järkevä maksimikokoluokka on noin 10000-100000 riippuen koneen tehosta ja GeoGebra-versiosta.

n = 100

Ensin sammakko hyppää satunnaiseen pisteeseen, jonka napakoordinaatit ovat (1, α), missä kulma α valitaan satunnaisesti väliltä 0 ≤ α< 2 π. Sen jälkeen se hyppää samalla logiikalla (½, β). GeoGebra osaa laskea tämän tyyppisen vektoreiden yhteenlaskun pisteiden välisenä yhteenlaskuna. GeoGebran random()-funktio tuottaa satunnaisluvun. Niinpä sammakon hypyt saadaan simuloitua komennolla

sami = Jono((1; 2πrandom()) + (0.5; 2πrandom()), k, 1, n)
sami = {(1.42; 244.17°), (0.51; 119.69°), …, (1.46; 33.35°)}

Koordinaatistoon ilmestyy pisteitä ½ ja 3/2 -säteisten ympyröiden väliin. Koska sami-listan pisteet on esitetty napakoordinaateissa, niiden etäisyydet ovat sami-listan pisteiden ensimmäiset koordinaatit. Ne saa irrotettua napakoordinaateissa esitetystä pisteestä abs-komennolla, joka kertoo pisteen etäisyyden origosta. Vastaavasti suuntakulman saa arg-komennolla.

etlista = Jono(abs(sami(k)), k, 1, n)
etlista = {1.42, 0.51, …, 1.46}

Luodaan frekvenssien laskennassa tarvittavat välit listaan nimeltä luokat. Alaraja on 0,45, yläraja on 1,55 ja välin pituus 0,1.

luokat = Jono(0.45, 1.55, 0.1)
luokat = {0.45, 0.55, 0.65, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55}

Lasketaan etäisyyksien frekvenssit edellä luodun luokat-listan väleissä Frekvenssi(<Luokkarajalista>, <Datalista>)-komennolla.

f = Frekvenssi(luokat, etlista)
f = {17, 7, 4, 9, 2, 7, 8, 8, 6, 15, 17}

Frekvenssien arvot saa näkymään histogrammina Histogrammi(<Luokkarajalista>, <Korkeuslista>)- komennolla. Muutetaan arvot suhteelliseksi jakamalle ne luvulla n. Jotta pylväät näkyisivät nätisti, kerrotaan ne vielä luvulla 10. Nythän histogrammimonikulmion alaksi tuli 1! Miksi? Hannu Mäkiö laski tiheysfunktiolle sievän muodon.

histo = Histogrammi(luokat, 10 f / n)
tih(x) = Jos(0.5 ≤ x ≤ 1.5, (2x) / (π sqrt(1 - (5 / 4 - x²)²)))

Jätän lukijalle tämän tehtävän muokkaamisen kolmiulotteisen sammakon tapaukseen.

Brute force

Raa’an voiman eli Brute force -menetelmässä käytetään tietokoneen laskentatehoa numeeristen ongelmien ratkaisussa. Simo Kivelä vertaili blogikirjoituksessaan vuoden 1960 ylioppilastehtävän ratkaisemista erilaisilla ohjelmallisilla työkaluilla. Ratkaistaan GeoGebralla tehtävä: ”Laske kaikkien niiden positiivisten kolminumeroisten kokonaislukujen summa, jotka eivät ole jaollisia 9:llä eivätkä 11:llä.”.

Ratkaisussa tarvitaan hieman Boolen logiikkaa ja jaollisuusoppia. Komento Jakojäännös(<Jaettava>, <Jakaja>) antaa tulokseksi jakojäännöksen. Totuusehto ja merkitään GeoGebrassa joko && tai  ja erisuuruus != tai ≠. Niinpä saamme CAS:issa seuraavat totuudet eri luvuilla.

(Jakojäännös(99, 11)!=0)&&(Jakojäännös(99, 9)!=0)
→ false

Jakojäännös(22, 11) ≠ 0 ∧Jakojäännös(22, 9) ≠ 0
→ false

Jakojäännös(13, 11) ≠ 0 ∧Jakojäännös(13, 9) ≠ 0
→ true

Jos(<Ehto>, <Niin>, <Muuten>)-komento suorittaa Niin-kohdalla olevan komennon, mikäli Ehtoon tosi, muutoin suoritetaan Muuten-vaihtoehto. Muuten syötteen voi myös jättää pois. Luodaan lista yo, jossa on tehtävän annon luvut.

yo = Jono(Jos((Jakojäännös(n, 11)!=0)&&(Jakojäännös(n, 9)!=0),n,0), n, 100, 999)
yo = {100, 101, 102, 103, 104, 105, 106, 107, 0, 109, 0, …, 998, 0}

Summan saa laskettua Summa-komennolla, sen avulla olisi voinut laskea lukujen summan ilman Jono-komentoa.

Summa(yo)
a = 399996

Summa(Jos(Jakojäännös(n, 11) ≠ 0 ∧Jakojäännös(n, 9) ≠ 0, n, 0), n, 100, 999)
b = 399996

Brute force -menetelmä tuntuu meistä opettajista usein huijaukselta. Pitää muistaa, että todellisessa maailmassa on valtava määrä ongelmia, joita ei voi sievästi ratkaista koulussa opetetuilla siisteillä menetelmillä.

Sisäkkäiset silmukat

Tutkitaan seuraavaksi, miten Jono-komennolla saa sisäkkäisiä silmukoita. Tuotetaan koordinaatiston kokonaislukukukoordinaatteihin pisteitä. Koska komennosta tulee aika monimutkaisen näköinen kannattaa tehdä se osissa. Luodaan ensin pisteitä vaakasuunnassa.

pisteet=Jono( (i, 2), i, 1, 5)

Kopioidaan tämä komento ja kirjoitetaan sen ulkopuolelle uusi Jono-komento ja muutetaan pisteen y-koordinaatti.

pisteet2 = Jono(Jono( (i, j), i, 1, 5), j, 2, 4)

Jätän lukijalle tehtäväksi tuottaa suorakulmaisen särmiön kolmiulotteiseen avaruuteen tällä menetelmällä.

Tuotetaan seuraavaksi Pythagoraan kolmioita eli yhtälön  x^2 + y^2 = z^2 kokonaislukuratkaisuja z:n arvolla 13. Tälle ongelmalle löytyy useita eri ratkaisumenetelmiä. Käytetään brute force menetelmää sen kummemmin yrittämättä optimoida koodia. Käydään läpi kaikki arvot neliössä, jonka kärkien koordinaatit ovat (-13, -13), (-13, 13), (13, 13) ja (13, -13). Ehtolausekkeessa tarvittava yhtäsuuruusehto näppäillään = = tai ≟.

pyt = Jono(Jono(Jos((i² + j²) = = 169, (i, j)), i, -13, 13), j, -13, 13)

Komento tuottaa listaan paljon (?, ?) pisteitä ja sisäkkäiset kaarisulkeet.  Kaarisulkeista pääsee eroon Tiivistä-komennolla ja määrittelemättömistä pisteistä PoistaMäärittelemätön-komennolla.

pyt1 = Tiivistä(pyt)
pyt2 = PoistaMäärittelemätön(pyt1)

Yhdellä rivillä koodi olisi aika haastavaa lukea.

pyt3 = PoistaMäärittelemätön(Tiivistä(Jono(Jono(Jos(i² + j² ≟169, (i, j)), i, -13, 13), j, -13, 13)))

Jätän tämänkin ongelman yleistyksen 3D avaruuteen lukijalle kotitehtäväksi. Samalla kehotan kokeilemaan miten kuvan reikäinen kuutio tai marmelaadipyramidi on tuotettu. Voit myös pohtia mitä komento

janat = Jono(Jana((1, 0), Kärkipiste(Monikulmio((1; (360°) / n), (1; 2(360°) / n), n), m)), m, 1, n - 1, 1)

tekee ja miksi Tulo(janat) = n, kun on luonnollinen luku ja suurempi kuin 2? Komento Kärkipiste( Monikulmio, i)tuottaa monikulmion i:nen kärkipisteen.

 

 

Seuraavaksi kirjoittanen Zip-komennosta. Zip-komento vastaa monissa ohjelmointikielissä olevaa map-funktiota. Sen avulla voidaan käydä läpi kaikki syötelistojen jäsenet ja suorittaa niille komentoja. Moni Jono-komento muuttuu yksinkertaisemmaksi Zipin avulla.

Lue lisää

Korhonen, Luoma-aho, Rahikka. Geogebra -opas. MFKA 2012.

Reykjavikin luennon materiaali
https://www.geogebra.org/m/afbRGctJ – material/TWhJhFyC

Simo Kivelän blogiartikkeli
http://simokivela.blogspot.com/2017/11/ylioppilastehtava-ennen-ja-nyt.html

Lista GeoGebrassa blogiartikkelini
https://mikonfysiikka.wordpress.com/2018/05/15/listat-geogebrassa/

Star polygon MathWorldissa http://mathworld.wolfram.com/StarPolygon.html

Sammakko-ongelma Facebookissa
https://www.facebook.com/groups/155873227301/permalink/10156656313137302/

 

Mainokset

Lista

Tämä artikkeli on aluperin julkaistu sivulla https://mikonfysiikka.wordpress.com/2018/05/15/listat-geogebrassa/

Listat ovat GeoGebran tapa muodostaa kokoelmia erilaista objekteista. Esimerkiksi yhtälön ratkaisujoukko on GeoGebrassa lista. Mikäli haluaa oppia tekemään monimutkaisempia sovelluksia, niin kannattaa opiskella mitä listoilla voi tehdä. Tämän pitkähkön artikkelin jatko-osana tullee ilmestymään artikkelit Sovitus-, Jono- ja Zip -komennoista.

Lista

Lista on kokoelma GeoGebran objekteja. Listan jäsenet eli alkiot erotellaan pilkuilla ja ympärille laitetaan aaltosulkeet {}. Matematiikassa listaa vastaa lähinnä jono, ohjelmointia harrastaneille listan syntaksi on perinteinen. Listassa voi olla sama objekti jäsenenä useamman kerran ja listan jäsenten järjestyksellä on väliä.

{1, 2} == {2, 1}
 → false

Yllä olevassa esimerkissä kaksi peräkkäistä =-merkkiä tuottaa GeoGebrassa totuusarvon. Pyrin kirjoittamaan siten, että GeoGebran komennot (eli funktiot) kirjoitetaan GeoGebra 5-version CAS:iin. GeoGebran CAS solun tulosteessa näkyy nuoli →. Kun tekstissä viittaan GeoGebran komentoon, niin laitan komennon nimen lihavoituna ja englanninkielisen version lihavoituna kursiivilla. Komennot voi toki kirjoittaa myös syöttökenttään ja GeoGebran 6-versiosta lähtien näkyy Algebraikkunassa tuloste selkeästi. On muutamia listakomentoja, jotka eivät toimi CAS-ikkunassa.

Määritellään CAS:issa lista nimeltä L. GeoGebrassa muuttujan tai funktion määrittely tehdään merkkiparin ≔ avulla.

L := {-5, -2, 1, 4}
 → L:={-5, -2, 1, 4}

Tässä yhteydessä on hyvä oppia kolme eri merkitystä matematiikan yhtäsuuruusmerkille. GeoGebran CAS:issa ”=” tarkoittaa yhtälön yhtäsuuruutta y = 2 x + 1; yhtälöiden kuvaajat näkyvät piirtoalueella ja yhtälöistä voi CAS:issa ratkaista kirjainmuuttujia, ”≔” on muuttujan tai funktion määrittelyssä oleva merkki tyyliin;  a≔5 tai f(x)≔ 2x – 5 ja ==- tutkii totuutta 2==3. Seuraavissa esimerkeissä käytetään muuttujan L arvona kyseistä listaa. Listassa L on neljä alkiota eli sen Pituus (Lenght) on neljä.

Pituus(L)
 → 4

Listoille voi tehdä erilaisia matemaattisia operaatioita. Kannattaa kokeilla miten eri laskutoimitukset vaikuttavat listaan. Ja tietysti komennot Summa(Sum) ja Tulo(Product) toimivat.

2*L
 → {(-10), (-4), 2, 8}

L+L
 → {(-10), (-4), 2, 8}

L^2
 → {25, 4, 1, 16}

sin(L°)
 → {(-0.08715574274766), (-0.03489949670252), 0.01745240643728, 0.06975647374412}

Summa(L)
 → -2

Tulo(L)
 → 40

Listan n:s alkio saadaan Alkio-komennolla (Element). Alkio-komennossa on kaksi muuttujaa, lista ja järjestysluku.

Alkio(L, 3)
 → 1

Edellistä voi käyttää esimerkiksi seuraavasti. GeoGebran Ratkaise(Solve) komento ratkaisee yhtälön ja tuottaa ratkaisun listana, jossa ratkaisut ovat yhtälöinä. Tämä vastaa samaa, jos käytetään CAS:in Ratkaise-työkalua. Ratkaisut(Solutions)-komento tuottaa yhtälön ratkaisun tarkat arvot listana. Tutkitaan toisen asteen yhtälöä ja sen ratkaisuja. Laiskuuksissani määritän ensin funktion f ja käytän sitä komennoissa. Bonuksena GeoGebra piirtää kuvaajan Piirtoalueelle. Ratkaisut-komennon ratkaisulle käytän muuttujaa, jonka nimeän R:ksi.

f(x):=2x² - 4x – 5
 → f(x):=2x² - 4x – 5

Ra ≔ Ratkaise(f(x)=0)
{x = (-sqrt(14) + 2) / 2, x = (sqrt(14) + 2) / 2}

R:=Ratkaisut(f(x)=0)
{(-sqrt(14) + 2) / 2, (sqrt(14) + 2) / 2}

Lasketaan tarkistuksen vuoksi funktion arvo nollakohdissa ja yhtälön ratkaisujen tulo.

f(R)
 → {0, 0}

Alkio(R, 1)*Alkio(R,2)
 → -5/2

Toki edellisen olisi saanut laskettua tulon avulla.

Tulo(R)
 → -5/2

Tai käyttämällä yhtälöitä kertomalla yhtälöt puolittain.

Tulo(Ra)
 x^(2)= -5/2

Jono-komennon (Sequence) avulla voi helposti tuottaa erilaisia jonoja. Palaan Jono-komennon syvällisempään käyttöön ja sen syntaksiin tulevassa artikkelissa. Jono vastaa for-next -silmukkaa perinteisessä ohjelmoinnissa. Seuraavan esimerkin Jono-komennon ensimmäinen muuttuja on lauseke, tässä tapauksessa koordinaatiston piste (n, n^2), seuraavassa kerrotaan muuttuja nimi n, kolmas muuttuja on alkuarvo 0 ja viimeinen loppuarvo 5. Luodaan pisteitä koordinaatistoon.

 Pisteet: = Jono(n,n^2), n, 0, 5)
 → {(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)}

Koska lista Pisteet koostuu koordinaatiston pisteistä, niin sitä kutsutaan pistelistaksi. Taulukkolaskennassa on helppoa tuottaa pistelistoja. Valitaan kaksi saraketta ja hiiren oikean painikkeen valikosta Luo -> Pistelista. Kun tehdään toisen asteen polynomisovitus listan pisteille, saadaan tietysti alkuperäistä lauseketta vastaava polynomi. Fysiikan ja kemian opettajille GeoGebran Sovita-alkuiset komennot ovat aika mukavia, kun tutkitaan mittaustuloksia, palaan tähän aiheeseen myöhemmin.

SovitaPolynomi(Pisteet, 2)
 → x^2

Kuva1

Poimiminen ja lisääminen

Ensimmäinen(First)-komento tuottaa listan ensimmäisen alkion listana. Muistin virkistyksenä Alkio palauttaa alkion jäsenen, ei listaa. Useimmiten itse käytän Alkio-komentoa kun tarvitsen listan ensimmäistä arvoa.

Ensimmäinen(L)
 → {-5}

Alkio(L, 1)
 →-5

Viimeinen(Last) toimii kuten Ensimmäinen. Jostain kummasta syystä tätä kirjoitettaessa Alkio(L, Pituus(L)) tuottaa virheilmoituksen. Pitää selvittää asiaa.

Viimeinen(L)
 →{4}

Alkio(L, 4)
 →4

 Liitos (Append) lisää objektin listan loppuun, jostain kumman syystä se ei toimi etupuolelle, vaikka GeoGebran ohje niin kertookin.

Liitos(L,0)
 → {-5, -2, 1, 4, 0}

Liitä (Join) liittää yhden tai useamman lista yhdeksi.

 Liitä({1, 2, 3},{9, 8, 7})
 → {1, 2, 3, 9, 8, 7}

LisääListaan-komennon (Insert) avulla saa lisättyä alkioita haluamaansa paikkaan. Mikäli paikan järjestysluku on negatiivinen, niin paikka lasketaan lopusta alkaen Pythonin tyyliin.

LisääListaan( 13, {2,  4, 6, 8, 10}, 3)
 → {2, 4, 13, 6, 8, 10}

LisääListaan( {13, 42}, {2,  4, 6, 8, 10}, -3)
 → {2, 4, 6, 13, 42, 8, 10}

Poimi (Take) valitsee listasta alkioita. Ensimmäisessä esimerkissä poimitaan listan alkiot neljännestä alkiosta loppuun ja toisessa alkiot alemmassa toisesta neljänteen.

Poimi( {2, 4, 6, 8, 10}, 4)
 → {8, 10}

Poimi({2, 4, 6, 8, 10}, 2,4)
 → {4, 6, 8}

Poista(Remove)-komennon avulla voi poistaa alkioita jotka ovat toisessa listassa. Vain ensimmäinen alkio poistetaan.

Poista({1, 2, 2, 2, 3, 4, 5, 6, 7}, {2, 4, 6} )
 → {1, 2, 2, 3, 5, 7}

Edellisessä esimerkissä Poista-komento poisti toisen listan alkiot vain yhden kerran. Jos haluaa, että lista käyttäytyy kuin joukko-opillinen joukko, niin pitää käyttää apuna Yksinkertainen(Unique)-komentoa.

Yksinkertainen({1, 2, 2, 3, 4, 5, 6, 6})
 → {1, 2, 3, 4, 5, 6}

Joskus Jos-ehtoa käytettäessä Jono-komennon kanssa syntyy listoja, joissa on määrittelemättömiä alkioita. Ne saa pois PoistaMäärittelemätön(RemoveUndefined) -komennon avulla. Alla on etsitty kolmella jaollisia lukuja.

Lista:=Jono(Jos(mod(n, 3)==0,n), n, 10, 20)
 → {?, ?, 12, ?, ?, 15, ?, ?, 18, ?, ?}

PoistaMäärittelemätön(Lista)
 → {12, 15, 18}

Sekoittaminen ja arpominen

 Sekoita(Shuffle)-komento sekoittaa listan alkiot ja tuottaa uuden listan niistä.

Sekoita({"pataA", "herttaA", "ristiA", "ruutuA" })
 → {"herttaA", "ristiA", "pataA", "ruutuA"}

SatunnainenAlkio(RandomElement)-komento poimii satunnaisen alkion.

SatunnainenAlkio({"pataA", "herttaA", "ristiA", "ruutuA"})
 → pataA

Arpominen luvuista 1, 2, …, 666 olisi onnistunut myös komennolla

Satunnaisluku(1, 666)
 → 42

Lajittele (Sort) lajittelee, sen muuttujana olevan listan pienemmyysjärjestykseen. Jos listan alkiot ovat tekstiä, niin ne aakkostetaan.

Lajittele({3, 2, 1})
 → {1, 2, 3}

Järjestysarvo(OrdinalRank)-komento liittyy lukuarvojen suuruusjärjestykseen. Minulle ei tule mieleen tilannetta, jossa tätä tarvitsee käyttää, mutta ehkäpä jonain päivänä tätäkin tarvitaan. Järjestysarvo kertoo sen järjestysluvun, mikä alkioilla olisi ollut kun ne järjestetään pienemmyysjärjestykseen. Tasapelejä ei sallita. Oletetaan, että meillä on arvosanoja listassa ja käytetään Järjestysarvo-komentoa.

arvosanat:={4, 8, 5, 7, 7, 10, 7, 9}
 → arvosanat:={4, 8, 5, 7, 7, 10, 7, 9}

Järjestysarvo(arvosanat)
 → {1, 6, 2, 3, 4, 8, 5, 7}

Nyt tiedän, että arvosana 4 on pienin eli ensimmäinen, arvosana 8 on kuudes, arvosana 5 on toinen kyseisessä listassa.

Käytetään samaa listaa JaettuSijoitus(TiedRank)-komennolla. Nyt tasapelit on sallittu.

JaettuSijoitus(arvosanat)
 → {1, 6, 2, 4, 4, 8, 4, 7}

JaettuSijoitus-komennon luvut 4 kertovat, että arvosanat 7 ovat tasapelillä sijalla 4 ja arvosana 8 (joka oli toisena ensimmäisessä listassa) on sijalla 6.

Summa ja tulo

Summa(Sum) laskee jonon alkioiden summan. Summassa voi käyttää myös Jono-komennon  kaltaista syntaksia Summa( <Lauseke>, <Muuttuja>, <Alkuarvo>, <Loppuarvo> ).

L
 → {(-5), (-2), 1, 4}

Summa(L)
 → -2

Summa(Jono(1, 42))
 → 903

Summa(i, i, 1, 42)
 → 903

Tulo(Product) on kertolaskua, se toimii kuten Summa-komento.

Tulo(L)
 40

Tulo(i, i, 1, 42)
 → 1405006117752879898543142606244511569936384000000000

 

Yhdiste ja leikkaus

Tiivistä(Flatten)-komento tekee yhden lista useamman listan alkiosta. Käytännössä Tiivistä poistaa kaikki sisemmät aaltosulkeet listojen listasta.

Tiivistä({L, {L,{L}}, {1,2,3, {3, 2,1}}})
 → {(-5), (-2), 1, 4, (-5), (-2), 1, 4, (-5), (-2), 1, 4, 1, 2, 3, 3, 2, 1}

Yhdiste(Union) vastaa joukko-opin yhdistettä. Se yhdistää listat ja samalla poistaa ylimääräiset samat alkiot.

Yhdiste({1,2,2,3,3,3},{2, 3, 4, 5, 5})
 → {1, 2, 3, 4, 5}

YhteisetAlkiot(Intersection) vastaa joukko-opin leikkausta. Se tuottaa listan niistä alkioista, jotka ovat molemmissa listoissa.

YhteisetAlkiot({1,2,2,3,3,3},{2, 3, 4, 5, 5})
 → {2, 3}

Frekvenssi ja histogrammi

Frekvenssi(Frequency)-komento palauttaa listan, jossa on syötelistan alkioiden lukumäärät. Tällä komennolla on runsaasti erilaisia syötemahdollisuuksia.

Frekvenssi({(-5), (-2), 1, 4, (-5), (-2), 1, 4, (-5), (-2), 1, 4, 1, 2, 3, 3, 2, 1})
 →{3, 3, 5, 2, 2, 3}

Nyt tiedän, että lukuja -5 on 3 kappaletta, lukuja -2 on 3 kappaletta, ykkösiä on 5 ja niin edelleen. Luodaan luokkarajalista Jono-komennolla ja käytetään sitä frekvenssi-komennon ensimmäisenä syötteenä.

rajat:=Jono(n-.5,n, -5, 5)
 →rajat:={-5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5}

arvot≔Frekvenssi(rajat, {(-5), (-2), 1, 4, (-5), (-2), 1, 4, (-5), (-2), 1, 4, 1, 2, 3, 3, 2, 1} )
 →arvot≔{3, 0, 0, 3, 0, 0, 5, 2, 2, 3}

Näin saatuja listoja voi käyttää Histogrammi(Histogram)-komennon kanssa tuottamaan jakauman histogrammin piirtoalueelle.

Histogrammi(rajat,arvot)
 →18

Histogrammin saa näkymään CASissa kun klikkaa solun vasemmassa reunassa olevaa pallukkaa. Luku 18 on histogrammin muodostaman monikulmion pinta-ala.

Tässä vaiheessa on muistutettava, että GeoGebran taulukkolaskenta ja Yhden muuttujan analyysi -työkalu helpottaa huomattavasti tilastollisen aineiston käsittelyä.

Kuva2

Datafunktio

Datafunktio(Datafunction) tuli GeoGebraan sensorit-hankkeen myötä. Fysiikan ja kemian opettajien kannattaa tutustua tähän funktioon, vaikka sen toiminnallisuus ei hivele täydellisyyttä. Ajatuksena on ollut käyttää mobiililaitteista saatavaa anturidataa GeoGebran kanssa. Unkarilainen hanke on ollut käsittääkseni jäissä EU-rahoituksen puutteen myötä muutaman vuoden. Komento piirtää x-koordinaatti- ja y-koordinaatti -listasta kuvaajan ja muodostaa murtoviivan pisteiden välille. Peräkkäisten mittauspisteiden muodostavien janojen avulla saadaan integroituva, mutta ei derivoituva funktio. Tämä on yleinen tapa runsasta mittausdataa käyttävien ohjelmien kanssa. Datafunktion luomaa funktiota voi tutkia myös Funktion analysointi -työkalulla.

Luodaan paikka-niminen lista taulukkolaskentaan tuodusta mittausdatasta. Tätä funktiota tutkiessani havaitsin, että se ei toimi CAS:issa määriteltynä siten kuin haluan. Tämänkin ymmärtää, että runsaan datamäärän kanssa työskennellessä tarkat arvot eivät ole enää mielenkiintoisia. Niinpä pitää käyttää syöttökenttää. Alla oleva mittausdata on tuotu taulukkolaskentaan (hiiren oikea painike ja Tuo datatiedosto…). Sieltä valittu alue on määritelty paikka-nimiseksi pistelistaksi Luo pistelista-työkalun avulla.

paikka
 → { (0, 0.029), (0.05, 0.029), (0.1, 0.036), (0.15, 0.044), (0.2, 0.062), (0.25, 0.082), (0.3, 0.104), (0.35, 0.114), (0.4, 0.135), (0.45, 0.138), (0.5, 0.14)}

Datafunktio vaatii syötteekseen x-koordinaattilistan ja y-koordinaattilistan.

Datafunktio(x(paikka), y(paikka))
→ f(x) := Datafunktio[x]

Piirtoalueelle ilmestyy pisteet näkyy kuvaaja ja Algebraikkunassa näkyy uusi funktio.

Tälle funktiolle voi laske arvoja ja määrittää integraaleja. Jostain kumman syystä reunat eivät voi olla päätepisteiden x-arvojen suuruisia. Tämän funktion tutkiminen käynee helpoimmin Funktion analysointi-työkalun avulla. Syöttökenttä tuottaa

f(0.2)
→  0.062

Integraali(f, 0.1, 0.49)
≈ 0.037

Kuva3

Pudotusvalikko

Listan saa toimimaan pudotusvalikkona. Määritellään ensin lista, jossa on eri funktioita

arvot≔ {x, 2x, x², 2x²}
 → arvot≔ {x, 2x, x², 2x²}

Listasta saa pudotusvalikon, kun avaa Algebraikkunassa hiiren oikean painikkeen avulla lista ominaisuudet ja ruksaa kohdan Lista pudotusvalikkona. Piirtoalueelle ilmestyy pudotusvalikko. Komentojen ValittuAlkio(SelctedElement), ja ValittuIndeksi(SelectedIndex) avulla saadaan pudotusvalikosta valittu alkio tai sen indeksi muuttujan arvoksi. Jos arvot -pudotusvalikosta on valittuna x2 , niin

f(x):=ValittuAlkio(arvot)
 → f(x)≔ x²

indeksi:=ValittuIndeksi(arvot)
 → indeksi:=3

Samalla piirtoalueelle ilmestyy funktion f(x) = x² kuvaaja.

Kuva4png


 

Helppo menetelmä lisätä kieliä GeoGebra-työkirjaan

Maaliskuussa 2018 noin 10 pohjoismaista GeoGebra opettajaa saapui Helsinkiin Pohjoismaisen GeoGebra -verkoston seminaariin. Tapaamisemme liittyi Reykjavikin VIII Nordic/Baltic GeoGebra konferenssin teemaan siirtolaisuus ja matematiikan oppiminen.

Tapaamisemme merkittävin tuotos oli menetelmä, jonka avulla on suhteellisen helppoa lisätä eri kielien käännöksiä GeoGebra työkirjaan. Esitän tässä mitä keksimme. Käytän apuna fysiikan sovellusta ”Liikkeen perusprobleema” (kiitos Jussi alkuperäisestä ideasta, tämä on pieni häive siitä Java-ohjelmasta, jonka loit joskus 90-luvulla), jossa on kolme käännettävää tekstiä: kiihtyvyys, nopeus ja kuljettu matka. Unohdin käännättää kiihtyvyyden, joten unohdetaan se. Toki lopulliseen versioon oli tulossa yksiköt mukaan :o)

eka.png

Loimme seminaarissamme Google Sheets-tiedoston, jonne lisäsimme käännettäviä sanoja ja virkkeitä ja käänsimme ne omille äidinkielillimme. Teoriassa tämä tiedosto voisi olla julkinen tai ainakin julkinen kaikille kääntäjille. Minä lisäsin taulukkoon distance, matka, velocity, ja nopeus. Pohjoismaiset vieraamme käänsivät muut kielet.

Valitsin oheisessa taulukossa alueen A6:G7 ja kopioin sen.Help_us_translate_-_Google_Sheets.png

Avasin GeoGebran ja Näytä valikosta taulukkolaskennan. Sijoitin solusta B2 alkaen. Kopion Google Sheetsistä Alueen A1:G1 ja sijoitin GeoGebran taulukkoon soluun alueelle A1:G1.

Seuraavaksi loin tarvittavat listat, jossa käännökset ja kielten nimet ovat tekstinä. Tämä onnistui, kun valitsin GeoGebra työkirjassa alueen (miksiköhän tein ne tässä järjestyksessä, en muista) A2:G2 ja valitsin työkalun Luo Lista. Annoin listalle nimen L_1 eli L1. Vastaavalla tavalla loin listat L_2 (matka) ja L_3 (kieli). Algebraikkunassa näkyi listojen arvot.

kielet.png

Valitsin listanL_3 ja hiiren oikealla painikkeella sain näkyviin listan ominaisuudet. Sieltä klikkasin Piirrä pudotusvalikkona. Piirtoalueelle ilmestyi pudotusvalikko.

listan ominaisuudet.png

Seuraavaksi loin muuttujan, joka kertoi pudotusvalikosta valitun kielen indeksin. Kirjoitin syöttökenttään
a = ValittuIndeksi(L_3). Kun islanninkieli oli valittuna a:n arvo oli 4.

Valittua kieltä vastaavat käännöksille annoin nimet mat ja nope. Ne määriteltiin Alkio-komennolla. Alkio(lista, n) valitsee lista-nimisen listan n:n alkion.
mat = Alkio(L_1, a) ja nop = Alkio(L_2, a).

Tekstialueelle valitsin Objektit-valikosta muuttujan mat, kirjoitin =-merkin ja Objektit valikosta nopeus-muuttujan, joka oli jo aiemmin määritelty nopeuden arvo. Lisäsin myös yksikön. Valitsin ruksin Latex-kaavan kohdalle, näin varmistan, että poikkiviivat \\ tuottavat rivinsiirron ja Latex koodi \; on välilyönti. Samalla tavoin määritin nopeusrivin.

Teksti_ja_material-NpTdSgF4_ggb_ja_Edit_Post_‹_Mikon_fysiikka_ja_matikka_—_WordPress_com.png

Lopuksi suljin ylimääräiset ikkunat ja julkaisin työkirjan GeoGebra Materiaaleissa. Tiedosto löytyy osoitteesta https://ggbm.at/rDy3FTV2. Lataa tiedosto omalle koneellesi ja tutki tiedostoa.

Speed__distance_translated_-_GeoGebra

Kiitokset tämän menetelmän luomisesta kuuluvat kaikille GeoGebra-seminaarissa olleille: Freyja, Susanne, Per Magnus, Sirje, Kaja, Hannes, Janika, Camilla, Jonas, Anders, Svetlana, Hannu, Lauri ja minä.

Meinasi unohtua, Svetlana ja Anders käänsivät yhden oman hieman monimutkaisemman tiedoston ja tekivät oheen videon miten käännös tuotettiin. https://ggbm.at/hXAkT8p8

Mikko