Kirjautuminen

Haku

Tehtävät

Joulukalenteri 2009: Mathematica

Kirjoittaja: L2-K2 (02.12.2009)

Mathematica on Wolfram Researchin kehittämä symbolinen laskentaohjelmisto, jonka ytimenä toimii samanniminen Mathematica-kernel. Tämän lisäksi Mathematicaan kuuluu sekä graafinen käyttöliittymä että komentorivipohjainen käyttöliittymä. Kuitenkin Mathematican ydintä voidaan käyttää myös ilman kumpaakaan edellämainituista, tällöin se toimii kuten muutkin tulkattavat kielet.

Mathematican laaja standardikirjasto sisältää lähestulkoon kaikki "tieteelisessä laskennassa" tarvittavat operaatiot kuten symboliset ja numeeriset ratkaisijat, derivoinnit, integroinnit, vektorien ja kompleksilukujen laskuoperaatiot sekä paljon muita edistyneempiä matemaattisia operaatioita. Yhdistettynä siihen, että Mathematica (kernel) osaa hyödyntää moniydinprosessoreita ja useamman prosessorin järjestelmiä automaattisesti on Mathematica hyvin tehokas kieli tieteeliseen laskentaan. Wolfram Research on myös ilmaissut, että Mathematicaan tullaan lisätään CUDA-tuki.

Sen lisäksi, että Mathematicaa voidaan käyttää itsenäisenä tulkattuna kielenä, voidaan se myös integroida C, C++ ja Javan kirjastoksi. Tällöin pystytään yhdistämään molempien kielien vahvuudet yhteen. Tässä esittelyssä Mathematicaa kuitenkin käytetään vain sen oman tekstipohjaisen käyttöliittymän kautta.

Mathematican GUI tukee myös monipuolisia kuvaajapiirtotyökaluja tavallisten yksi- tai usempiulotteisten funktioiden, parametristen funktioiden sekä implisiitifunktioden* piirtoon.

* tavallinen funktio eli ekplisiittifunktio: määritelty "suoraan" kuten esim. f(x)=5*x+1
* implisiittinen funktio: ei määritelty "suoraan", esim. x^2 +(y(x))^2 = 1

Esimerkki: Tekstin tulostus

Seuraava ohjelma tulostaa tekstin "Helloworld!". Huomio kommenttimerkit "(*" ja "*)".

Print[Hello, world!] (* merkkijonojen yhdistäminen, sama kuin Print["Hello", "world!"] *)

Seuraava ohjelma tulostaa tekstin "Hello, world!".

Print["Hello, world!"]

Esimerkki: Fibonaccin luvut

Seuraavassa esimerkkejä miten tulostaa Fibonaccin lukuja Mathematicalla.

In[1]:= Fibonacci[1337] (* tulostetaan yksi Fibonaccin luku *)

Out[1]= 116678278296925749161915374043479150359823429074129135940606121239734\
>    588725254515783339926985582477283934110644620999347591889628200363754904\
>    293281769399379229437583738492577141827477873442059762741594237341181804\
>    1261373335700249267727594511569151368792111912361418558537679167117
(* komento ? palauttaa kyseisen komennon dokumentaation, huomioi For lauseen
erikoinen syntaksi *)
In[2]:= ?For
For[start, test, incr, body] executes start
    , then repeatedly evaluates body and incr until test fails to give True.

(* tulostetaan kymmenen ensimmäistä Fibonaccin lukua *)
In[4]:= For[i = 1, i < 10, i = i + 1, Print[Fibonacci[i]]]
1
1
2
3
5
8
13
21
34

(* määritellään funktio f, joka antaa n:en Fibonaccin luvun *)
In[5]:= f[n_] := f[n] = f[n - 1] + f[n - 2]

(* ketjutettua sijoitusta voidaan käyttää koska sijoitus palauttaa sijoitetun arvon *)
In[6]:= f[1] = f[2] = 1

Out[6]= 1

In[7]:= For[i = 1, i < 10, i = i + 1, Print[f[i]]]
1
1
2
3
5
8
13
21
34

(* muodostetaan taulukko Fibonaccin luvuista 20 - 25 *)
In[8]:= taulukko = Table[f[i], {i, 20, 25}]

Out[8]= {6765, 10946, 17711, 28657, 46368, 75025}

(* kutsutaan taulukon ensimmäistä jäsentä, huomioi järjestysnumero ja syntaksi *)
In[9]:= taulukko[[1]]

Out[9]= 6765

Esimerkki: Symbolinen yhtälönratkaisu

Ongelma: määritä kolmen avaruuden pallon leikkauspisteet.
Pallo 1: keskipiste (0, 0, 0), säteen neliö 2
Pallo 2: keskipiste (2, 0, 0), säteen neliö 2
Pallo 3: keskipiste (1, 1, 0), säteen neliö 3

Mathematica 7.0 for Linux x86 (64-bit)
Copyright 1988-2009 Wolfram Research, Inc.

In[1]:= (* sijotetaan pallojen yhtälöt muuttujiin a, b, c *)

In[2]:= a = x^2 + y^2 + z^2 == 2

         2    2    2
Out[2]= x  + y  + z  == 2

In[3]:= b = (x - 2)^2 + y^2 + z^2 == 2

                2    2    2
Out[3]= (-2 + x)  + y  + z  == 2

In[4]:= c = (x - 1)^2 + (y - 1)^2 + z^2 == 3

                2           2    2
Out[4]= (-1 + x)  + (-1 + y)  + z  == 3

In[5]:= (* pyydetään Mathematicaa "pelkistämään" muuttujaa c, ei kuitenkaan tallenneta tulosta *)

In[6]:= Simplify[c]

                2           2    2
Out[6]= (-1 + x)  + (-1 + y)  + z  == 3

In[5]:= (* ei vaikutusta, pyydetään käyttämään monimutkaisempia menetelmiä *)

In[7]:= FullSimplify[c]

                                   2
Out[7]= (-2 + x) x + (-2 + y) y + z  == 1

In[8]:= (* ratkaistaan leikkauspisteet komennolla Solve (symbolinen ratkaisu) *)

In[9]:= Solve[{a, b, c}]

               -Sqrt[3]         1
Out[9]= {{z -> --------, y -> -(-), x -> 1},
                  2             2

           Sqrt[3]         1
>    {z -> -------, y -> -(-), x -> 1}}
              2            2

In[10]:= (* pyydetään ratkaisu kymmenen merkitsevän numeron tarkkuudella,
sijoitetaan ratkaisu ensin muuttujaan d *)

In[11]:= d = Solve[{a, b, c}]

                -Sqrt[3]         1
Out[11]= {{z -> --------, y -> -(-), x -> 1},
                   2             2

           Sqrt[3]         1
>    {z -> -------, y -> -(-), x -> 1}}
              2            2

In[12]:= N[d, 10]

Out[12]= {{z -> -0.8660254038, y -> -0.5000000000, x -> 1.000000000},

>    {z -> 0.8660254038, y -> -0.5000000000, x -> 1.000000000}}

In[14]:=

Hauska tietää

WolframAlpha käyttää moniin hakuihin Mathematican ominaisuuksia, ja hyväksyy syötteekseen Mathematican komentoja. Niinpä ne, joilla eivät omista Mathematicaa voivat testata osaa esimerkeistä sillä.

Haku:

Solve[{x^2 + y^2 + z^2 == 2, (x - 2)^2 + y^2 + z^2 == 2, (x - 1)^2 + (y - 1)^2 + z^2 == 3}]

Palauttaa vastauksen kysymykseen.

Kokeile itse.

Tietoa sivustosta