2.2 Yhtälöiden ratkaiseminen
Polynomiyhtälö
Polynomiyhtälön algebrallinen ratkaiseminen
> restart:
Määritellään polynomi p1:
>
> p1:=x^3+(-1/4-sqrt(2))*x^2+(-3/4+1/4*sqrt(2))*x+3/4*sqrt(2);
Polynomiyhtälölle p1=0 saadaan algebrallinen ratkaisu komennolla solve :
> solve(p1=0);
> restart:
Polynomiyhtälön numeerinen ratkaiseminen
> restart:
Määritellään polynomi p1:
> p1:=x^3+(-1/4-sqrt(2))*x^2+(-3/4+1/4*sqrt(2))*x+3/4*sqrt(2);
Polynomiyhtälön p1=0 juurille saadaan numeeriset approksimaatiot komennolla fsolve :
> fsolve(p1=0);
Approksimointitarkkuus on oletusarvoisesti 10 merkitsevää numeroa. Sitä voidaan muuttaa komennolla Digits :
> Digits:=5:
> fsolve(p1=0);
> restart:
Reaaliset ja kompleksiset juuret
> restart:
Määritellään sellainen polynomi p2, että polynomiyhtälöllä p2=0 on sekä reaalisia että kompleksisia juuria:
> p2:=x^5-3*x^4+(1+sqrt(2))*x^3+(-3-3*sqrt(2))*x^2+x*sqrt(2)-3*sqrt(2);
Komento solve ratkaisee polynomiyhtälön p2=0 kaikki juuret algebrallisessa muodossa:
> solve(p2=0);
Komento fsolve antaa oletusarvoisesti numeerisen approksimaation vain reaalisille juurille:
> fsolve(p2=0);
Kaikkien juurten numeeriset approksimaatiot saadaan liittämällä komentoon fsolve lisämääreet x ja complex:
> fsolve(p2=0,x,complex);
> restart:
Maplen esitysmuoto RootOf
> restart:
Maple saattaa oletusarvoisesti jättää hankalien tai mahdottomien lausekkeiden ratkaisut muotoon RootOf. Tällöin ratkaisu saadaan komennolla allvalues:
> solve(x^5+5*x^3-x^2-2=0,x);
> allvalues(%);
Edellisessä komennossa % -merkillä viitataan suoraan edeltävään tulokseen. Mikäli tuloslausekkeet ovat edelleen hankalia, Maple saattaa ottaa käyttöön %-alkuisia apumuuttujia.
> restart:
Polynomiepäyhtälö
> restart:
Polynomiepäyhtälö ratkaistaan komennolla solve . Maple antaa ratkaisun ilmoittamalla ne reaaliakselin välit, joilla epäyhtälö toteutuu. On huomattava, että Maplen tulosteessa tavalliset sulut merkitsevät (ääretöntä lukuunottamatta) välin suljettua päätepistettä.
> solve(x^2-2*x-3<=0);
Maple ilmoittaa välin avoimen päätepisteen (ääretöntä lukuunottamatta) lisähuomautuksella Open:
> solve(x^2-2*x-3>0);
Muutama epäyhtälöesimerkki:
> solve(x^3+(-1/4-sqrt(2))*x^2+(-3/4+1/4*sqrt(2))*x+3/4*sqrt(2)>=0);
> p1:=x^3+(-1/4-sqrt(2))*x^2+(-3/4+1/4*sqrt(2))*x+3/4*sqrt(2);
> solve(p1<=0);
> solve(p1<=2);
> restart:
Yhtälöryhmä
Yhtälörymän algebrallinen ratkaiseminen
> restart:
Yhtälöryhmä ratkaistaan algebrallisesti komennolla solve . Yhtälöt luetellaan joukkona , joten ne kirjoitetaan aaltosulkuihin pilkulla toisistaan erotettuina. Myös ratkaistavat muuttujat tulee luetella:
> solve({x+y+z=4, x-2*y+3*z=0, 3*x+sqrt(3)*y-z=2},{x,y,z});
Yhtälöryhmässä voi esiintyä myös parametreja:
> solve({x+y+z=4, x-a*y+b*z=0, 3*c+sqrt(3)*y-z=2},{x,y,z});
> restart:
Yhtälöryhmän numeerinen ratkaiseminen
> restart:
Yhtälöryhmän ratkaisuille saadaan numeeriset approksimaatiot komennolla fsolve :
> fsolve({x+y+z=4, x-2*y+3*z=0, 3*x+sqrt(3)*y-z=2},{x,y,z});
> restart:
Yhtälöryhmä epäyhtälörajoittein
> restart:
Ratkaistaan aluksi kahdeksan muuttujan yhtälöryhmä:
> solve({2*x[1]+2*x[4]+x[5]-x[6]=0, 2*x[2]+x[4]-x[7]=0, -2*x[3]+x[5]-x[8]=0, 2*x[1]*x[4]+x[2]*x[4]-5*x[4]=0, x[1]*x[5]+x[3]*x[5]-2*x[5]=0, -x[1]*x[6]+x[6]=0, -x[2]*x[7]+2*x[7]=0, -x[3]*x[8]=0});
Monesti muuttujille asetetaan lisäehtoja epäyhtälörajoitteilla. Tällainen yhtälö- ja epäyhtälöryhmä, jossa epäyhtälöt ovat polynomimuotoa, ratkeaa myöskin suoraan komennolla solve . Epäyhtälöt kirjoitetaan yksinkertaisesti samaan joukkoon kuin yhtälötkin:
> solve({2*x[1]+2*x[4]+x[5]-x[6]=0, 2*x[2]+x[4]-x[7]=0, -2*x[3]+x[5]-x[8]=0, 2*x[1]*x[4]+x[2]*x[4]-5*x[4]=0, x[1]*x[5]+x[3]*x[5]-2*x[5]=0, -x[1]*x[6]+x[6]=0, -x[2]*x[7]+2*x[7]=0, -x[3]*x[8]=0, 2*x[1]+x[2]-5<=0, x[1]+x[3]-2<=0, -x[1]+1<=0, -x[2]+2<=0, -x[3]<=0});
> restart:
Lineaarinen epäyhtälöryhmä
> restart:
Lineaarinen epäyhtälöryhmä ratkaistaan komennolla solve . Yhtälöt luetellaan joukkona , joten ne kirjoitetaan aaltosulkuihin pilkulla toisistaan erotettuina:
> solve({2*x+y>4,0<x,0<y,3*x-2*y>3,-x-2*y>-5});
Vaustauksessa on kiusallista se, että Maple ei osaa sieventää vastausta, vaan laskija joutuu tekemään sen itse. Lisäksi Maple toistaa ryhmän epäyhtälöt ratkaisussa.
> restart:
Iteraatiomenetelmiä
Yksinkertainen ja moninkertainen yhdistetty funktio
> restart:
Määritellään funktio f :
> f:=x->sin(x)-exp(-x);
Maplessa yhdistettyä funktiota merkitään symbolilla @ :
> (f@f)(x);
Vastaavasti moninkertainen yhdistetty funktio merkitään symbolilla @@ :
> (f@@3)(x);
> restart:
Newtonin iteraatiomenetelmä
> restart:
Sovelletaan Newtonin iteraatiomenetelmää yhtälöön
. Yhtälöllä on äärettömän monta juurta, joten se juuri jota kohti iterointi suppenee, riippuu
x
: n alkuarvon valinnasta.
Määritellään funktio f :
> f:=x->sin(x)-exp(-x);
Lasketaan funktion derivaatta D f, ja määritellään sekin funktiona:
> diff(sin(x)-exp(-x),x);
> Df:=x->cos(x)+exp(-x);
Määritellään Newtonin iteraatiokaava funktiona g :
> g:=x->x-(f(x)/Df(x));
Iteraatiokaavaa voidaan soveltaa joko for-silmukan tai moninkertaisen yhdistetyn funktion avulla.
Määrätään komennolla Digits Maplen likiarvotarkkuudeksi 15 merkitsevää numeroa, annetaan x : lle alkuarvoksi piin likiarvo 3.14159.
> Digits:=15:
> x:=3.14159:
Iteroidaan lauseketta kymmenen kertaa aluksi for-silmukan avulla:
> for i from 1 to 10 do
> x:=x-(f(x)/Df(x));
> od;
Toistetaan sitten sama iteraatio moninkertaisen yhdistetyn funktion avulla. Tällöin näkyviin tulee ainoastaan viimeinen tulos:
> (g@@10)(3.14159);
> restart:
>