Simo K. Kivelä
Tarkoituksena on antaa aineksia pohdiskeluun, miten symboliset laskentaohjelmat saattavat muuttaa matematiikan opetusta ja samalla julkaista ylioppilastehtävien ratkaisut. Koska ylioppilaskokeessa ei symbolisia ohjelmia käytetä eikä tehtäviä ole laadittu tällaista ratkaisemista ajatellen, ei oheisia ratkaisuja voida pitää minkäänlaisina malliratkaisuina. Ne eivät myöskään sisällä mitään informaatiota kokeen arvosteluperusteista.
Ratkaisuissa selitykset ja perustelut on jätetty mahdollisimman vähiin. Toivon kuitenkin, että ratkaisujen idea tulee ymmärrettäväksi. Jotkut käytetyistä komennoista saattavat olla tottuneellekin käyttäjälle outoja. Tarvittaessa on syytä turvautua Mathematican dokumentaatioon.
Kaikissa kohdin ratkaisut eivät hyödynnä parhaalla tavalla Mathematicassa olevia funktioita. HTML-version ulkoasussa on myös toivomisen varaa. Syy on yksinkertainen: Mathematica ei toimi, kuten dokumentaation perusteella voisi odottaa. Tämä ei sinänsä ole mullistavaa: Ohjelmistoissa on aina virheitä. Tuotteet tuodaan markkinoille raakileina. Olkaa varovaisia, jos suunnittelette ydinvoimalaa tms. tietotekniikkaa hyödyntäen.
SKK
In[1]:=
ehto1= kylki == kanta+1.5
Out[1]=
![]()
In[2]:=
ehto2= 2 kylki + kanta == 15
Out[2]=
![]()
In[3]:=
ratk= Solve[{ehto1,ehto2},{kylki,kanta}]
Out[3]=
![]()
In[4]:=
{kanta,korkeus}=
{kanta,Sqrt[kylki^2 - (kanta/2)^2]}/.Flatten[ratk]
Out[4]=
![]()
In[5]:=
ala= kanta korkeus/2
Out[5]=
![]()
Vastaus: 10.2
.
In[6]:=
Solve[192/jasenet == 192/(jasenet+2) + 8,jasenet]
Out[6]=
![]()
Vastaus: 6 jäsentä
In[7]:=
a= (1/x - x)/(1/x + 1)//Simplify
Out[7]=
![]()
In[8]:=
b= (x - 1)/(1 - 1/Sqrt[x])/(1 + 1/Sqrt[x])//Simplify
Out[8]=
![]()
In[9]:=
Solve[a==b,x]
Out[9]=
![]()
Vastaus: 1/2
In[10]:=
sokeria= 0.04 omenia
Out[10]=
![]()
In[11]:=
kuivaa= 0.20 omenia
Out[11]=
![]()
Kuivien omenien massa = niiden sisältämä vesi + kuiva-aine:
In[12]:=
ratk= Solve[kuiviaomenia == 0.20 kuiviaomenia + kuivaa,
kuiviaomenia]
Out[12]=
![]()
In[13]:=
sokeriprosentti= sokeria/kuiviaomenia/.Flatten[ratk]
Out[13]=
![]()
Vastaus: 16 %
In[14]:=
a= 5.27
Out[14]=
![]()
In[15]:=
b= 3.16
Out[15]=
![]()
In[16]:=
kulma= (72 + 50/60) Degree
Out[16]=
![]()
In[17]:=
etaisyys= Sqrt[a^2 + b^2 - 2 a b Cos[kulma]]//N
Out[17]=
![]()
Vastaus: 5.28 km
Puhdistetaan välillä työtilaan kertyneet muuttujat:
In[18]:=
Remove["Global`*"]
In[19]:=
karki= {1,2}
Out[19]=
![]()
In[20]:=
piste1= {4,6}
Out[20]=
![]()
In[21]:=
piste2= {13,-3}
Out[21]=
![]()
In[22]:=
vekt1= piste1 - karki
Out[22]=
![]()
In[23]:=
vekt2= piste2 - karki
Out[23]=
![]()
In[24]:=
suunta= vekt1/Sqrt[vekt1.vekt1] + vekt2/Sqrt[vekt2.vekt2]
Out[24]=
![]()
In[25]:=
suunta/Sqrt[suunta.suunta]//Simplify
Out[25]=

