Kun teet harjoitustyöselostuksia Mathematicalla, voit luoda selkkariin otsikon (ja mahdollisia alaotsikoita...) määräämällä soluille erilaisia tyylejä. Uuden solun tyyli määrätään painamalla ALT ja jokin numero ennen soluun kirjoittamista, ts. kun ruudulla on vaakaviiva uuden solun alkamisen merkiksi. Jo kirjoitetun tekstin tyylin voi muuttaa "maalaamalla" solu notebookin oikeasta reunasta ja painamalla ALT ja numero. Seuraavassa on luettelo tärkeimmistä tyyleistä:
	ALT+1	Otsikko
	ALT+2	Aliotsikko
	ALT+3	Alialiotsikko
	ALT+4	Luvun (section) otsikko
	ALT+5	Aliluvun otsikko
	ALT+6	Alialiluvun otsikko
	ALT+7	Tekstiä (tämän solun tyyli)
	ALT+9	Input (uuden solun oletusarvoinen tyyli, laskut on kirjoitettava tällä tyylillä)

Harjoitus 1 -- Ratkaisut

1 Perusteet

a

Valmiiden funktioiden nimet alkavat isolla alkukirjaimella ja argumentit kirjoitetaan hakasulkeiden sisään.

ArcCos[Log[Pi/2]]

Tämä on tuloksen tarkka arvo symbolisessa muodossa. Likiarvon saa seuraavasti:

N[ArcCos[Log[Pi/2]]]

tai

ArcCos[Log[Pi/2]]//N

b

Iso I-kirjain vastaa imaginääriyksikköä.

Abs[2+I]Exp[I Arg[2+I]]

Oletusarvoisesti kompleksilukujen likiarvot esitetään karteesisessa muodossa (Re(z)+iIm(z)).

N[Abs[2+I]Exp[I Arg[2+I]]]

2 Taulukoinnin alkeet

a

Random[]

Myöhemmin esitetään hienostuneempia tapoja luoda listoja. Yksinkertaisin tapa on kirjoittaa listan alkiot pilkulla erotettuna aaltosulkeiden sisään.

{Random[],Random[],Random[],Random[],Random[]}

Edellisen laskun tulokseen voi viitata %-merkillä. Listan alkioihin viitataan kaksilla hakasulkupareilla, esim. t[[1]], ...

b

%[[1]]+%[[4]]

Listoja voi käsitellä kuin yksittäisiä muuttujia. Huom. jos muutat näitä ratkaisuja, %-merkinnät saattavat viitata vääriin tuloksiin.

c

%%^2

%+%%

Toinen (parempi) tapa on nimetä käsiteltävä lista. Huom. on erittäin suositeltavaa kirjoittaa useampi käsky samaan soluun!

r={Random[],Random[],Random[],Random[],Random[]}
r[[1]]+r[[4]]
r^2+1

d

Lainausmerkkien sisältö tulostuu sellaisenaan, laskutoimitukset lasketaan tavalliseen tapaan.

Print["arccos(ln(pi/2)) = ",ArcCos[Log[Pi/2]]//N]

Jos et halua, että laskun tulos tulostetaan näytölle, kirjoita sen perään puolipiste.

z=2+I;
Print["Kompleksiluku ",z," napakoordinaattimuodossa esitettynä: ",Abs[z]Exp[I Arg[z]]]

Tyhjennetään käytettyjen symbolien sisältö.

z=.;r=.;

3 Sijoituslauseet, yksiköt

a

Merk. (Subscript[x, ±])=(1/(2a))(-b±√((b^2)-4a c)). Jos (Subscript[x, ±]) on yhtälön a (x^2)+b x+c=0 ratkaisu, niin sijoittamalla x:n arvoksi (Subscript[x, ±]) polynomiin a (x^2)+b x+c, pitäisi saada tulokseksi nolla. Mathematica ei osaa käsitellä merkintää ±, joten sijoitetaan erikseen (SubPlus[x]) ja (SubMinus[x]). Huom. Tässä on tärkeää, että symboleilla a, b, c ja x ei ole arvoa.

a=.;b=.;c=.;x=.;
a x^2+b x+c/.x->(-b+Sqrt[b^2-4a c])/(2a)

Yo. lauseke voi olla nolla vaikeasti esitettynä.

Simplify[%]

Ts. (SubPlus[x]) toteuttaa ko. yhtälön. Vastaavasti (SubMinus[x]): (ctrl-6 antaa potenssin, ctrl-2 neliöjuuren, ctrl-välilyönti palaa normaaliin syöttöön)

a (x^2)+b x+c/.x->(-b-√((b^2)-4a c))/(2a)//Simplify

b

Jos laskussa tarvitaan fysikaalisia yksiköitä, ne voi laatia itse tai ottaa valmiit yksiköt Units-paketista. Itse määritellyille yksiköille on määrättävä laskusäännötkin itse.

solmu=merimaili/tunti;
merimaili=1.15maili;

s=100 maili
v=12solmu
t=s/v

Tehdään sama valmiilla yksiköillä. Ladataan Mathematican laajennuspaketti (huom. heittomerkin suunta):

<<Units`

Vanhemmissa Mathematican versioissa (älä lataa molempia!)

<<Miscellaneous`Units`

Käytettävissä olevat yksiköiden nimet ovat englanninkielisiä sanoja isolla alkukirjaimella.

s=100Mile
v=12Knot
t=s/v

Units-paketista löytyy yksiköiden muunnosfunktio Convert:

Convert[t,Hour]

Huom. Älä käytä yksiköiden nimiä missään laskuissa ennen kuin olet ladannut paketin! Mathematica menee sekaisin määritelmissä! Esitän tässä tavallisen virhetilanteen ja kuinka korjata se. Ensin, poistetaan yllä ladatun paketin määritelmät:

Remove["Units`*"]

Sitten aletaan laskemaan yksiköillä, joita ei ole ladattu.

s=100Mile
v=12Knot
t=s/v

Sitten huomataan, että Units-paketti unohtui ladata. Nyt Units-paketin määritelmät yksiköille Mile ja Knot menevät globaalien (yllä) määritelmien kanssa "päällekkäin".

<<Units`

Nyt Convert-funktio ei toimi, sillä yllä käytetyt Mile ja Knot eivät ole paketista Units.

Convert[t,Hour]

Poistetaan globaalit määritelmät.

Remove[Global`Mile]
Remove[Global`Knot]

Lasketaan laskut uudestaan.

s=100Mile
v=12Knot
t=s/v

Nyt Convert-funktio toimii:

Convert[t,Hour]

4 Omat funktiot

a

Alaviiva _ funktion argumentin yhteydessä tarkoittaa, että sen paikalle passaa mikä tahansa lauseke. Merkintä := tarkoittaa viivästettyä sijoitusta, ts. sijoituslausekkeen oikeaa puolta ei lasketa auki heti, vaan joka kerta erikseen, kun funktiota käytetään. Pii-symboli kirjoitetaan esc-p-esc.

f[x_]:=Sin[x];
g[x_]:=((Log[x])^2);
h[x_]:=2(x^2)-3x+1;
f[h[g[π]]]

b

Osamääriä kirjoitetaan ctrl-shift-7. Funktion s arvot lähestyvät funktion (e^x) arvoja, kun n kasvaa.

s=.
s[x_,n_]:=Sum[((x^i)/(i!)),{i,0,n}]
s[x,n]
s[1,3]//N
s[1,10]//N

c

Yksinkertaisin tapa toteuttaa tämä lasku on yhdellä käskyllä:

e[x_,n_]:=Abs[s[x,n]-Exp[x]]

Suurilla n:n arvoilla e[x,n] pitäisi lähestyä nollaa. Ilman N-funktion käyttöä tulokset eivät ole kovin informatiivisia. Viimeinen tulos ei eroa enää nollasta koneen tarkkuuden rajoissa (saattaa riippua koneesta ja Mathematican asetuksista).

e[1,1]//N
e[1,5]//N
e[1,10]//N
e[1,50]//N

Funktio voi koostua useammasta käskystä. Käskyt on kirjoitettava sulkeiden sisään. Viimeisen suoritettavan käskyn antama tulos on funktion arvo. Tämä mahdollistaa välitulosten käytön, mikä on tärkeää myöhemmin, monimutkaisempien funktioiden kanssa.

e[x_,n_]:=(p1=s[x,n];p2=Exp[x]; Abs[p1-p2])

e[2,3]

p1

Jos muuttujia, joihin funktio laskee välituloksia, on useita (tai käytössä on useita funktioita), on hyvä asettaa nämä muuttujat paikallisiksi, ts. ne saavat arvonsa vain funktion sisällä. Tämä hoituu Module-komennolla, jonka 1. argumentti on lista paikallisista muuttujista:

p1=.; p2=.

e[x_,n_]:=Module[{p1,p2},p1=s[x,n];p2=Exp[x];Abs[p1-p2]]

e[2,3]

p1

p1:n ja p2:n arvojen muutos ei näy e-funktion ulkopuolella.

d

Tässä tehtävänanto ei ole kovin hyvin suunniteltu. Kunnollinen suorittaminen vaatisi If-lauseen käyttöä, jota ei ole vielä esitelty. Jos |(Subscript[z, 1])-(Subscript[z, 2])|>r, niin kysytty etäisyys on |(Subscript[z, 1])-(Subscript[z, 2])|-r. Muuten kysytty etäisyys on nolla. Oletetaan tässä, että yo. ehto pätee (If-lause esitellään 3. harjoituksissa).

f[z1_,z2_,r_]:=Abs[z2-z1]-r;

f[2+I,1-I,0.1]

Module-komennon avulla:

f[z1_,z2_,r_]:=Module[{p1},p1=Abs[z2-z1];p1-r]

f[2+I,1-I,0.1]

If-lauseen avulla (ks. harjoitus 3): Nyt funktion arvo on 0, jos p1<r, ja p1-r, jos em. ehto ei pidä paikkansa, ts. jos p1≥r.

f[z1_,z2_,r_]:=Module[{p1},p1=Abs[z2-z1];If[p1<r,0,p1-r]]

f[2+I,1-I,0.1]

f[2+I,1-I,3]