Řešení algebraických rovnic a jejich soustav

K symbolickému řešení rovnic slouží příkaz solve .

> rovnice:=x^2+5*x+10=0;
solve(rovnice);

rovnice := x^2+5*x+10 = 0

-5/2+1/2*I*sqrt(15), -5/2-1/2*I*sqrt(15)

Při řešení soustav rovnic zapisujeme jednotlivé rovnice do množiny. Tam kde chybí pravá strana rovnice, bere se nulová.

> reseni:=solve({a+b,b+c=4},{a,b}); #řešíme pro neznámé "a" a "b".

reseni := {b = -c+4, a = c-4}

Výsledek je opět množina, kterou lze použít např. v příkazu subs. V každém případě není výlsledek přiřazením! To lze uskutečnit napč pomocí příkazu assign .

> subs(reseni,a+b); # musí podle 1. rovnice vyjít 0

0

> a;b; # nemají přiřazenu hodnotu

a

b

> assign(reseni): #teď už ano
a;b;

c-4

-c+4

> unassign('a','b'); #opět a i b nemají hodnotu.
a;b;

a

b

Pokud nebudeme požadovat parametricé řešení, MAPLE si umí nalést proměnné sám:

> rovnice:={a+b=2,b-c=3,a-c=4};

> promn:=indets(rovnice);
solve(rovnice,promn);

rovnice := {a+b = 2, b-c = 3, a-c = 4}

promn := {a, b, c}

{c = -5/2, b = 1/2, a = 3/2}

Parametrické řešení lze uskutečnit dvěma zkůsoby:

> simplify({b,a},{a+b=2,b-c=3},[a,b,c]); #tento prikaz bude probrán dále

{-c-1, c+3}

> solve({a+b=2,b-c=3},{b,a});

{b = c+3, a = -c-1}

k vyjdreni (eliminaci) jedne promenne slouzi prikaz eliminate , vysledkem je potom vztah platici pro tuto promennou a souatava rovnic, kde je tato promenna eliminovana.

> eliminate({a+b^2-1/c=2,1/b-a-c=3},c);

V mnoha případech nelze najít (neexistuje) sybolické řešení. Potom lze postupovat podle následující ukázky:

> res:=solve(x^5+2*x^3-5*x^2+6);

res := RootOf(_Z^5+2*_Z^3-5*_Z^2+6,index = 1), Root...
res := RootOf(_Z^5+2*_Z^3-5*_Z^2+6,index = 1), Root...

> evalf(res); #nedá obvykle požadovaný výsledek

1.124683576+.5501820897*I, -.6775737819+1.954771951...

> ### WARNING: allvalues now returns a list of symbolic values instead of a sequence of lists of numeric values
allvalues(res); #toto ano

Error, (in allvalues) redundant option RootOf(_Z^5+2*_Z^3-5*_Z^2+6,index = 3)

Pro tyto případy existuje ještě příkaz fsolve pro numerický výpočet kořenů rovnice (rovnic).

> fsolve(x^5+2*x^3-5*x^2+6); #ani toto nedá požadovaný výsledek

-.8942195891

> fsolve(x^5+2*x^3-5*x^2+6,x,complex); #toto ano

-.8942195891, -.6775737819-1.954771951*I, -.6775737...

Někdy nás zajímá pouze řesění v určitém intervalu hodnot, zejména, je-li počet řešení nekonečný.

> fsolve(sin(x)=0.5,x,2*Pi..4*Pi);

8.901179185

Lze samozrejme řešit i nerovnice a jejich soustavy. Zde se omezime poze na jednoduchou ukazku.

> solve(exp(x)>1/2);

RealRange(Open(-ln(2)),infinity)

> solve({x-y>-1/2,x+y>3});

{-x-y < -3, -x+y < 1/2, 5/4 < x}