Vastaus: ![]()
In[26]:=
k= 1 - Exp[-2 x]
Out[26]=
![]()
In[27]:=
f= Integrate[k,x] + c
Out[27]=
![]()
In[28]:=
ratk= Solve[k==0,x]
![]()
Out[28]=
![]()
In[29]:=
cnarvo= Solve[(f/.First[ratk])==2,c]
Out[29]=
![]()
In[30]:=
f/.First[cnarvo]
Out[30]=
![]()
Vastaus: ![]()
In[31]:=
p[n_]:= a^n Exp[-a] / n!
In[32]:=
todennakoisyys= 1 - Sum[p[k],{k,0,4}]/.a->3//N
Out[32]=
![]()
Vastaus: 0.18
In[33]:=
keskus= {1,4}
Out[33]=
![]()
Määritellään projektiokuvaus:
In[34]:=
proj[{x_,y_}]:= Module[{},sade= keskus + t ({x,y} - keskus);
ratk= Solve[sade[[2]]==0,t]; sade/.First[ratk]]
In[35]:=
a= {0,1}
Out[35]=
![]()
In[36]:=
b= {4,3}
Out[36]=
![]()
Projisioidaan pisteet edellä määritellyn kuvauksen avulla:
In[37]:=
a1= proj[a]
Out[37]=
![]()
In[38]:=
b1= proj[b]
Out[38]=
![]()
In[39]:=
c= (a+b)/2
Out[39]=
![]()
In[40]:=
c1= proj[c]
Out[40]=
![]()
In[41]:=
a1 - c1 == c1 - b1
Out[41]=
![]()
Vastaus: välille
, ei ainakaan aina projisioidu tasaväliseksi
Piirretään ensin rombidodekaedri. Seuraavat syötteet päättyvät puolipisteisiin, joten pitkähköjä tulostuksia ei näytetä.
Määritellään yksi tahko ja kierretään sitä z-akselin ympäri uusiin asentoihin; tätä varten määritellään kiertokuvaus matriisin avulla:
In[42]:=
tahko= {{2,0,0},{1,1,1},{0,2,0},{1,1,-1},{2,0,0}};
In[43]:=
kiertomatr= {{0,1,0},{-1,0,0},{0,0,1}};
In[44]:=
kuvaus[matriisi_,kohde_]:=
Transpose[matriisi.Transpose[kohde]]
In[45]:=
tahkot1= {kuvaus[kiertomatr,tahko],
kuvaus[kiertomatr.kiertomatr,tahko],
kuvaus[kiertomatr.kiertomatr.kiertomatr,tahko],
kuvaus[kiertomatr.kiertomatr.kiertomatr.kiertomatr,tahko]};
Lisää sivutahkoja saadan kiertovaihtelulla:
In[46]:=
tahkot2= tahkot1/.{x_,y_,z_}:>{y,z,x};
In[47]:=
tahkot3= tahkot2/.{x_,y_,z_}:>{y,z,x};
Määritellään tahkot läpinäkymättömiksi monikulmioiksi:
In[48]:=
rombidode= Map[Polygon,Flatten[{tahkot1,tahkot2,tahkot3},1]];
Lisätään rombidodekaedrin sisällä olevan kuution kärjet, jotta saadaan havainnollisempi kuva:
In[49]:=
kuutionkarjet= Map[Point,{{1,1,1},{1,1,-1},{1,-1,1},{1,-1,-1},
{-1,1,1},{-1,1,-1},{-1,-1,1},{-1,-1,-1}}];
Piirretään:
In[50]:=
Show[Graphics3D[{PointSize[0.03],kuutionkarjet,rombidode}],
ViewPoint->{0.4,-4,1.5},Shading->False,
BoxRatios->{1,1,1},Boxed->False]
![[Graphics:HTMLFiles/k00prtk_44.gif]](HTMLFiles/k00prtk_44.gif)
Out[50]=
![]()
Voidaan myös muodostaa rautalankamalli ja piirtää se:
In[51]:=
rautalankamalli=
Map[Line,Flatten[{tahkot1,tahkot2,tahkot3},1]];
In[52]:=
Show[Graphics3D[{PointSize[0.03],kuutionkarjet,rautalankamalli}],
ViewPoint->{0.4,-4,1.5},Shading->False,
BoxRatios->{1,1,1},Boxed->False]
![[Graphics:HTMLFiles/k00prtk_46.gif]](HTMLFiles/k00prtk_46.gif)
Out[52]=
![]()
Projisioidaan rautalankamalli yz-tasoon ja piirretään paksummalla viivalla kuution sivutahkolla olevan pyramidin projektio:
In[53]:=
Show[Graphics[{PointSize[0.03],kuutionkarjet/.{x_,y_,z_}:>{y,z},
rautalankamalli/.{x_,y_,z_}:>{y,z},
Thickness[0.01],Line[{{0,2},{1,1},{-1,1},{0,2}}]}],
AspectRatio->Automatic]
![[Graphics:HTMLFiles/k00prtk_48.gif]](HTMLFiles/k00prtk_48.gif)
Out[53]=
![]()
Kuution särmä = s.
a) Pyramidin pohjasärmä = s, korkeus = s/2. Vastaus: suhde = ![]()
b) Sivutahko suunnikas, jonka lävistäjät = s ja = s
. Suunnikaskuvio:
In[54]:=
Show[Graphics[{Line[{{-1,0},{1,0}}],
Line[{{0,-Sqrt[2]},{0,Sqrt[2]}}],
Line[{{-1,0},{0,Sqrt[2]},{1,0},{0,-Sqrt[2]},{-1,0}}]}],
AspectRatio->Automatic]
![[Graphics:HTMLFiles/k00prtk_52.gif]](HTMLFiles/k00prtk_52.gif)
Out[54]=
![]()
Haetaan suunnikkaan pienempi kulma α numeerisesti käyttäen alkuapproksimaationa arvoa 45 astetta:
In[55]:=
ratk= FindRoot[Tan[α Degree/2]==1/Sqrt[2],{α,45 Degree}]
Out[55]=
![]()
Kulmat ovat tällöin
In[56]:=
{α,β}= {α,180 - α}/.ratk
Out[56]=
![]()
Vastaus: 71 astetta ja 109 astetta
c) Rombidodekaedrin tilavuuden suhde kuution tilavuuteen on
In[57]:=
(s^3 + 6 1/3 s^2 s/2)/s^3
Out[57]=
![]()
Vastaus: 2
In[58]:=
Remove["Global`*"]
Kartion pohjan säde r, sivujana s, korkeus h; pallon säde R; segmentin korkeus x.
In[59]:=
arvot= {r->6.6,s->11.0,h->Sqrt[11.0^2-6.6^2]}
Out[59]=
![]()
Yhdenmuotoisista kolmioista:
In[60]:=
pallonsade= Solve[r/s == R/(h-x+R),R]
Out[60]=
![]()
Segmentin tilavuus ja tämän derivaatta:
In[61]:=
Vsegm= Pi x^2 (R - x/3)/.First[pallonsade]
Out[61]=
![]()
In[62]:=
Vder= D[Vsegm,x]
Out[62]=
![]()
In[63]:=
nollakohdat= Solve[Vder==0,x]
Out[63]=
![]()
In[64]:=
nollakohdat /. arvot
Out[64]=
![]()
Derivaatan nollakohdista vain jälkimmäinen on alueessa:
In[65]:=
R/.First[pallonsade]/.Last[nollakohdat]/.arvot
Out[65]=
![]()
In[66]:=
Plot[Vsegm /. arvot, {x, 0, 8}]
![[Graphics:HTMLFiles/k00prtk_64.gif]](HTMLFiles/k00prtk_64.gif)
Out[66]=
![]()
Kyseessä on siis maksimikohta.
Vastaus: 6.0 cm
a) Ei ole tosi. Vastaesimerkiksi kelpaa
In[67]:=
f[x_] := -Exp[-x]
In[68]:=
Plot[f[x], {x, -5, 5}, PlotRange -> {-5, 5}]
![[Graphics:HTMLFiles/k00prtk_66.gif]](HTMLFiles/k00prtk_66.gif)
Out[68]=
![]()
b) On tosi, mutta todistuksessa lienee vaikeaa hyödyntää Mathematicaa.
In[69]:=
f[x_]:= Exp[-x](Sin[x] + Cos[x])
In[70]:=
D[f[x],x]//Simplify
Out[70]=
![]()
In[71]:=
int= Integrate[Exp[-x] Sin[x],{x,n π,(n+1)π}]/.
{Sin[m_ π]:>0,Cos[m_ π]:>(-1)^m}
Out[71]=
![]()
On siis geometrinen jono suhdelukuna
. (Lausekkeesta saa tekijäksi
, mutta en onnistunut sieventämään Mathematicalla tähän muotoon.)
In[72]:=
a[n_]:=Evaluate[int]
In[73]:=
Sum[a[n]/(-1)^n,{n,0,Infinity}]
Out[73]=

