Riešenie rovníc a sústav rovníc v systéme Mathematica pomocou príkazových funkcií
Solve,  Eliminate, Reduce, FindRoot  

Príkazová funkcia Solve[ ] sa vždy snaží nájsť exaktné riešenie rovníc aplikovaním presných matematických pravidiel. Ak sa riešenie nepodarí nájsť, potom treba použiť niektorú z funkcií NSolve, Eliminate, Reduce, FindRoot, ...

Príklad 1.  Riešenie kvadratickej rovnice môžeme uložiť do premenných x1 a x2.

Solve[x^2  4]              ... e the use of logical equality  instead of =   *) x1 = x/.%[[1]] x2 = x/.%%[[2]]

{{x -2}, {x2}}

-2

2

Verifikácia obsahu premenných x1,  x2 :

x1 x2

-2

2

Príklad 2.  Riešenie rovnice vyššieho rádu x^6 - 10   môžeme uložiť do premennej  'z'. Hodnotu koreňov rovnice môžeme priradiť ľubovoľným iným premenným, napr. hodnotu tretieho koreňa premennej x3 a hodnotu piateho koreňa premennej x5.

z = Solve[x^6 - 10] x3 = x/.z[[3]] x5 = x/.z[[5]]

{{x -1}, {x1}, {x -(-1)^(1/3)}, {x (-1)^(1/3)}, {x -(-1)^(2/3)}, {x (-1)^(2/3)}}

-(-1)^(1/3)

-(-1)^(2/3)

Hodnota riešení s presnosťou na 12 desatinných miest:

N[x3,12]
N[x5,12]

RowBox[{RowBox[{-, 0.500000000000}], -, RowBox[{0.866025403784,  , }]}]

RowBox[{0.500000000000, -, RowBox[{0.866025403784,  , }]}]

Príklad 3.  Príkaz Solve nenájde exaktné riešenie rovnice    x^7 - 5x^3 (x + 1)^(1/2). Numerické riešeni poskytne príkaz NSolve[ ]. Rovnica má dva reálne korene a šesť komplexných koreňov.

r = Solve[x^7 - 5x^3 (x + 1)^(1/2), x] r = NSolve[x^7 - 5x^3 (x + 1)^(1/2), x]

