Simo K. Kivelä / 19.08.2010
Yhtälöiden ratkaiseminen
In[1]:=
Ensimmäisen ja toisen asteen yhtälöt, polynomiyhtälöt
Luontevinta on aloittaa tallettamalla yhtälö jollakin (kuvaavalla) nimellä. Yhtälön yhtäläisyysmerkki on kaksi peräkkäistä yhtäläisyysmerkkiä; yksi yhtäläisyysmerkki on sijoitusoperaattori, jolla lauseke talletetaan jollekin nimelle.
In[2]:=
Out[2]=
Ratkaisu saadaan komennolla Solve, jolle on annettava kaksi argumenttia: yhtälö ja tuntematon, so. symboli, jonka suhteen yhtälö halutaan ratkaista:
In[3]:=
Out[3]=
Yhtä hyvin yhtälö voidan suoraan kirjoittaa Solve-komennon argumentiksi:
In[4]:=
Out[4]=
Ratkaisu saadaan korvaussäännön muodossa, mutta muuttujalle x ei synny arvoa:
In[5]:=
Out[5]=
Mihin tahansa lausekkeeseen voidaan muuttujalle x sijoittaa saatu arvo korvausoperaattorin /. (eli ReplaceAll) avulla:
In[6]:=
Out[6]=
In[7]:=
Out[7]=
Vastaavasti toisen asteen yhtälölle:
In[8]:=
Out[8]=
In[9]:=
Out[9]=
Tämän avulla voidaan laskea esimerkiksi juurten summa ja tulo käyttämällä hyväksi aaltosuluilla rajattuja listoja:
In[10]:=
Out[10]=
In[11]:=
Out[11]=
Listojen alkioihin voidaan viitata funktioilla First ja Last tai indeksillä:
In[12]:=
Out[12]=
In[13]:=
Out[13]=
Vastaavaan tapaan voidaan käsitellä korkeampien asteiden yhtälöitä:
In[14]:=
Out[14]=
Joskus tulos voi olla pitkähkö. Seuraavassa muodostetaan yleinen neljännen asteen yhtälön ratkaisukaava, joka talletetaan korvaussäännön muodossa nimelle rtk. Tämä sisältää itse asiassa neljä korvaussääntöä, koska neljännen asteen yhtälöllä on neljä juurta.
In[15]:=
Out[15]=
In[16]:=
Out[16]//Short=
Tulos on huomattavan pitkä. Funktion Short avulla siitä saadaan esiin lyhyempi osa, joka näyttää kuitenkin tuloksen yleisen hahmon (ainakin jollakin tavalla).
Saadun ratkaisukaavan pätevyyttä voidaan testata muodostamalla ensin polynomi, jonka nollakohdat tiedetään, ja yrittämällä sitten ratkaista nämä edellä saadusta yleisestä kaavasta. Polynomi olkoon
In[17]:=
Out[17]=
Sijoitetaan kertoimet edellä saatuun kaavaan ja yritetään sieventää; Simplify ei tehoa, FullSimplify auttaa:
In[18]:=
Out[18]=
Aina ei kuitenkaan onnistu. Muodostetaan uusi neljännen asteen polynomi ja ratkaistaan se toisaalta suoraan Solve-komennolla, toisaalta sijoittamalla polynomin kertoimet ratkaisukaavaan.
In[19]:=
Out[19]=
In[20]:=
Out[20]=
Nämä ovat todellakin nollakohdat:
In[21]:=
Out[21]=
Mutta:
In[22]:=
Out[22]=
Saatu ratkaisukaava ei siis olekaan aivan yleinen!
Polynomiyhtälöt numeerisesti
Polynomiyhtälön ratkaiseminen ei aina ole suoraviivaista:
In[23]:=
Out[23]=
In[24]:=
Out[24]=
Nämä ovat kyllä polynomin nollakohdat, mutta niiden lausekkeet ovat hieman erikoiset. Taustalla on vakava periaatteellinen rajoitus: juurilausekkeiden (neliöjuuri, kuutiojuuri jne.) avulla ilmaistavat yleiset ratkaisukaavat ovat olemassa ainoastaan neljänteen asteeseen saakka. Korkeampien asteiden polynomeille käytetään tämän takia usein eo. lausekkeiden tapaisia ilmauksia, jotka ovat oikeastaan vain tautologioita. Numeeriset arvot saadaan kuitenkin tällöinkin:
In[25]:=
Out[25]=
Toisaalta numeeriset arvot voidaan laskea myös suoraan numeerisesti funktiolla NSolve, mikä saattaa olla oleellisestikin nopeampaa:
In[26]:=
Out[26]=
Transkendenttiyhtälöt
Joissakin tapauksissa funktiota Solve voidaan käyttää myös muiden kuin polynomiyhtälöiden ratkaisuun:
In[27]:=
Out[27]=
In[28]:=
Out[28]=
Kaikkia juuria ei kuitenkaan saada.
Yleensä ns. transkendenttiyhtälöiden ratkaiseminen ei kuitenkaan onnistu:
In[29]:=
Out[29]=
Tällaisten yhtälöiden numeeriseen ratkaisemiseen on käytettävissä funktio FindRoot. Se käyttää Newtonin menetelmän tyyppistä (mutta tehokkaampaa) algoritmia yhtälön yhden ratkaisun löytämiseen. Algoritmille on annettava jonkinlainen etsittävän juuren alkuapproksimaatio:
In[30]:=
Out[30]=
In[31]:=
Out[31]=
In[32]:=
Out[32]=
Menetelmä ei aina anna alkuapproksimaatiota lähintä juurta, kuten viimeinen esimerkeistä osoittaa.
Alkuarvojen etsimisessä voidaan käyttää graafisia esityksiä:
In[33]:=
Out[33]=
Yhtälöryhmät
Kaikkia edellä esitettyjä menetelmiä voidaan käyttää myös yhtälöryhmien ratkaisemiseen. Funktioissa Solve ja NSolve niin yhtälöt kuin tuntemattomatkin on tällöin annettava aaltosulkuihin suljettuina listoina:
In[34]:=
Out[34]=
In[35]:=
Out[35]=
In[36]:=
Out[36]=
Funktion FindRoot syntaksi on hieman erilainen:
In[37]:=
Out[37]=
Komento Reduce
Yhtälöistä ja yhtälöryhmistä voidaan muodostaa mahdollisimman yksinkertaisia yhtäpitäviä yhtälöitä tai yhtälöryhmiä komennolla Reduce. Tuloksena voi tällöin olla ratkaisu yhtälönä tai yhtälöinä (eikä korvaussääntöinä) tai alkuperäisen kanssa yhtäpitävä yksinkertaisempi yhtälö tai ryhmä.
In[38]:=
Out[38]=
Symboli || on 'tai'. Vastaavasti && on 'ja'.
In[39]:=
Out[39]=
In[40]:=
Out[40]=