Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

suites adjacentes

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
molp



Inscrit le: 29 Oct 2006
Messages: 4

MessagePosté le: 04 Nov 2006 16:48    Sujet du message: suites adjacentes Répondre en citant

bonjour, Smile
je cherche à écrire l'algorithme suivant (et comme j'ai commencé à utiliser maple que depuis 2 semaines : oui je sais ! mais vaut mieux tard que jamais!!!) et je ne vois vraiment pas comment faire :
"Soient a et b deux réels tels que 0<a<b. On démontre que les suites (u[n]) et (v[n]) définies par u[0]=a, v[0]=b, et la relation de récurrence simultanée :
{u[n+1]=sqrt(u[n]*v[n])
{v[n+1]=(u[n]+v[n])/2
sont adjacentes. Ecrire un algorithme qui, à partir des réels a et b, calcule une valeur approchée à 10^-6 près de cette limite."
merci d'avance Wink Wink
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
zozo



Inscrit le: 03 Jan 2013
Messages: 125

MessagePosté le: 04 Nov 2006 17:32    Sujet du message: Répondre en citant

On s'arrete dès que abs(u[n]-v[n])<epsilon, avec ici epsilon=10^(-6)
donc avec une boucle while, tu boucles tant que abs(u[n]-v[n])>=epsilon.
A+
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
molp



Inscrit le: 29 Oct 2006
Messages: 4

MessagePosté le: 04 Nov 2006 19:43    Sujet du message: Répondre en citant

voici ce que j'ai écrit à la fin il faudrait mettre evalf mais je sais pas avec quoi pour déterminer la valeur de la limite.
A part ca il doit manquer d'autres choses.
merci de m'aider à compléter car je vois pas ce qui manque.

merci d'avance!!
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
molp



Inscrit le: 29 Oct 2006
Messages: 4

MessagePosté le: 04 Nov 2006 19:44    Sujet du message: Répondre en citant

oups il manquait ce que j'ai écrit :

u[0] := a; v[0] := b; while 1/1000000 < sqrt(u[n]*v[n])-1/2*u[n] do sqrt(u[n+1]*v[n+1])-1/2*u[n+1] end do
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
prof_simplet



Inscrit le: 12 Sep 2006
Messages: 86

MessagePosté le: 05 Nov 2006 10:47    Sujet du message: Répondre en citant

Bonjour, ça ne marchera pas: car déjà a et b n'ont pas de valeurs (il faudrait écrire une procédure limite de paramètres a, b, et epsilon) et n n'a pas été initialisé et n'évolue pas. Conseil: mettre 3 variables locales dans la procédure: n, u et v qui contiendront les valeurs des suites (u[n]) et (v[n]) au cours du calcul.
Comme les suites sont adjacentes, c'est le u[n], ou le v[n] final qui donneront une valeur approchée de la limite L, car |u[n]-L|<=|u[n]-v[n]|<epsilon.
Je te laisses approfondir la question.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
molp



Inscrit le: 29 Oct 2006
Messages: 4

MessagePosté le: 05 Nov 2006 13:05    Sujet du message: Répondre en citant

bonjour, donc je propose:

limite:=proc(a::positive,b::positive,`&varepsilon;`::positive)
local n,u[n],v[n];
n:=0: u[0]:= a: v[0]:=b:
while u[n]*v[n]<`&varepsilon;` do
n:=n+1: u[n+1]:=sqrt(u[n]*v[n]): v[n+1]:=(u[n]+v[n])/2: rang:=evalf(u[n+1]+v[n+1]):
od;
n
end proc:


est-ce correct ????

merci d'avance Razz Razz
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
molp



Inscrit le: 29 Oct 2006
Messages: 4

MessagePosté le: 05 Nov 2006 13:08    Sujet du message: Répondre en citant

ah oui je sais pas à quel moment je dois définir :
&varepsilon=10^-6

Embarassed Embarassed
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
molp



Inscrit le: 29 Oct 2006
Messages: 4

MessagePosté le: 05 Nov 2006 17:20    Sujet du message: Répondre en citant

s'il vous plait pouvez vous me dire si ce que je propose est correct ?
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 06 Nov 2006 12:51    Sujet du message: Répondre en citant

Je vous propose la correction suivante, votre condition while u[n]*v[n]<`&varepsilon;` do n'étant pas satisfaisante.


Code:

> limite:=proc(a::numeric,b::numeric,epsilon::numeric)
> local n,t,u,v;
> n:=0: u:=a: v:=b:
> while abs(u-v)>=epsilon do
>   n:=n+1: t:=u:
>   u:=evalf(sqrt(u*v)): v:=evalf((t+v)/2):
>   print(n,u,v)  # affichage de n,u,v  en cours de calcul 
> od:
> u  # résultat final (valeur approchée par défaut de la limite)
> end proc:

> limite(1,2,10^(-6));

                     1, 1.414213562, 1.500000000


                     2, 1.456475315, 1.457106781


                     3, 1.456791014, 1.456791048


                             1.456791014



En supposant a<b, mettre v à la place de u comme résultat final si on veut une valeur approchée par excès de la limite.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


phpBB

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com


Apprendre Maple - ©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.