Kun GeoGebran listoista poimitaan yksittäisiä tai useampia jäseniä, niin kannattaa käyttää Alkio-komentoa. Tutkitaan joitakin tapoja, miten Alkio-komentoa ja muutamaa muuta komentoa voi käyttää hyväksi listojen käsittelyssä. Listan yhden alkion poimiminen tulee tarpeelliseksi, kun GeoGebran tuottamista ratkaisuista halutaan valita vain yksi, vaikkapa lopullista arvojen sijoittamista varten tai kun haluan kopioida vastauksen LaTeX-koodin kaavaeditoriin. Artikkelin lopussa on linkki aiempiin kirjoittamiini lista-juttuihin.
määritelmä
Alkio(Element)-komennon syntaksi on Alkio( <Lista>, <Alkion sijainti> ) tai Alkio( <Matriisi>, <Rivi>,<Sarake> ). Tätä kirjoitettaessa huomasin, että GeoGebran tarjoamassa komennossa <Rivi> ja <Sarake> ovat väärin päin suomenkielisessä käännöksessä. Korjasin tämän käännökseen, se tullee näkyviin tulevissa versioissa.
N-ulotteisessa avaruudessa syntaksi on Alkio( <N-Lista>, <Indeksi1>, <Indeksi2>,…,<IndeksiN> ).
GeoGebra 5:ttä lukuun ottamatta GeoGebrassa toimii Alkio-komennon lyhennetty versio eli komento
Alkio(lista, 3)
on sama kuin
lista(3)
Tämä merkitsemistapa on todella kätevä ja se tekee listojen käsittelystä tutumman näköistä vaikkapa Pythonia harrastaneille.
kuvankaappaus GG6:sta
yksinkertainen esimerkki
Teen esimerkit GeoGebra 5:n CAS:issa. Samat komennot toimivat myös syöttökentässä ja muissa GeoGebra-versioissa. Käytetään esimerkkinä seuraavaa listaa.
Tuotetaan seuraavaksi kultaisen leikkauksen luku toisen asteen yhtälön ratkaisuna käyttämällä yhtälön kirjoittamisen jälkeen Ratkaise yhtälö -työkalua tai komennolla
OikeaPuoli-komennolla voi myös määrittää halutun yhtälön järjestysluvun yhtälölistassa tyyliin
OikeaPuoli({x=1, y=π,z=-π},2)
-> π
Ratkaisut-komento & bugi
Mikäli haluaa saada ratkaisut pelkkinä arvoina, eikä yhtälöinä, niin kannattaa käyttää Ratkaisut(Solutions)-komentoa. Merkitsen seuraavassa ratkaisulistaa nimellä rat.
tai vaikkapa antaa sievennykset lapsille kotitehtäväksi.
Tehdään yhtälöpari ja ratkaistaan se Ratkaise ja Ratkaisut -komennoilla. Annan yhtälöille nimet, jotta CAS-rivit pysyvät luettavina.
eq1:= (y=f(x))
-> eq1: y = x^(2) - x - 1
eq2:= (y=2x-1)
-> eq2: y = (2 * x) – 1
Ratkaise({eq1, eq2})
-> {{x = 0, y = -1}, {x = 3, y = 5}}
Kun käyttää Ratkaisut-komentoa tuleekin pieni yllätys.
Jos komentoon ei lisää muuttujalistaa niin ratkaisumatriisissa vasen sarake onkin y ja oikea sarake x. Tämä taitaa olla bugi.
Matriisissa alkion poimimisen syntaksi on Alkio(<Matriisi>, <Rivi>, <Sarake>), niinpä edellisen ratkaisun ensimmäisen ratkaisun toinen arvo eli y:n arvo saadaan
Alkio( {{0, -1}, {3, 5}}, 1,2)
-> -1
Moniulotteisissa listojen listoissa poimiminen tapahtuu samalla logiikalla. Koska en ole niitä itse koskaan tarvinnut, jätän niiden tutkimisen lukijalle.
Alkioiden sijoittamisesta, järjestelystä yms. komennoista olen aiemmin kirjoittanut Listat GeoGebrassa -artikkelissa.
Linkit
Aiempia artikkeleita. Kolme ensimmäistä on julkaistu myös Dimensiossa.
Millä todennäköisyydellä kolmea noppaa heitettäessä saadaan summaksi 10? Havainnollistetaan tilannetta kolmiulotteisesti käyttämällä GeoGebran listoihin liittyviä komentoja. Teen sovellukseni GeoGebra 5:llä ja komennot kirjoitan Syöttökenttään.
Luodaan ensin kaikki tulosvaihtoehdot pisteiksi
kolmiulotteiseen koordinaatistoon käyttämällä kolmea sisäkkäistä Jono-komentoa.
Jos tämän kirjoittaa käsin, niin kannattaa ensin kirjoittaa
Paremman havainnollistuksen saa, kun katsoo listaa CAS-ikkunassa.
3D-piirtoalueella lista pisteet näyttää tältä.
Listan pisteet pituus on kuusi. Luodaan yksi lista, jossa pisteet ovat peräkkäin listana käyttämällä Tiivistä-komentoa. Se ikään kuin poistaa ylimääräiset sulkeet eli tässä tapauksessa turhat listat.
Jotta saamme ongelmastamme hieman yleisemmän, luodaan liuku
n. siten, että se saa kokonaislukuarvoja välillä [1, …, 20]. Tuossa on pari
ylimääräistä lukua, mutta ne toiminevat tarkastuksena, että menetemä on oikea.
Kirjoitetaan syöttökenttään
n = 10
ja klikataan Algebra-ikkunassa sen vasemmalla puolella olevaan pallukkaan. Klikkaamalla liukua hiiren oikealla painikkeella saadaan ominaisuudet ja Liukusäädin ikkunassa:
Seuraavaksi selvitetään, millä kaikki-listan pistellä summa on yhtä suuri kuin n.
Tässäkin voisi käyttää sisäkkäisiä jono-komentoja, mutta ehkä tyylikkäämpää on käyttää Zip-komentoa. Komennon yleinen syntaksi on seuraava
Selvennetään Zip-komentoa esimerkillä. Jos lista A = {1, 2, 3} ja B = {4, 5, 6, 7}, niin komento
testi = Zip((a, b), a, A, b, B)
tuottaa listan
testi = {(1, 4), (2, 5), (3, 6)}
Komennossa a on listan A alkioihin liittyvä sisäinen muuttuja ja b liittyy B:n alkioihin. Tässä tapauksessa (a, b) tuottaa pisteitä siten, että ensin otetaan ensimmäinen alkio A:sta ja ensimmäinen B:stä eli (1, 4), sitten toiset alkiot eli (2, 5) ja sitten kolmannet (3, 6). Nyt kaikki A:n alkiot on käyty läpi ja ei tuoteta lisää pisteitä. Yleisesti tällä komennolla voidaan suorittaa komentoja useille listoille. Syntyvän listan pituuden määrittää lyhin lista. Itse käytän Zipiä useimmiten, kun haluan käydä yhden listan kaikki alkiot kerralla.
Luodaan lista suotuisille tapauksille. Sisäinen muuttuja a käy läpi kaikki-listan alkiot. Jos-ehdon sisällä x(a) + y(a) + z(a) laskee a-pisteen koordinaattien summan.
suo = Zip(Jos(x(a) + y(a) + z(a) == n, a), a, kaikki)