Simo K. Kivelä / 18.08.2010

Mathematica numeerisena ja symbolisena laskimena

Aluksi

Pitkässä istunnossa saattaa aiheutua ongelmia siitä, että muistissa on vanhoja tuloksia talletettuna nimellä, jonka käyttäjä jo on unohtanut tai jonka hän kuvittelee tarkoittavan jotakin muuta. Tämän johdosta kannattaa uuteen tehtävään ryhdyttäessä muisti puhdistaa hieman kryptisellä komennolla:

In[1]:=

luento1_1.gif

luento1_2.gif

Numeerinen laskenta

Numeerisessa laskennassa voidaan käyttää periaatteessa mielivaltaisen monta numeroa. Käytännössä koneen muisti ja laskenta-aika asettavat rajoituksensa. Kertomerkki on joko välilyönti tai *; pois sitä ei voida (yleensä) jättää.

In[2]:=

luento1_3.gif

Out[2]=

luento1_4.gif

Kertoma ilmaistaan tavalliseen tapaan huutomerkillä.

In[3]:=

luento1_5.gif

Out[3]=

luento1_6.gif

Luku π syötetään nimellä Pi tai se voidaan valita valikosta. Funktiolla N sille voidaan laskea haluttu määrä desimaaleja. (Desimaaleja tunnetaan nykyään hieman yli 206 miljardia. Kovin monen desimaalin laskeminen tukkii Mathematican varsin tehokkaasti.)

In[4]:=

luento1_7.gif

Out[4]=

luento1_8.gif

In[5]:=

luento1_9.gif

Out[5]=

luento1_10.gif

In[6]:=

luento1_11.gif

Out[6]=

luento1_12.gif

Laskettuihin arvoihin voidaan myöhemmin viitata prosenttimerkillä:

In[7]:=

luento1_13.gif

Out[7]=

luento1_14.gif

In[8]:=

luento1_15.gif

Out[8]=

luento1_16.gif

Tulos saadaan desimaalilukuna, jos syötteessä esiintyy desimaaliluku. Kaikkialla käytetään desimaalipistettä, ei -pilkkua.

In[9]:=

luento1_17.gif

Out[9]=

luento1_18.gif

In[10]:=

luento1_19.gif

Out[10]=

luento1_20.gif

Aiempiin tuloksiin viittaamisesta tulee helpompaa, jos tuloksille annetaan nimet (mielellään mahdollisimman kuvaavat nimet, jolloin on itsekin helpompi muistaa, mitä mikin symboli tarkoittaa):

In[11]:=

luento1_21.gif

Out[11]=

luento1_22.gif

In[12]:=

luento1_23.gif

Out[12]=

luento1_24.gif

Myös funktioiden arvoja voidaan laskea:

In[13]:=

luento1_25.gif

Out[13]=

luento1_26.gif

In[14]:=

luento1_27.gif

Out[14]=

luento1_28.gif

In[15]:=

luento1_29.gif

Out[15]=

luento1_30.gif

In[16]:=

luento1_31.gif

Out[16]=

luento1_32.gif

Pelkkä prosenttimerkki tarkoittaa edellistä tulosta.

Myös kompleksiluvuilla voidaan laskea:

In[17]:=

luento1_33.gif

Out[17]=

luento1_34.gif

In[18]:=

luento1_35.gif

Out[18]=

luento1_36.gif

In[19]:=

luento1_37.gif

Out[19]=

luento1_38.gif

Symbolinen laskenta

Vastaavalla tavalla voidaan käsitellä algebrallisia lausekkeita, so. lausekkeita, joissa on kirjainsymboleja:

In[20]:=

luento1_39.gif

Out[20]=

luento1_40.gif

