Bonjour,
A l'occasion d'un TD en Terminale S sur la loi d'équilibre génétique
(cf manuel scolaire transmath 2008 page 267),
je demande après les conjectures d'usage sur le tableur,
l'expression et le comportement de 3 suites.
Les élèves vérifient pour terminer avec rsolve:
rsolve([u(n+1)=0.25*v(n)+u(n),v(n+1)=0.5*v(n),w(n+1)=0.25*v(n)+w(n)],[u(n),v(n),w(n)],[u(0)=0,v(0)=1,w(0)=0])
ce qui donne (version juillet 2009):
[[-0.5*exp((n+1-1)*-0.6931471806)+0.5,exp((n+1-1)*-0.6931471806),-0.5*exp((n+1-1)*-0.6931471806)+0.5]]
Ma question est donc la suivante:
Peut-on obtenir dans ce cas les expressions exactes ?
Merci.
luc briel, ens math lycée la roque Rodez.
rsolve: exactes ou approchées ?
Modérateur : xcasadmin
Re: rsolve: exactes ou approchées ?
Bonjour,
Pour avoir des solutions exactes, il faut que toutes les données soient saisies exactement, sinon les données entrées sous forme de réels approchés vont "infecter" toutes les données exactes d'où le résultat que vous avez obtenu. Dans votre cas, il faut soit rentrer 1/4 à la place de 0.25 et 1/2 au lieu de 0.5, soit utiliser exact pour faire convertir les réels approchés en rationnels, ce qui donnerait:
rsolve(exact([u(n+1)=0.25*v(n)+u(n),v(n+1)=0.5*v(n),w(n+1)=0.25*v(n)+w(n)]),[u(n),v(n),w(n)],[u(0)=0,v(0)=1,w(0)=0])
Vous pouvez aussi écrire
[u,v,w]:=rsolve(exact([u(n+1)=0.25*v(n)+u(n),v(n+1)=0.5*v(n),w(n+1)=0.25*v(n)+w(n)]),[u(n),v(n),w(n)],[u(0)=0,v(0)=1,w(0)=0])[0]
ce qui stocke dans les variables u, v et w l'expression de u(n), v(n), w(n) en fonction de n. Pour avoir la valeur de par exemple u_20, on ferait alors
normal(subst(u,n=20)) (exact) ou evalf(subst(u,n=20)) (approché)
(attention u(20) ne marcherait pas car u est une expression et pas une fonction).
Pour avoir le comportement limite en l'infini, limit([u,v,w],n=inf)
a+
Pour avoir des solutions exactes, il faut que toutes les données soient saisies exactement, sinon les données entrées sous forme de réels approchés vont "infecter" toutes les données exactes d'où le résultat que vous avez obtenu. Dans votre cas, il faut soit rentrer 1/4 à la place de 0.25 et 1/2 au lieu de 0.5, soit utiliser exact pour faire convertir les réels approchés en rationnels, ce qui donnerait:
rsolve(exact([u(n+1)=0.25*v(n)+u(n),v(n+1)=0.5*v(n),w(n+1)=0.25*v(n)+w(n)]),[u(n),v(n),w(n)],[u(0)=0,v(0)=1,w(0)=0])
Vous pouvez aussi écrire
[u,v,w]:=rsolve(exact([u(n+1)=0.25*v(n)+u(n),v(n+1)=0.5*v(n),w(n+1)=0.25*v(n)+w(n)]),[u(n),v(n),w(n)],[u(0)=0,v(0)=1,w(0)=0])[0]
ce qui stocke dans les variables u, v et w l'expression de u(n), v(n), w(n) en fonction de n. Pour avoir la valeur de par exemple u_20, on ferait alors
normal(subst(u,n=20)) (exact) ou evalf(subst(u,n=20)) (approché)
(attention u(20) ne marcherait pas car u est une expression et pas une fonction).
Pour avoir le comportement limite en l'infini, limit([u,v,w],n=inf)
a+