solve
résoud les équations de façon formelle quand
c'est possible. Pour obtenir une valeur numérique il faut appliquer
float
à la forme non évaluée, obtenue par hold
.
Des méthodes numériques particulières sont disponibles dans le module
numeric
.
solve(x^4=a^4); solve(x^4=a^4, x); solve(a*x^2+b*x+c); solve(a*x^2+b*x+c, x); p:=x^4+x^3+x^2+x+1: s:=solve(p,x); simplify(expand(subs(p,x=op(s)[1]))); solve({x/(y+1)=z, y/(x+1)=t}, {x,y}); float(hold(solve)(x^7 + 3*x^2 = 1, x)); float(hold(solve)(x^7 + 3*x^2 = 1,x=-1..1)); numeric::newton(x^7 + 3*x^2 = 1,x=-1..1);La solution de certaines équations (par exemple trigonométriques) peut être un ensemble discret. Celle d'un système d'inéquations peut être un ensemble d'intervalles.
solve(sin(x)=cos(x),x); solve(exp(2*x)+2*exp(x)+1=z,x); solve(abs(x-1)>2,x); solve({x^2>4,x<5},x);Les systèmes linéaires, dégénérés ou non, se résolvent plutôt à l'aide de
linsolve
. Pour éviter d'avoir à taper le système
complet, on peut aussi utiliser la fonction linearSolve
du module
d'algèbre linéaire linalg
, qui prend comme arguments la matrice
du système et son second membre.
linsolve({2*x+y+z=6,2*x+y+2*z=10,x+3*y+z=10},{x,y,z}); linsolve({x+y+z=6,2*x+y+2*z=10,x+3*y+z=10},{x,y,z}); linsolve({2*x+y+z=5,2*x+y+2*z=10,x+3*y+z=10},{x,y,z});On peut appliquer
solve
à une équation différentielle,
formée à partir d'un ensemble d'expressions par ode
(ordinary
differential equation). Là aussi une fonction de calcul numérique
est disponible.
solve(ode(y'(x)-x*y(x)=1, y(x))); solve(ode(x^2*diff(y(x),x)+3*x*y(x)=sin(x)/x,y(x))); solve(ode({y''(x)+4*y(x)=sin(2*x), y(0)=0, D(y)(0)=0}, y(x))); systeme:={diff(x(t),t)-x(t)+y(t)=0,diff(y(t),t)-x(t)-y(t)=0}: solution:=solve(ode(systeme,{x(t),y(t)})); eval(subs([op(systeme)],op(solution))); f := proc(t,y) begin array(1..2,[y[2], t*y[1]^3]) end_proc: numeric::odesolve(0..2, f, [0,1], Stepsize=0.1, Alldata=2);On peut également former une équation de récurrence à l'aide de
rec
, avant de lui appliquer solve
.
solve(rec(r(n+2)-2*r(n+1)+r(n)=2,r(n))); solve(rec(r(n+2)-2*r(n+1)+r(n)=2,r(n),{r(0)=-1,r(1)=m}));