![]()
In[74]:=
diffyht= p'[t] == a p[t]
Out[74]=
![]()
In[75]:=
ratk= DSolve[diffyht,p,t]
Out[75]=
![]()
In[76]:=
ehdot= {p[0]==200,p[3]==700}/.First[ratk]
Out[76]=
![]()
In[77]:=
vakiot= Solve[ehdot,{C[1],a}]
![]()
Out[77]=
![{{C[1] -> 200, a -> 1/3 Log[7/2]}, {C[1] -> 200, a -> Log[-(-7/2)^(1/3)]}, {C[1] -> 200, a -> Log[(-1)^(2/3) (7/2)^(1/3)]}}](HTMLFiles/k00prtk_78.gif)
In[78]:=
p[t_]:=Evaluate[p[t]/.First[ratk]/.First[vakiot]]
In[79]:=
p[t]
Out[79]=
![]()
In[80]:=
p[5]//N
Out[80]=
![]()
Vastaus: 1600
In[81]:=
m= 34086
Out[81]=
![]()
In[82]:=
n= 14630
Out[82]=
![]()
Lyhyesti (GCD = greatest common divisor = syt):
In[83]:=
{syt, {a, b}} = ExtendedGCD[m, n]
Out[83]=
![]()
In[84]:=
Remove[a, b]
Tai hieman pidemmin, jolloin myös saadaan kaikki luvut a ja b:
In[85]:=
r1= Mod[m,n]
Out[85]=
![]()
In[86]:=
r2= Mod[n,r1]
Out[86]=
![]()
In[87]:=
r3= Mod[r1,r2]
Out[87]=
![]()
In[88]:=
r4= Mod[r2,r3]
Out[88]=
![]()
In[89]:=
r5= Mod[r3,r4]
Out[89]=
![]()
Vastaus: syt = 38
Lukujen a ja b etsiminen:
In[90]:=
b= b/.First[Solve[syt == m a + n b,b]]
Out[90]=
![]()
In[91]:=
taulu= Cases[Table[{a,b},{a,-1000,1000}],{_,_Integer}]
Out[91]=
![]()
Lukupareja on siis useita. Tarkistuksen vuoksi:
In[92]:=
Map[{m,n}.#&,taulu]
Out[92]=
![]()
Yleisen lain hakeminen:
In[93]:=
Drop[taulu,1] - Drop[taulu,-1]
Out[93]=
![]()
In[94]:=
aa= -97 - 385 t
Out[94]=
![]()
In[95]:=
bb= 226 + 897 t
Out[95]=
![]()
In[96]:=
{m,n}.{aa,bb}//Simplify
Out[96]=
![]()
Vastaus:
,
,
kokonaisluku.
Converted by Mathematica (February 20, 2004)