Lausekkeita voidaan muokata, esimerkiksi sieventää useilla eri tavoilla. Ei ole itsestään selvää, mitä sievä kussakin tapauksessa tarkoittaa; se riippuu siitä, mitä lausekkeelle on seuraavaksi tarkoitus tehdä. Tämän johdosta sieventämiskomentoja on useita erilaisia eikä niiden hallinta aina ole helppoa. Kunkin komennon argumentti (lauske, johon operaatio kohdistuu) annetaan hakasuluissa. Esimerkkeinä lausekkeen kehittäminen, tekijöihin jako ja ns. osamurtokehitelmän muodostaminen; erilaisia sievennyskomentoja on kuitenkin paljon enemmän.

In[21]:=

luento1_41.gif

Out[21]=

luento1_42.gif

In[22]:=

luento1_43.gif

Out[22]=

luento1_44.gif

In[23]:=

luento1_45.gif

Out[23]=

luento1_46.gif

In[24]:=

luento1_47.gif

Out[24]=

luento1_48.gif

Yleisiä sievennyskomentoja ovat Simplify ja FullSimplify. Mitä nämä tekevät, ei kuitenkaan ole aina selvää:

In[25]:=

luento1_49.gif

Out[25]=

luento1_50.gif

In[26]:=

luento1_51.gif

Out[26]=

luento1_52.gif

In[27]:=

luento1_53.gif

Out[27]=

luento1_54.gif

In[28]:=

luento1_55.gif

Out[28]=

luento1_56.gif

In[29]:=

luento1_57.gif

Out[29]=

luento1_58.gif

In[30]:=

luento1_59.gif

Out[30]=

luento1_60.gif

Funktioiden käsittelyyn liittyy omat sievennyskomentonsa:

In[31]:=

luento1_61.gif

Out[31]=

luento1_62.gif

Kaikki yhden argumentin sievennyskomennot voidaan kirjoittaa myös argumentin jälkeen:

In[32]:=

luento1_63.gif

Out[32]=

luento1_64.gif

In[33]:=

luento1_65.gif

Out[33]=

luento1_66.gif

Derivointi ja integrointi tapahtuvat yksinkertaisesti.

In[34]:=

luento1_67.gif

Out[34]=

luento1_68.gif

In[35]:=

luento1_69.gif

Out[35]=

luento1_70.gif

In[36]:=

luento1_71.gif

Out[36]=

luento1_72.gif

In[37]:=

luento1_73.gif

Out[37]=

luento1_74.gif

In[38]:=

luento1_75.gif

Out[38]=

luento1_76.gif

Mathematica tuntee tavallisten alkeisfunktioiden lisäksi melkoisen määrän myös ns. erikoisfunktioita.

In[39]:=

luento1_77.gif

Out[39]=

luento1_78.gif

Tälle saadaan myös numeerinen arvo:

In[40]:=

luento1_79.gif

Out[40]=

luento1_80.gif

Integrointi voi tapahtua myös numeerisesti:

In[41]:=

luento1_81.gif

Out[41]=

luento1_82.gif

Virheellisiä tuloksia voi kuitenkin yllättäen syntyä. Jos integroidaan symbolisesti ja tuloksesta lasketaan numeerinen arvo, saatetaan joskus saada eri tulos kuin integroimalla suoraan numeerisesti. Useimmiten syyt ovat ymmärrettäviä. Kyseessä voivat esimerkiksi olla monihaaraisen funktion ominaisuudet kompleksialueella, vaikka integrointi tapahtuisikin reaalialueella. Mikään ohjelmisto tuskin on virheetön: uudessa versiossa on uudet virheet. Käyttäjän tulee oppia kriittisyyteen.

Aina eivät sieventämiskomennot kuitenkaan ilman lisämääreitä anna sitä, mitä odottaisi. Syykin voi olla hyvä:

In[42]:=

luento1_83.gif

Out[42]=

luento1_84.gif

In[43]:=

luento1_85.gif

Out[43]=

luento1_86.gif

Onhan esimerkiksi

In[44]:=

luento1_87.gif

Out[44]=

luento1_88.gif

Mutta sieventää voidaan myös väkisin, ts. käyttäjän vastuulla:

In[45]:=

luento1_89.gif

Out[45]=

luento1_90.gif

Spikey Created with Wolfram Mathematica 7.0