MathCheck: miksi ja mitä?
16.4.2019
Antti Valmari
1. Johdanto
Opiskelijoiden enemmistön kyky matemaattis-loogiseen ajatteluun on vajonnut
uskomattoman alas.
Ilmeni TTY:n tietotekniikan ja jopa TTY:n matematiikan opiskelijoissa.
Jyväskylän tietotekniikassa on paljon lukion lyhyellä matematiikalla.
Saatetaan osata yksittäisiä asioita kuten että n bittiä esittää
2n vaihtoehtoa (20 / 32), mutta ei osata käyttää niitä.
Oppiminen vaatii riittävän ajan käyttämistä opiskelemiseen.
5 op, yksi periodi ~ 13 tuntia / viikko
esim. 6 kontaktituntia ja 7 tuntia kotitehtäviä / viikko
Useimmat opiskelijat eivät osaa opiskella matemaattisia asioita tehokkaasti
omatoimisesti.
Esimerkki: kananpalatehtävä
vuosi 1 piste 2
pistettä
2018 22 15
2019 29 58
Ratkaisuehdotus: ohjelma, joka tarkastaa lopullisen vastauksen (ja kirjaa
pisteet)
Esim. STACK
Opiskelija laskee laskun kotona ja syöttää lopullisen vastauksensa
ohjelmalle.
Ohjelma vastaa oikein / väärin.
Saa opiskelijat tekemään enemmän kotitöitä.
Ei auta pitkiä laskelmia vaativien tehtävien tapauksessa (vrt.
kananpalat 2018 ).
Tavoitteeni: ohjelma, joka
Tarkastaa koko laskelman (siis ei pelkästään lopputulosta).
Antaa muutakin palautetta kuin oikein / väärin.
Tukee uusia tehtävälajeja, kuten logiikka.
2. Esimerkkejä MathCheckin tarkastustavoista
Sieventäminen
Esitä `2 /(sin 2x)` yksinkertaisemmassa muodossa.
Miten käy triviaalilla vastauksella 2 / sin 2x ?
Vakavampi yritys:
ok_text
Sait tämän ratkaistua. Kerta kaikkiaan upeaa!
fail_text Poista kolme virheellistä riviä, niin alempaa vastauslaatikossa
piilossa oleva oikea vastaus pääsee tarkastukseen!
f_nodes 5 /*Kuinkahan pitkälle nyt onnistuu?*/
2 / sin 2x=
/*2-kert. kulman sini*/
2 / (2 sin x cos x) /*sievennös*/
= 1 / (sin x cos x)
/*`sin^2 al + cos^2 al = 1`*/
= (sin^2 x + cos^2 x) / (sin x cos x)
/*murtolukujen yhteenlasku*/
= (sin^2 x) / sin x + (cos^2 x) / cos x
/*sievennyksiä*/
= sin x + cos x
= (sin^2 x) / (sin x cos x) + (cos^2 x)
/ (sin x cos x) /*yht. tekijä*/
= (sin x) / cos x + (cos x) / sin x
= tan x + cot x
tai
Yhtälöt
Ratkaise `|log h^3| = log h + 4`.
ok_text Jee, se ratkesi!
equation
h = 1/10 \/ h = 100;
f_nodes 9
|log h^3| = log h + 4 /**/
<=> |3 log h| = log h + 4 /**/
<=> 3|log h| = log h + 4 /**/
<=> log h < 0 /\ -3 log h = log h + 4
\/ log h >= 0 /\ 3 log h = log h + 4 /**/
<=> log h < 0 /\ -4 log h = 4
\/ log h >= 0 /\ 2 log h = 4 /**/
<=> log h < 0 /\ log h = 1
\/ log h >= 0 /\ log h = 2 /**/
<=> log h = -1 \/ log h = 2 /**/
<=> h = 1/10 \/ h = 100
tai
Ratkaise `xi = 2+sqrt(xi)`.
ok_text No nyt on oikein 😄
equation
xi=4
ends
f_nodes 7
xi = 2+sqrt(xi)
⇔ xi - 2 = sqrt(ξ)
⇔ (ξ−2)^2 = ξ /**/
⇔ ξ^2−4ξ + 4 = ξ
⇔ ξ^2−5ξ + 4 = 0 /**/
⇔ ξ = (5+sqrt(25−16))/2
\/ ξ = (5−sqrt(25−16))/2
⇔ ξ = (5+3)/2 \/ ξ = (5−3)/2 /**/
⇔ ξ = 4 ∨ ξ = 1
tai
Etsi ne yhtälön `cos omega = 0` juuret, jotka ovat välillä `0
<= omega < pi`.
ok_text Tämänkin me osasimme!
equation
om=pi/2;
assume 0 <= om < pi;
cos om = 0
<=> om = pi/2 \/ om = 3pi/2
tai
Lausekepuut
Kirjoita lauseke, joka tuottaa kuvassa olevan lausekepuun.
ok_text No nyt meni oikein!
tree_compare
/*Vähennyslasku on vasemmalle liitännäinen.
Siis `8-5-2` tarkoittaa samaa kuin `(8-5)-2`.*/
8-(5-2);
8-5-2
tai
Kirjoita lauseke, joka tuottaa kuvassa olevan lausekepuun.
ok_text Oikein on!
fail_text Potenssilasku on oikealle liitännäinen.
tree_compare
(2^y)^n;
2^y^n
tai
Sijoita `x`:n paikalle `pi/2 + omega t` funktioon `sin^2 x +
e^x`.
ok_text Onnistuihan se!
tree_compare
sin^2(pi/2 + om t) + e^(pi/2 + om t);
sin^2 pi/2 + om t + e^x
tai
Yhteysriippumattomat kieliopit
Määrittele if -lause, jossa on pakollinen
then -osa ja vapaaehtoinen else -osa.
Sanat if, then ja else pitää erottaa muusta täsmälleen yhdellä
välilyönnillä, paitsi aivan alussa ja aivan lopussa.
Osa vastauksesta on annettu valmiina.
On vaikeaa (kenties mahdotonta) löytää tälle kielioppi, joka ei ole
moniselitteinen, mutta voit toki yrittää.
Kiellä
moniselitteisyys
ok_text Onnistuit!
CFG_set
I ::= "if E then L" | "if E then L else L"
E ::= M>N
L ::= M:=N | I
M ::= x
N ::= 0 | 1
;
CFG_set2
I ::= "if E then L" | "if E then L else L"
E ::= M>N
L ::= M:=N | I
M ::= x
N ::= 0 | 1
; CFG_compare
tai
Ilmaukselle voi pyytää jäsennyspuun.
ok_text Onnistuit!
CFG_set
I ::= "if E then L" | "if E then L else L"
E ::= M>N
L ::= M:=N | I
M ::= x
N ::= 0 | 1
; CFG_tree
"if x>0 then if x>1 then x:=0 else x:=1"
tai
Taulukot predikaattilogiikalla
Kirjoita kaava, joka sanoo, että taulukon `A[1...n]` sisältö
on palindromi.
ok_text !Oikein niekiO!
array_claim A[1...n]
f_nodes 16
AA i; 1 <= i < n: A[i] = A[n-i+1] <=>
AA i; 1 < i < n: A[i] = A[n-i]
tai
Kirjoita kaava, joka sanoo, että taulukon `B[0...n]`
ensimmäinen alkio on suurempi kuin viimeinen alkio.
ok_text Joo!
array_claim B[0...n]
f_nodes 9
n > 0 /\ B[0] > B[n] <=>
B[0] > B[n]
tai
Kirjoita lyhyt kaava, joka sanoo, että taulukon `T[0...k-1]`
jokainen alkio on jotain `T[0...k-1]`:n alkiota pienempi.
ok_text
Tästä vastauksesta ei kyllä näe mikä oli kysymys!
array_claim T[0...k-1]
f_nodes 3
AA i; 0 <= i < k: EE j; 0 <= j < k: T[i] < T[j]
<=>
AA i; 0 <= i < k: EE j; 0 <= j < k:
T[i] < T[j]
tai
Muuta
Propositiologiikka
Modulaarinen aritmetiikka predikaattilogiikalla
3. Kokemuksia
Terhi Kaarakan tekemä opetuskoe
Ensin opiskelijat laskivat 10 harjoitustehtävää käyttäen joko MathCheckiä tai Wolfram Alphaa.
Sitten he osallistuivat kokeeseen, jonka maksimipistemäärä oli 16.
käyttöaika < 1 tunti
≥ 1 tunti
`n` ka
`n` ka
Wolfram Alpha 19
7,2 31 8,2
MathCheck 26
7,1 30 9,7
Silloin MathCheckin palautteessa ei vielä ollut käyriä.
Yhteysriippumattomat kieliopit syksy 2018
Kyseessä oli MathCheck-tehtävä kurssilla, jolla melkein kaikki muut
tehtävät olivat perinteisiä.
Opiskelijat vastasivat demotilaisuudessa 18-kohtaiseen likert-lomakkeeseen.
Saatiin 28 täyttä tai melko täyttä lomaketta.
Osa oli jo kerännyt pakolliset pisteet, osalla oli kesken.
11 kohtaa p ≤ 0,1 %, vain 3 kohtaa p > 5 %
Poimintoja:
4,4 Tehtäväsarjan avulla oli mukavampi opiskella kuin perinteisillä
laskuharjoituksilla.
4,3 Uskon oppineeni tehtäväsarjan avulla enemmän kuin olisin oppinut
perinteisillä laskuharjoituksilla.
2,0 Yksittäisissä alatehtävissä oli monta liian vaikeaa.
4,0 Tehtäväsarjan läpikäynti demotilaisuudessa on tarpeellista (esim.
siksi että haluan tietää oikeat vastaukset niihin kohtiin, joita en saanut
tehdyksi).
2,0 Tehtäväsarja tekee samaa aihetta käsittelevät luennot tarpeettomiksi.
Muita omia havaintoja
Tehtävän rakentaminen veppisivuksi saa opiskelijat tekemään paljon enemmän
töitä.
Tätä tehtävää teki 43 syksyllä 2018.
Aikaisemman kokemuksen mukaan niin isoja perinteisiä tehtäviä ei tehdä juuri
lainkaan.
kananpalat jälleen
vuosi 1 piste 2
pistettä
2018 22 15
2019 29 58
Tehtävän rakentaminen veppisivuksi, jossa on tekstiä ja kysymyksiä
mahdollistaa ison päättelyn läpikäynnin.
Valitettavasti ei näytä siltä, että se johtaisi päättelytaidon oppimiseen.
Todella kevyellä tekniikalla voidaan mahdollistaa omatoiminen miettiminen
ja pänttääminen.
Tarkastellaan ensin tapausta `m <= n/2`.
Siinä pätee `M < n/2`, koska (mieti kukin välivaihe ensin itse ja sitten
katso opettajan selitys)
`M``=``M` on `m`:n arvolle rivin 4
lopussa annettu nimi.
Rivien 2 ja 4 ansiosta `m`:n arvo rivin 4 lopussa on
`n mod m`. `n mod m``<`Jakoyhtälön mukaan `0 <= I mod J < |J|`.
Nyt `I`:n paikalla on `n` ja `J`:n paikalla on `m`. `|m|``=`Luonnolliset luvut ovat 0, 1, 2, …, joten
ne kaikki ovat positiivisia tai nolla.
Siksi jokaiselle luonnolliselle luvulle `l` pätee `|l|=l`.
Kun aloitimme SYT-algoritmin käsittelyn, rajoitimme `n`:n ja `m`:n
luonnollisiin lukuihin. `m``<=`Sanoimme tämän pompulan alussa, että tässä pompulassa
puhumme
vain niistä tilanteista, joissa `m <= n/2` pätee.
`n/2`.
Käyttöliittymästä tuli alkuun valituksia, mutta pienet muutokset saivat ne
loppumaan melkein kokonaan.
Hyvin paljon on kiinni opettajan mielikuvituksesta keksiä tehtäviä ja
tehtäväsarjoja.
4. Muuta
MathCheck ei kirjaa pisteitä.
MathCheck ei tiedä kuka sitä käyttää.
Opiskelijan ei tarvitse nähdä kirjautumisen vaivaa.
Pisteet saadaan kirjattua käyttämällä MathCheckiä TIMin läpi.
Pisteiden kirjaaminen ei kuitenkaan ehkä ole pedagogisesti viisasta, katso
Gibbs 2010 .