{{xRoot[-1 - #1 + 25 #1^6 - 10 #1^10 + #1^14&, 1]}, {xRoot[-1 - #1 + 25 #1 ... 1^6 - 10 #1^10 + #1^14&, 13]}, {xRoot[-1 - #1 + 25 #1^6 - 10 #1^10 + #1^14&, 14]}}

RowBox[{{, RowBox[{RowBox[{{, RowBox[{x, , 1.52763}], }}], ,, RowBox[{{, RowBox[{x, &# ... 71,  , }]}]}], }}], ,, RowBox[{{, RowBox[{x, , RowBox[{-, 0.520013}]}], }}]}], }}]

Príklad 4.  Riešenie goniometrických rovníc sa nedá vždy nájsť.

Solve[Cos[x]== a, x]
Solve[Cos[x]== 2x , x]

Solve :: ifun : Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information.  More…

{{x -ArcCos[a]}, {xArcCos[a]}}

Solve :: tdep : The equations appear to involve the variables to be solved for in an essentially non-algebraic way.  More…

Solve[Cos[x] 2 x, x]

Príklad 5. Pri hľadaní rešenia druhej rovnice z predchádzajúceho príkladu treba použiť Newtonovu iteračnú metódu, ktorá je realizovaná príkazom FindRoot[ ].
Prvý odhad riešenia sa dá urobiť pomocou grafu funkcie cos x = 2x, ktorej nulový bod je v okolí bodu 0, preto x0=0.

Plot[Cos[x]-2x,{x,-5,5}]
FindRoot[Cos[x]== 2x, {x,0}]

[Graphics:HTMLFiles/index_23.gif]

⁃Graphics⁃

RowBox[{{, RowBox[{x, , 0.450184}], }}]

Príklad 6.  Analogicky sa dá nájsť riešenie sústavy dvoch rovníc, korene uložíme v premenných   а,  b :

f = 3x + y-5
g =-x + 2y+1
Solve[{f==0,g==0},{x,y}]    (*  In the first curly brackets we indicate the list of equations *)
              (*  and in the second curly brackets the list of unknowns x,y *)
N[%]
a= x/. %[[1]]
b= y/. %%[[1]]

-5 + 3 x + y

1 - x + 2 y

{{x11/7, y2/7}}

RowBox[{{, RowBox[{{, RowBox[{RowBox[{x, , 1.57143}], ,, RowBox[{y, , 0.285714}]}], }}], }}]

1.57143

0.285714

Príklad 7.  Overenie riešenia substitúciou:

a
b
f /. {x->a,y->b}
g /. {x->a,y->b}

1.57143
0.285714
0.
0.

Príklad 8.  Riešenie parametrickej sústavy:

Solve[{c*x + y==0, 3x + (1+c)y == 1}, {x,y}]

{{x -1/(-3 + c + c^2), yc/(-3 + c + c^2)}}

Príklad 9.  Riešenie sústavy dvoch rovníc. Niekedy je výstup veľmi dlhý, napr. riešením uvedeného príkladu sú 4 popísané stránky vzorcov, a môže byť často bezcenným. Ak ho chceme skryť/zobraziť, stačí dvakrát ťuknúť na hranatú zátvorku označujúcu bunku v pravej časti obrazovky.

p = x^2 + 2y 3 ;     q = 3x + y^21 ; Solve[ {p, q }, {x, y}]

Numerické hodnoty koreňov sú:

%//N

RowBox[{{, RowBox[{RowBox[{{, RowBox[{RowBox[{x, , RowBox[{RowBox[{1.70919, }] ... Box[{RowBox[{x, , RowBox[{-, 0.354983}]}], ,, RowBox[{y, , 1.43699}]}], }}]}], }}]

Príklad 10. Riešenie sústavy dvoch rovníc s neznámymi x, y. Rovnice môžeme uložiť ako výrazy ur1 a ur2. Pre znak rovnosti musíme použiť symbol ==   namiesto obyčajného symbolu =. Použitím funkcie Solve nedostaneme exaktne všetky korene, ktoré sú riešením sústavy, systém nájde najlepšie možné riešenie, v ktorom je y vyjadrené v závislosti od neznámej hodnoty x. V tomto prípade je vhodné použiť funkciu pre numerický zápis výsledku, pričom špeciálne jedna hodnota koreňov je uložená v premených x3 a y3, a môžeme ju neskôr v prípade potreby použiť.

ur1 = x^3 - 2x y - 10 ur2 = y^2/x + 4y - x -1 Solve[{ur1, ur2}, {x, y}]   ... p;(*This is better to obtain the approximate numerical solutions*) x3 = x/.%[[3]] y3 = y/.%%[[3]]

-1 + x^3 - 2 x y0

-x + 4 y + y^2/x -1

{{y0, x1}, {y1/2 Root[-1 - #1 + 7 #1^2 + 5 #1^3 + 9 #1^4 + #1^5&,  ... ^3 + 9 #1^4 + #1^5&, 5]^4), xRoot[-1 - #1 + 7 #1^2 + 5 #1^3 + 9 #1^4 + #1^5&, 5]}}

RowBox[{{, RowBox[{RowBox[{{, RowBox[{RowBox[{y, , 0.}], ,, RowBox[{x, , 1.}]} ... [{x, , RowBox[{RowBox[{-, 0.265139}], +, RowBox[{0.952031,  , }]}]}]}], }}]}], }}]

RowBox[{-, 0.327031}]

1.58238

Príklad 11. Pri riešení komplikovaných rovníc je niekedy užitočné najprv rovnice zjednodušiť, napríklad elimináciou niektorých premenných. V sústave z príkladu 10 eliminujeme v jednej rovnici ' x ' a v druhej ' y '. Výsledkom sú dve rovnice šiesteho stupňa jednej premennej ' y ' a ' x '.

opr1=Eliminate[{ur1,ur2},x]
opr2=Eliminate[{ur1,ur2},y]

10 y + 43 y^2 + 74 y^3 - 12 y^4 - 36 y^5 + y^6 == 0

-8 x^2 + 2 x^3 - 4 x^4 + 8 x^5 + x^6 == -1

Príklad 12. Riešenie rovníc z predchádzajúceho príkladu v takom prípade vyžaduje, aby sme príslušné nájdené hodnoty neznámych x a y spárovali.

rey=N[Solve[opr1,y]]
rex=N[Solve[opr2,x]]

RowBox[{{, RowBox[{RowBox[{{, RowBox[{y, , 0.}], }}], ,, RowBox[{{, RowBox[{y,  ... Box[{y, , RowBox[{RowBox[{-, 0.282294}], +, RowBox[{0.23497,  , }]}]}], }}]}], }}]

RowBox[{{, RowBox[{RowBox[{{, RowBox[{x, , 1.}], }}], ,, RowBox[{{, RowBox[{x,  ... ox[{x, , RowBox[{RowBox[{-, 0.265139}], +, RowBox[{0.952031,  , }]}]}], }}]}], }}]

Problém sa dá vyriešiť nasledujúcim spôsobom: vyberieme niektorú hodnotu z riešenia x z druhého riadku, napr. druhú, a dosadíme ju do jednej z pôvodných rovníc. Získanú rovnicu riešime vzhľadom na ' y ' a získame tak zodpovedajúcu hodnotu riešenia. Výsledkom je: { x = - 8.5107,  y = 36.2737 }.

x2=x/.rex[[2]]
ur11=ur1 /. x->x2
N[Solve[ur11,y ]]

RowBox[{-, 8.51057}]

RowBox[{RowBox[{RowBox[{-, 617.419}], +, RowBox[{17.0211,  , y}]}], ==, 0}]

RowBox[{{, RowBox[{{, RowBox[{y, , 36.2737}], }}], }}]

Príklad 13. Systém Mathematica rieši aj homogénne sústavy rovníc. Nasledujúca sústava troch rovníc s tromi neznámymi má exaktné riešenie.

Clear[x, y, z] Solve[{x^2 + 2y - 3z0, x - z - y0, -x + 6y + 4z0}, {x, y, z}]

{{y -63/4, z105/4, x21/2}, {y0, z0, x0}}

Príklad 14. Všetky rôzne tvary riešenia kvadratickej rovnice s parametrami a, b, c poskytne príkaz Reduce. Výsledky zobrazí pomocou logických operátorov || (logický súčet) a && (logický súčin).

Reduce[a x^2 + b x + c0, x]

x == (-b - (b^2 - 4 a c)^(1/2))/(2 a) &&a≠0 || x == (-b + (b^2 - 4 a c)^(1/2))/( ... ≠0 || a == 0&&b == 0&&c == 0 || a == 0&&x == -c/b&&b≠0

    Ak parametrom priradíme čiselné hodnoty, výsledok vyzerá inak:

a = 5 Reduce[a x^2 + b x + c0, x] b = 6 Reduce[a x^2 + b x + c0, x] c = -3 Reduce[a x^2 + b x + c0, x] N[%]

5

x == 1/5 (-3 - 2 6^(1/2)) || x == 1/5 (-3 + 2 6^(1/2))

6

x == 1/5 (-3 - 2 6^(1/2)) || x == 1/5 (-3 + 2 6^(1/2))

-3

x == 1/5 (-3 - 2 6^(1/2)) || x == 1/5 (-3 + 2 6^(1/2))

RowBox[{RowBox[{x, ==, RowBox[{-, 1.5798}]}], ||, RowBox[{x, ==, 0.379796}]}]

Príklad 15. Riešenie príkladu 10 pomocou funkcie Reduce. Keďže riešením je komplikovaný logický výraz, môžeme použiť operátor ; (bodkočiarka), aby sme zabránili jeho výpisu. Zobrazíme iba numerickú hodnotu výsledku.

Reduce[{ur1, ur2},{x,y}];
N[%]

RowBox[{RowBox[{RowBox[{x, ==, 1.}], &&, RowBox[{y, ==, 0.}]}], ||, RowBox[{RowBox[{x, ... amp;&, RowBox[{y, ==, RowBox[{RowBox[{-, 0.282294}], +, RowBox[{0.23497,  , }]}]}]}]}]

Príklad 16. Riešenie sa dá nájsť aj numericky, odhadom prvej približnej hodnoty koreňa. Pri voľbe reálneho čísla dostávame reálny koreň, pri odhade v tvare komplexného čísla, najbližší koreň komplexný.

FindRoot[{ur1,ur2},{x,-1},{y,-1}]
FindRoot[{ur1,ur2},{x,-0.1+i},{y,i}]

RowBox[{{, RowBox[{RowBox[{x, , 1.}], ,, RowBox[{y, , 1.88287*10^-19}]}], }}]

RowBox[{{, RowBox[{RowBox[{x, , RowBox[{RowBox[{-, 0.265139}], +, RowBox[{0.952031,  , ... , RowBox[{y, , RowBox[{RowBox[{-, 0.282294}], +, RowBox[{0.23497,  , }]}]}]}], }}]

Príklad 17. Vyjadrenie jednej hodnoty pomocou druhej.

f1=Reduce[ur1,y]
f2=Reduce[ur2,y]

x≠0&&y (-1 + x^3)/(2 x)

x≠0&& (y -2 x - (-x + 5 x^2)^(1/2) || y -2 x + (-x + 5 x^2)^(1/2))


Created by Mathematica  (December 21, 2007)