Ř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);
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".
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
> a;b; # nemají přiřazenu hodnotu
>
assign(reseni): #teď už ano
a;b;
>
unassign('a','b'); #opět a i b nemají hodnotu.
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);
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
> solve({a+b=2,b-c=3},{b,a});
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);
> evalf(res); #nedá obvykle požadovaný výsledek
>
### 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
> fsolve(x^5+2*x^3-5*x^2+6,x,complex); #toto ano
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);
Lze samozrejme řešit i nerovnice a jejich soustavy. Zde se omezime poze na jednoduchou ukazku.
> solve(exp(x)>1/2);
> solve({x-y>-1/2,x+y>3});