Bonjour, alors voilà j'ai un dm de maths à faire pour la rentrée, je viens vous voir car j'ai du mal sur ces questions.
On considère les suites (Un) et (Vn) définies par Un=1/1²+1/2²+...+1/n²
Vn=Un + 1/n
(n appartenant à N*)
On sait que ces 2 suites sont adjacentes : (Un) est croissante, (Vn) est décroissante et lim (Vn -Un)=0
(n--> +inf)
Voilà mon problème, il faut compléter un script de la fonction Python exemple1 afin que exemple1(n) renvoie les valeurs de Un et Vn pour tout entier naturel n>=1.
Le prof nous as donné un script qu'il faut remplir:
1)
def exemple1(n):
u=....
for k in range (.... , ....):
u=u+..................
return .... , ....
Je suis très nul quand il s'agit de Python. Dans les trous je peux remplir certains trous : le premier je dirais 1, puis le second et le troisième 1 et n+1, dans le quatrième je dirais 1/k**2 et dans les deux derniers trous je dirais U et U+1/n (pour que V ressorte).
C'est la façon dont j'ai réfléchis mais quand je fais le programme python sur ordi je dois surement oublié quelque chose ou mal le faire car cela ne marche pas.
2) Proposer un encadrement ainsi qu'une valeur rapprochée de l à 10^-3 près.
Voilà mes 2 questions si vous pouviez m'aider cela serait vraiment sympatique.
Merci beaucoup d'avance.
J'en dis un peu plus pour te mettre sur la voie.
La ligne u=... consiste à initialiser la valeur de la suite U.
En choisissant u=1, tu donnes la valeur de U1 (1/1²=1)
A la ligne for k in range (.... , ....), tu choisis les bornes entre lesquelles k va varier.
Imagine ce qui va être calculé au premier passage
Effectivement je n'y avait pas pensé mais si on met u=1 et que à la ligne for k in range(.... , ....) je met 1 et n+1, on fera 2 fois la première étape vu que u=1 signifie qu'on a déjà fait la première étape.
Donc je pense il faut soit mettre u=0 et donc à la ligne for k in range (.... , .....) je peux mettre 1 et n+1.
Soit je met u=1 et à la ligne for k in range (.... , ....) je met 2 et n+1.
Est-ce cela ou pas ?
Oui, je pense.
Ensuite, je ne connais pas Python.
Mais si tu veux que ça s'arrête à n, est-ce bien n+1 qu'il faut choisir?
Dans d'autres langages, on met n (Pascal, Cobol, Basic, C aussi je crois...)
Bonjour
"je ne connais pas Python", oui "RTFM" (Relire Ton Fichu Manuel, en français)
la définition de range(n) est bien de 0 à n-1 inclus, donc, n nombres
et si on met une valeur initiale a ;
range (a,n) de a à n-1 inclus
c'est l'un des "pièges" classiques quand on passe d'un autre langage à Python : d'imaginer que "for" fait la même chose.
que nenni.
Voici comment procéder pour résoudre ton exercice 😉
Étape n°1 : Comprendre les suites que tu as entre les mains
Je te propose de calculer les quelques premières valeurs de tes suites sur feuille en prenant bien en compte que :
Les premiers termes de la suite sont forcément et , sinon cela conduit à diviser par .
Tu obtiens alors :
Étape n°2 : Essaye de réfléchir à ce que doit faire ta fonction
Elle doit en fonction de la valeur de que tu lui passes, te renvoyer la valeur de et la valeur de .
Tu remarques que ta fonction ne contient pas de référence à V où que ce soit, donc ça signifie que tu peux tout faire à partir de U.
Je commencerais pas initialiser à .
Puis je réfléchirais au sens de ta boucle.
⚠️ Il s'agit d'une boucle utilisant la fonction range avec 2 paramètres qui parcourt donc toutes les valeurs de la première INCLUSE à la deuxième EXCLUE.
Quelques exemples :
- range(1, 10) parcourt les valeurs 1 à 9 à tour de rôle dans ta variable k
- range(1, 100) parcourt les valeurs 1 à 99 à tour de rôle dans ta variable k
Donc, ici, je noterais donc à (ainsi, la fonction va bien parcourir les valeurs de à ).
À l'intérieur de la boucle je réfléchis à ce que doit contenir à mesure que j'itère dessus.
u doit contenir l'ancienne valeur de u + la nouvelle valeur de actuelle
Enfin, après la boucle je renverrais :
- qui contient la bonne valeur de
- qui contient la valeur de
J'obtiens le code suivant :
def exemple1(n):
u = 0
for k in range(1, n+1):
u = u + 1/(k**2)
return u, u+(1/n)
n = int(input('n = '))
u, v = exemple1(n)
print('u = ', u, '\nv = ', v) # Le \n permet de faire un retour à la ligne
Wow merci beaucoup howard ! Tes explications ont été extrêmement claires et j'ai d'avantage compris.
J'avais surtout du mal sur le range mais maintenant je vois bien comment cela marche et de plus le script python je l'avais mal taper, donc par conséquent il ne marchait pas mais maintenant il marche vu que tu as corrigé mon erreur sur mon script. Vraiment merci beaucoup pour le script !
Juste par contre pour le deuxièmement je me doute que l c'est une limite mais c'est la limite de quoi je ne vois pas, le problème vu que je ne vois pas de quelle limite il s'agit je ne peux pas donner un encadrement et une valeur rapprochée à 10^-3.
Je t'en prie 😉👍
Pour la question 1) :
Je ne peux que te conseiller de coder la fonction que j'ai écrite et de la tester.
Fais attention cependant car il n'y a aucune gestion des erreurs.
Par exemple, je n'ai pas géré le cas où l'utilisateur saisirait :
- 0,
- un nombre entier négatif,
- un nombre décimal,
- un caractère quelconque, autre qu'un nombre entier
En programmation il faudrait être beaucoup plus rigoureux mais là n'est pas la question 😉
Pour la question 2) :
Cela me cemble étrange.
Est-ce que tu as bien recopié tout l'énoncé ? Car a priori, on ne sait pas du tout à quoi cela correspond.
Vérifie que tu as bien tout recopié s'il te plaît.
le programme initial qui marche sans aucun problème était bien :
def exemple1(n):
u=1 # u_1
for k in range (2, n+1):
u=u+1/k**2
return u , u+1/n
Là je vais aller manger, mais je te réponds vite fait avant d'y aller.
Pour la question 1 c'est ce que je vais faire après manger (le tester)
et concernant la question 2, c'est un polycopié que mon prof m'a donnée donc je ne comprend pas la question 3 est bien :
"Proposer un encadrement ainsi qu'une valeur approchée de l à 10^-3 près"
Peut-être il parle de la limite de la suite (Un) et de la suite (Vn) vu que c'est la même limite (étant donnée qu'elles sont adjacentes toutes les 2)
Absolument mathafou, il était tout à fait possible de laisser range(2, n+1), cela aurait donné le même résultat ! J'aurais effectivement dû lui indiquer ?
En revanche, c'est moins élégant d'un point de vue programmation car cela signifie que si on saisit la valeur 2, alors on fait un appel inutile à la fonction range qui est donc range(2, 2) qui renvoie un itérable nul.
Par ailleurs, je ne voulais pas l'encombrer avec la fonction Zeta puisqu'il n'est qu'en classe de Terminale ?
Du coup, si la question 2) consiste bien à trouver la valeur vers laquelle les 2 suites convergent quand n tend vers , il suffit effectivement d'exécuter la fonction pour une valeur de n très grande.
Pour n = 1000000, j'obtiens que :
U(1000000) = 1.64493306684877
V(1000000) = 1.64493306684877
Tu peux vérifier avec le lien suivant où j'ai recodé la fonction.
https://onecompiler.com/python/3yx8pc9cr
Tu saisis ta valeur de n dans STDIN en haut à droite et tu cliques sur RUN.
En revanche, nous ne savons pas pour s'il s'agit de :
1) Calculer la limite vers laquelle les 2 suites convergent (auquel cas je l'ai fait au dessus avec n = 1000000)
2) Trouver un encadrement de la valeur de n pour laquelle :
Dans ce 2e cas, il suffit de résoudre l'inéquation :
Et alors :
Voilà voilà ! ?
Ah et du coup pour l'encadrement à près, ça me semblait évident mais je précise au cas où, on a :
J'espère que ça t'aura aidé.
Bonne soirée !
C'est bon Sylvieg, c'est fait 😉
Je n'étais pas sûr (et ne le suis toujours pas) de s'il fallait indiqué mon niveau d'études maximum atteint ou bien mon niveau actuel étant donné que j'ai fini mes études il y a déjà un bon nombre d'années.
Merci 🙂
C'est vrai que c'est plus important pour les demandeurs que pour les aidants.
Nous sommes nombreux sur l'île pour lesquels les études sont un lointain souvenir.
Tu sembles avoir gardé un bon niveau pour ce qui est de la programmation.
En tous cas bienvenue !
Je t'en prie 😁
Étant donné que j'ai fait des études en Informatique et que je suis un peu un touche-à-tout mais sans aller au bout de chaque discipline qui m'interesse (mathématiques, informatique (programmation en Python), intelligence artificielle (ML : Machine Learning, DL : Deep Learning), etc.) c'est un petit peu normal que je m'en sorte sur quelque chose d'aussi trivial 😁
D'ailleurs, s'il y en a que ça interesse, voici les 2 liens les plus importants de la documentation Python portant sur la fonction range() et son fonctionnement.
https://docs.python.org/fr/3/library/functions.html#func-range
https://docs.python.org/fr/3/library/stdtypes.html#typesseq-range
Elle peut en théorie prendre jusqu'à 3 paramètres :
- start : valeur de départ (incluse)
- stop : valeur d'arrivée (exclue)
- step : le pas d'itération (de combien en combien on itère à chaque tour de boucle)
Voilà voilà 😉
Bon courage à tous les férus de programmation et de maths 😁
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :