Simo K. Kivelä / 08.05.2003

Listat; vektorit ja matriisit

In[1]:=

Remove["Global`*"]

•Lista ja sen alkiot

Lista on tärkein Mathematican datatyyppi. Sillä on erilaisia käyttötapoja tavattoman paljon. Ensimmäisenä eteen tulevia ovat erilaiset taulukot ja toisaalta vektorit.

Lista voidaan yksinkertaisimmin muodostaa luettelemalla sen alkiot alkiot aaltosuluissa. Listan alkioihin voidaan viitata antamalla indeksi(t) kaksinkertaisissa hakasuluissa. Joissakin tapauksissa voidaan käyttää myös listaan kohdistettavia funktioita.

In[2]:=

lista = {a, b, c, d, e, f}

Out[2]=

{a, b, c, d, e, f}

In[3]:=

lista[[4]]

Out[3]=

d

In[4]:=

lista[[{2, 5, 6}]]

Out[4]=

{b, e, f}

In[5]:=

{Last[lista], First[lista]}

Out[5]=

{f, a}

Listoja voidaan muodostaa Table- ja Range-funktiolla:

In[6]:=

Table[k^2, {k, 1, 10}]

Out[6]=

{1, 4, 9, 16, 25, 36, 49, 64, 81, 100}

In[7]:=

Range[5, 12]

Out[7]=

{5, 6, 7, 8, 9, 10, 11, 12}

In[8]:=

Range[5, 12, 0.5]

Out[8]=

{5, 5.5`, 6.`, 6.5`, 7.`, 7.5`, 8.`, 8.5`, 9.`, 9.5`, 10.`, 10.5`, 11.`, 11.5`, 12.`}

Listat voivat olla useampikertaisia ja niiden käsittelyyn on käytettävissä melkoinen määrä funktioita; seuraavassa on vain muutama yksinkertainen esimerkki.

In[9]:=

lst = {{a}, {b, c}, {d, e, f}}

Out[9]=

{{a}, {b, c}, {d, e, f}}

In[10]:=

Length[lst]

Out[10]=

3

In[11]:=

Flatten[lst]

Out[11]=

{a, b, c, d, e, f}

In[12]:=

Length[Flatten[lst]]

Out[12]=

6

•Listat työkaluna

Listoja käytetään työkaluina monissa komennoissa. Jos nämä kohdistuvat esimerkiksi useaan yhtälöön, joissa on useita muuttujia tai tuntemattomia, nämä annetaan usein listoina.

In[13]:=

yhtalo1 = (x - 1)^2 + (y - 3)^2 == 5

Out[13]=

(-1 + x)^2 + (-3 + y)^2 == 5

In[14]:=

yhtalo2 = y == x^2

Out[14]=

y == x^2

Kun yhtälöiden kuvaajat piirretään samaan kuvioon yhdellä käskyllä, annetaan yhtälöt listana. Piirtokäskyssä muuttujien vaihteluvälit annetaan myös listoina.

In[15]:=

Needs["Graphics`ImplicitPlot`"]

In[16]:=

ImplicitPlot[{yhtalo1, yhtalo2}, {x, -5, 5}, {y, -2, 6}]

[Graphics:HTMLFiles/luento4_30.gif]

Out[16]=

-Graphics -

Yhtälöparia ratkaistaessa yhtälöt annetaan listana, samoin tuntemattomat. Ratkaisu voidaan sijoitta johonkin lausekkeeseen poimimalla listana saatavasta ratkaisusta haluttu alkio.

In[17]:=

rtk = NSolve[{yhtalo1, yhtalo2}, {x, y}]

Out[17]=

{{x -> -1.5426335849033286` + 0.4514857872119914` i, y -> 2.1758789612172666`  - 1.39295 ... 3633394`, y -> 4.880869132746858`}, {x -> 0.8759982561732691`, y -> 0.7673729448186093`}}

In[18]:=

etaisyysorigosta = Sqrt[x^2 + y^2] /. First[rtk]

Out[18]=

2.6390908061181486`  - 1.4123716527318153` i

In[19]:=

etaisyydetorigosta = Sqrt[x^2 + y^2] /. {First[rtk], rtk[[4]]}

Out[19]=

{2.6390908061181486`  - 1.4123716527318153` i, 1.1645746782659294`}

•Vektorit

Vektorit esitetään listoina. Esimerkkinä kaksi avaruusvektoria.

In[20]:=

vektoriA = {1, 2, 3}

Out[20]=

{1, 2, 3}

In[21]:=

vektoriB = {4, 5, 6}

Out[21]=

{4, 5, 6}

Vektorioperaatioille on omat symbolinsa: skalaaritulo esitetään pisteellä (tai kahden argumentin funktiolla Dot), vektoritulo funktiolla Cross. Näitä käyttäen voidaan suorittaa vektorialgebran laskuja.

In[22]:=

skalaaritulo = vektoriA . vektoriB

Out[22]=

32

In[23]:=

Dot[vektoriA, vektoriB]

Out[23]=

32

In[24]:=

valinenkulma = ArcCos[vektoriA . vektoriB/Sqrt[vektoriA . vektoriA]/Sqrt[vektoriB . vektoriB]]

Out[24]=

ArcCos[(16 2/11^(1/2))/7]

In[25]:=

valinenkulma // N

Out[25]=

0.2257261285527342`

In[26]:=

valinenkulma/Degree // N

Out[26]=

12.933154491899135`

In[27]:=

valinenkulma/(Pi/180) // N

Out[27]=

12.933154491899135`

In[28]:=

vektoriC = Cross[vektoriA, vektoriB]

Out[28]=

{-3, 6, -3}

In[29]:=

vektoriA . vektoriC

Out[29]=

0

In[30]:=

vektoriB . vektoriC

Out[30]=

0

In[31]:=

Sqrt[vektoriC . vektoriC] == Sqrt[vektoriA . vektoriA] Sqrt[vektoriB . vektoriB] Sin[valinenkulma]

Out[31]=

True

•Skalaari- eli sisätulo muissa yhteyksissä

Skalaaritulo on käytettävissä myös mille tahansa listoille, joissa on yhtä monta alkiota. Listojen ei siis välttämättä tarvitse olla (2- tai 3-komponenttisia) vektoreita.

In[32]:=

potenssit = Table[x^k, {k, 0, 10}]

Out[32]=

{1, x, x^2, x^3, x^4, x^5, x^6, x^7, x^8, x^9, x^10}

In[33]:=

kertoimet = Range[-5, 5]

Out[33]=

{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}

In[34]:=

Length[potenssit] == Length[kertoimet]

Out[34]=

True

In[35]:=

polynomi = kertoimet . potenssit

Out[35]=

-5 - 4 x - 3 x^2 - 2 x^3 - x^4 + x^6 + 2 x^7 + 3 x^8 + 4 x^9 + 5 x^10

In[36]:=

CoefficientList[polynomi, x]

Out[36]=

{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}

•Matriisit

Eräänlainen vektorin yleistys on matriisi. Tämä esitetään kaksinkertaisena listana. Ns. kaksiulotteinen tulostus voidaan saada aikaan kohdistamalla matriisiin funktio MatrixForm.

In[37]:=

matriisiA = {{1, a, a^2}, {1, b, b^2}, {1, c, c^2}}

Out[37]=

{{1, a, a^2}, {1, b, b^2}, {1, c, c^2}}

In[38]:=

matriisiA // MatrixForm

Out[38]//MatrixForm=

(            2 )   1    a    a               2   1    b    b               2   1    c    c

In[39]:=

matriisiB = Table[i j, {i, 1, 3}, {j, 1, 5}]

Out[39]=

{{1, 2, 3, 4, 5}, {2, 4, 6, 8, 10}, {3, 6, 9, 12, 15}}

In[40]:=

matriisiB // MatrixForm

Out[40]//MatrixForm=

( 1    2    3    4    5  )    2    4    6    8    10    3    6    9    12   15

Matriisituloa merkitään pisteellä kuten skalaarituloakin:

In[41]:=

matriisiC = matriisiA . matriisiB

Out[41]=

{{1 + 2 a + 3 a^2, 2 + 4 a + 6 a^2, 3 + 6 a + 9 a^2, 4 + 8 a + 12 a^2, 5 + 10 a + 15 a^2}, {1  ... 15 b^2}, {1 + 2 c + 3 c^2, 2 + 4 c + 6 c^2, 3 + 6 c + 9 c^2, 4 + 8 c + 12 c^2, 5 + 10 c + 15 c^2}}

In[42]:=

matriisiC // MatrixForm

Out[42]//MatrixForm=

(              2                  2                  2                   2                   2 ...    2   1 + 2 c + 3 c      2 + 4 c + 6 c      3 + 6 c + 9 c      4 + 8 c + 12 c     5 + 10 c + 15 c

Matriisista voidaan poimia alkioita indeksimekintää käyttäen:

In[43]:=

matriisiA[[2, 3]]

Out[43]=

b^2

In[44]:=

matriisiA[[2]]

Out[44]=

{1, b, b^2}

Matriiseihin voidaan kohdistaa erilaisia funktioita:

In[45]:=

Transpose[matriisiA] // MatrixForm

Out[45]//MatrixForm=

(              )   1    1    1     a    b    c     2    2    2   a    b    c

In[46]:=

determ = Det[matriisiA]

Out[46]=

-a^2 b + a b^2 + a^2 c - b^2 c - a c^2 + b c^2

In[47]:=

Factor[determ]

Out[47]=

-(a - b) (a - c) (b - c)


Converted by Mathematica  (May 8, 2003)