Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 02-06-2021 15:41:15

RAZAFINDRAFINDRA Hercele
Invité

Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour!
J'ai besoin d'aide pour la langage Python puisque je suis débutant. Alors mon sujet est " Élaboration d'un logiciel de résolution d'un polynôme de degré n dans Q et dans Z". C'est-à-dire, le procédure de mon algorithme est comme suivant:
Dans Q
- je veux construire d'un polynôme de degré n, avec an le coefficient dominant et a0 le coefficient constante;
-lister les diviseurs de an et a0;
- lister les divisions des diviseurs de a0 sur diviseurs de an;
-et tester chaque candidat dans la lister des divisions par le polynôme
Et dans Z
  soit P un polynôme unitaire.
  -lister les diviseurs de a0
   -il suffit de vérifier que si la somme des nombres dans le liste de diviseur soit égale à -(a_n-1)

Merci d'avance!

#2 02-06-2021 16:17:02

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonsoir,

Résolution d'un polynôme de degré n dans Q et dans Z

Tu veux dire que les solutions, quand elles existent, appartiennent à Z ou à Q ?
Les coefficients a0, a1, a2.... an appartiennent à Z ? à Q ?
Voilà un polynôme P(x) :
$P(x)=-3x^5+24x^4-5x^3+11x^2-17x+19$
Sur cet exemple, peux-tu me montrer comment tu appliques ton algorithme avec un stylo et une feuille de papier ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 04-06-2021 08:37:00

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour!
Aider moi s'il vous plait!
Voici mon objectif de cet algorithme.

Résolution dans Q
Tout d’abord on va vérifier le polynôme à l’aide du calcul pgcd(a0,a1,...,an).

1er cas, si pgcd(a0,a1,...,an) = 1 :
P est irréductible donc il n’a pas des racines.

2em cas, pgcd(a0,a1,...,an) 6= 1 :
une méthode d’identification des candidats à être racines de P, à savoir :
      - Lister l’ensemble D(a0) = {d ∈ Z;d|a0} des diviseurs de a0;
      - Lister l’ensemble D(an) = {d;d|an} des diviseurs de an;
      - Lister l’ensemble des racines possibles de P, ou tout simplement le domaine des tests : DT(P) = {p/q;p ∈ D(a0)etq ∈ D(an) ≈ D(a0)×D(an)}. Le polynôme P(X) = 3X^3 −2X^2 + 5X + 2 admet-il des racines rationnelles? En effet, ici a3 = 3 et a0 = 2. Donc D(a3) = {±1,±3} et D(a0) = {±1,±2}.
Ainsi l’ensemble des racines rationnelles possibles de P est DT(P) = {−1,1,−2,2,−1/3,1/3,−2/3 Donc on doit tester chaque élément par exemple P(−1/3) = 0, P(1/3) = 0, si ils sont vérifiés, alors on les affiche.

Résolution dans Z
On s’intéresse toujours sur le pour le polynôme unitaire, c’est-à-dire an = 1

1er cas, si pgcd(a0,a1,...,an) = 1 :
P est irréductible donc il n’a pas des racines.

2em cas, pgcd(a0,a1,...,an) 6= 1 :
une méthode d’identification des candidats à être racines de P, à savoir :
      - Lister l’ensemble D(a0) = {d ∈ Z;d|a0} des diviseurs de a0;
      - Lister l’ensemble des racines possibles de P, ou tout simplement le domaine des tests :D(a0) = {d ∈ Z;d|a0} (ou si c’est possible on fait le tirage au hasard tel que Pdi = −an−1) pour tout di ∈ D(a0)

Merci d'avance!

#4 04-06-2021 11:22:34

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour,

Pour t'aider, il faut d'abord que
- tes idées soient claires,
- ton algorithme soit sans faille
Or, sauf erreur, ce n'est pas le cas...

1. Tu n'as pas répondu à mes questions :
   

Tu veux dire que les solutions, quand elles existent, appartiennent à Z ou à Q ?
Les coefficients a0, a1, a2.... an appartiennent à Z ? à Q ?

2. Tu n'as pas utilisé le polynôme fourni ? C'est moi qui dois le faire ?

3. Tu écris :

Résolution dans Q
  Tout d’abord on va vérifier le polynôme à l’aide du calcul pgcd(a0,a1,...,an).

   1er cas, si pgcd(a0,a1,...,an) = 1 :
      P est irréductible donc il n’a pas des racines.

J'ai donc testé
$Q(x)=14x^2+31x+15$

PGCD(14,31;15)=1
Donc pas de solution ?
Eh bien, si !!! 2 solutions dans $\mathbb Q$

Alors ?

Enfin , dernière question

pgcd(a0,a1,...,an) 6= 1

Que fait là ce 6 ?
Je ne connais pas cette notation...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 06-06-2021 08:14:01

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour!
Je vous demande encore vos aide sur mon problème. Je répond votre question s'il vous plait, je veux avoir juste les solutions appartenant à Q.
Maintenant, je ne change plus mon algorithme mais je demande le plus difficile pour moi sur cet algorithme.
Je donne un indication d'abord, pour savoir le principe de l'algorithme.
Dans l'exemple ci-dessous, je met en couleur tous ce que je veux faire dans mon algorithme puisque je ne sais plus comment les faire en python?
Donc je veux avoir un programme en python qui traite l'algorithme comme dans l'exemple ci-dessous.

Résolution dans Q

Indication:
      - Lister l’ensemble D(a0) = {d ∈ Z;d|a0} des diviseurs de a0;
      - Lister l’ensemble D(an) = {d;d|an} des diviseurs de an;
      - Lister l’ensemble des racines possibles de P, ou tout simplement le domaine des tests : DT(P) = {p/q; p ∈ D(a0) et q ∈ D(an) ≈ D(a0)×D(an)}. Le polynôme

Exemple:

P(X) = 3X^3 −2X^2 + 5X + 2 

On voie que: a3 = 3 et a0 = 2.
1-Comment calculer les D(a3) et D(a0) ?
Apres avoir calculé, on doit obtenir les résultats comme suivant:

D(3) ={ -1,1,-3, 3}
et D(2) ={-1,1,-2, 2}.

Mais comment mettre ces résultants comme un vecteur? C'est-à-dire:
D(3) =[ -1,1,-3, 3]
et D(2) =[-1,1,-2, 2].

2- Comment obtenir le DT(P) = {p/q; p ∈ D(a0) et q ∈ D(an) ≈ D(a0)×D(an)}? DT(P) est l’ensemble des racines rationnelles possibles de P.
Normalement on obtient: DT(P) = {1, 1, −2, 2, −1/3, 1/3, −2/3}, mais je veux mettre les résultats sous forme un vecteur.
C'est-à-dire:
DT(P) = [−1, 1, −2, 2, −1/3, 1/3, −2/3]

3- Je veux tester chaque éléments de DT(P) par le polynôme P comme: P(-1), P(1), P(-2), P(2), P(−1/3) et P(1/3).

4- Je veux afficher tous les éléments qui s'annulent le P. C'est-à-dire,
si P(-1)=0 alors afficher -1 est une solution de P
si P(-1)=0, P(2)=0, P(−1/3)=0 alors afficher les solutions : -1, 2 et -1/3

Merci d'avance!

#6 06-06-2021 08:54:28

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour!

Pour bien claire, je traite en détaille l'exemple.

Résolution dans Q

Exemple:

P(X) = 3X^3 −2X^2 + 5X + 2 

On voie que: a3 = 3 et a0 = 2.
1- calcule des D(a3) et D(a0):
on obtient:
D(3) ={ -1,1,-3, 3}
et D(2) ={-1,1,-2, 2}.

2- Soit DT(P) est l’ensemble des racines rationnelles possibles de P tel que
DT(P) = {p/q; p ∈ D(a0) et q ∈ D(an) ≈ D(a0)×D(an)}.
Donc : DT(P) = {1, 1, −2, 2, −1/3, 1/3, −2/3},


3-  Testons chaque éléments de DT(P) par le polynôme P comme:
P(-1)=3(-1)^3 −2(-1)^2 + 5(-1) + 2=-8
P(1)=3(1)^3 −2(1)^2 + 5(1) + 2=8
P(-2)=3(-2)^3 −2(-2)^2 + 5(-2) + 2=-40
P(2)=3(2)^3 −2(2)^2 + 5(2) + 2
P(−1/3)=3(−1/3)^3 −2(−1/3)^2 + 5(−1/3) + 2 =0
P(1/3)=3(1/3)^3 −2(1/3)^2 + 5(1/3) + 2.

On a trouvé une seule solution -1/3 avec P(−1/3)=0

Merci d'avance!

#7 06-06-2021 20:00:28

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Re,

1. Déjà, il te faut commencer par poser la question :
    n=int(input("degré maximum du polynôme"))

2. Ranger les coefficients dans un dictionnaire :
    Val_Coeffs={}
    for j in range(n+1):
        c=int(input("Entrer la valeur de a"+str(i)))
        Val_coeffs[j]=c

3. Tu as besoin d'une fonction de recherches des diviseurs des coefficients connaissant une liste de nbs premiers pour décomposer
    chaque coeff en produits de facteurs premiers...
    def diviseurs(nb):
         D=[]
         for j in range(2,nb):
             if nb%j==0:

etc...

Je m'arrête là pour ce soir...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#8 07-06-2021 07:05:51

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour!
Merci pour vous m'aidez, et si vous aurez de possibilité, je vous demande de reformuler plus complète le programme s'il vous plait!
Et jusque là, je tiens remercier beaucoup!

#9 07-06-2021 07:26:48

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour,

si vous aurez de possibilité, je vous demande de reformuler plus complète le programme s'il vous plait!

Cela signifie quoi ?
Que tu me demandes de faire le travail à ta place ? Alors, non, pas question, ce n'est pas le but poursuivi par Bibmath.

J'attends de voir ce que TU proposes.
En attendant, je vais te proposer une forme d'organigramme et tu essaieras de traduire ça en Python.
Je reposte bientôt.

Autre question.
Dans que cadre veux-tu réaliser cela :
- Dans un cadre privé, pour ton plaisir personnel ?
- Dans un cadre plutôt scolaire : c'est un travail qu'on t'a donné à faire  et que tu dois rendre ?

@+

Remarque : dans le deuxième cas, je ne comprends pas pourquoi on donne ce travail à faire à un débutant...


Arx Tarpeia Capitoli proxima...

Hors ligne

#10 07-06-2021 16:24:34

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

RE,

Voilà le début :


#!/usr/bin/python
# -*- coding: utf-8 -*-


def Recherche_diviseurs(a0,an):
    D,id=[],0
    for c in [a0,an]:
        fin=c//2+1
        L=[]
        for j in range(1,fin+1):
            if c%j==0:
                L.append(j)
                L.append(c//j)      
        L=list(set(L))
        L.sort()
        D.append(L)
   
    return D

print("      ******************************")
print("      *  Résolution des Polynômes  *")
print("      *         dans Z et Q        *")
print("      ******************************")
print("\n")

n=int(input("Degré du polynôme : "))
print()
Coeff=[]
for i in range(n+1):
      c=int(input("Entrer le coefficient a"+str(i)+" : "))
      Coeff.append(c)
print()
print ("Votre Polynôme est :")
print ("P(X) =",end=" ")
for i in range(n,-1,-1):
    c=Coeff[i]
    sgn=""
    if i==n:
        print(str(Coeff[i])+"X^"+str(n),end="")
    else:
        if c>0:
            sgn="+"
        print(sgn+str(Coeff[i])+"X"*(i>0)+("^"+str(i))*(i>1),end="")
       
             
D=Recherche_diviseurs(Coeff[0],Coeff[-1])
print()
print ("Diviseurs :")
print ("D(a0) =",D[0])
print("D(a"+str(n)+") =",D[-1])
 

Exemple de sortie :

.     ******************************
      *  Résolution des Polynômes           *
      *         dans Z et Q                         *
      ******************************


Degré du polynôme : 2

Entrer le coefficient a0 : 25
Entrer le coefficient a1 : -40
Entrer le coefficient a2 : 16

Votre Polynôme est :
P(X) = 16X^2-40X+25

Diviseurs :
D(a0) = [1, 5, 25]
D(a2) = [1, 2, 4, 8, 16]

Questions ?

Pour la suite, j'attends tes propositions...

@+

Dernière modification par yoshi (07-06-2021 20:31:13)


Arx Tarpeia Capitoli proxima...

Hors ligne

#11 08-06-2021 17:38:37

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonsoir!
Tout d'abord, merci beaucoup puisque vous  m'aidez.
Ensuite, je vais montrer ma proposition pour la suite de la programmation.
Alors.
  - Pour la question  2, je veux créer un vecteur ligne contenant chaque éléments de D(a0) divise par chaque élément de D(an).
      Par exemple: D(a0)=[1,2] et D(an)=[1,3]
           Donc  je veut avoir,
                               DT(p)=[1/1, 1/3, 2/1, 2/3]
                     
                      d'où   DT(p)=[1, 1/3, 2, 2/3]

  - Pour la question 3, je veux tester chaque élément de DT(p) par le polynôme P. C'est à dire on remplace la variable X par chaque valeur dans
        DT(p) comme : P(1), P(1/3), P(2) et P(2/3). Et je veut afficher tout éléments qui s'annulent le polynôme P ( si P(2/3)=0, alors afficher 2/3 ).

Voilà  ma proposition s'il vous plait!
Merci d'avance!!

#12 08-06-2021 18:38:48

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonsoir,

Tu n'as pas de questions à poser donc cela veut dire que tu as parfaitement compris ce que j'ai déjà fait ?
Tu as vraiment tout compris ? Tu ne veux rien savoir ?
Hmmm... Faut-il que je te pose des questions précises pour savoir si tu dis vrai ou si tu n'as pas envie de trop te casser la tête ?
Parce que si moi, j'étais vraiment débutant, j'en aurais de choses à demander...

Mais j'attends aussi des réponses à mes questions :

Autre question.
Dans que cadre veux-tu réaliser cela :
- Dans un cadre privé, pour ton plaisir personnel ?
- Dans un cadre plutôt scolaire : c'est un travail qu'on t'a donné à faire  et que tu dois rendre ?

Dans le code que je t'ai proposé, je n'ai fait que traduire en Python ce que je t'avais suggéré.
Dans ce que tu me dis, tu ne fais que reprendre ce que tu avais déjà écrit.

Quand je te demande tes suggestions, je veux dire : en programmation Python !!!...
Il faut bien que tu travailles un peu.
La correction (ou pas) de ce que tu vas me proposer va dépendre de ce que TOI tu connais en Python et de qui t'a demandé ce travail et pourquoi .
Si personne ne t'a rien demandé et que c'est juste pour t'amuser, alors, il faut le dire...

Parce que là, c'est comme si tu disais :
je ne connais rien à Python, donc traduisez en Python l'algorithme à ma place, s'il vous plaît !
Et je t'ai déjà dit : t'aider oui, faire le travail à ta place, non.

Savais-tu qu'en Python existait le module fractions  ?
Avec $Q(X)=20X^3-28X^2-7X+6$, je vais calculer $Q\left(\frac 3 2\right)$

from fractions import Fraction as F

print (20*F(3,2)**3-28*F(3,2)**2-7*F(3,2)+6)

Python répond

F(0,1)

c'est à dire Fraction (numérateur 0, dénominateur 1), donc 0.

Quand j'écris
from fractions import Fraction as F, cela signifie que je ne veux pas m'embêter à taper à chaque fois le mot-clé Fraction et que je vais le remplacer par la lettre F (que je ne vais plus pouvoir utiliser comme nom de variable ensuite.
Mais j'aurais pu tout aussi bien au lieu d'écrire as F, écrire as K ou as G ou ...
Et dans ce cas, dans le calcul effectué ci dessus j'aurais remplacé F par G ou K ou ... et ça ne changeait pas le résultat.

@+

[EDIT]
J'ai fini, ça marche.
Maintenant à toi de réfléchir un peu en Python...
Voilà ce que ça donne

******************************
      *  Résolution des Polynômes  *
      *         dans Z et Q        *
      ******************************


Degré du polynôme : 3

Entrer le coefficient a0 : 6
Entrer le coefficient a1 : -7
Entrer le coefficient a2 : -28
Entrer le coefficient a3 : 20

Votre Polynôme est :
P(X) = 20X^3-28X^2-7X+6
Diviseurs :
D(a0) = [1, 2, 3, 6]
D(a3) = [1, 2, 4, 5, 10, 20]

Test des Racines éventuelles :
P(1) = -9
P(1/2) = -2
P(1/4) = 45/16
P(1/5) = 91/25
P(1/10) = 126/25
P(1/20) = 2233/400
P(2) = 40
P(1) = -9
P(1/2) = -2
P(2/5) = 0   solution
P(1/5) = 91/25
P(1/10) = 126/25
P(3) = 273
P(3/2) = 0   solution
P(3/4) = -105/16
P(3/5) = -99/25
P(3/10) = 48/25
P(3/20) = 351/80
P(6) = 3276
P(3) = 273
P(3/2) = 0   solution
P(6/5) = -204/25
P(3/5) = -99/25
P(3/10) = 48/25

Il faut encore
1. Que je m'occupe des doublons
2. Que je rectifie un oubli de ta part (relis-toi !)
3. Que je n'affiche que les racines éventuelles  (et précise dans Z ou dans Q) ou la simple mention "Pas de racines dans Q ni dans Z"

Dernière modification par yoshi (09-06-2021 10:18:30)


Arx Tarpeia Capitoli proxima...

Hors ligne

#13 09-06-2021 15:48:35

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonsoir!
Je répond vos questions, ce sujet là, fait partir de mon sujet du projet, mais je suis débutant avec Python. Donc jusqu'à maintenant, je suis encore  juste à la base cette langage. C'est pour cela que je suis besoin d'aide. En plus je décide que je suivrai l'étude du langage Python. Merci!

#14 09-06-2021 16:04:56

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Salut!
Je répond votre question,
oui je veux juste afficher les solutions, mais il n'est pas forcement de préciser dans Q ou dans Z. Donc il suffit d'afficher simplement les valeurs qui sont sont les solutions du polynôme. Merci!

#15 09-06-2021 17:45:57

LEG
Membre
Inscription : 19-09-2012
Messages : 690

Re : Résolution d'un polynôme de degré n dans Q et dans Z

@RAZAFINDRAFINDRA
Tu oublies ton sujet :

J'ai besoin d'aide pour la langage Python puisque je suis débutant. Alors mon sujet est " Élaboration d'un logiciel de résolution d'un polynôme de degré n dans Q et dans Z".

Et tu voudrais que @Yoshi te fasses ou t'aide à faire n'importe quoi.... et en plus : contraire à ton sujet ; qui dois par conséquent te dire et préciser si les racines sont dans Q ou Z...ou si il n'y en a pas...

Hors ligne

#16 09-06-2021 17:50:49

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Re,

Le problème est le suivant :
Si c'est moi qui le le fais, penses-tu que ceux qui vont le lire croiront que c'est toi qui l'a fait (ils savent bien que tu es débutant) ?
La réponse est non !
Quelle sera la conséquence de la découverte de la supercherie ?
Moi, à la place de ceux qui vont juger, je refuserais ton programme...
Ce qui ferait que tu ne serais pas reçu à ton examen ..

As-tu réfléchi à cela ? Je ne crois pas...
Alors, penses-y sérieusement !

Tu es un débutant, tu connais les bases de Python.
Ok !
On va voir ce que tu sais...

Savais-tu qu'en Python, l'indentation des lignes de programme n'est pas toujours la même tout au log d'un programme et que si elle est incorrecte, tu auras des résultats faux ou pas de résultat du tout ? C'est le premier souci de tout débutant
Donc, qu'est-ce que l'indentation ? A quoi ça sert ?

Sais-tu ce qu'est une boucle for ?
Sais-tu pourquoi, sachant que le degré est n, j'écris une boucle :
for i in range(n+1):
Et pourquoi, je ne dis pas où elle commence ?

Et pourquoi après, j'écris une boucle
for i in range(n,-1,-1) :
quelle différence avec la précédente  ?

A quoi sert le mot clé str ?

Sais-tu sais-tu ce qu'est une liste en Python ?
Sais-tu que chaque élément d'une liste Python est repéré par un index de position ?
Voilà une liste :
L=[1,3,4,2]
Si je veux extraire le 2e élément de cette liste, que dois-je écrire ?

Montre-moi déjà que tu peux répondre à toutes ces questions...
Et on en reparle : tu as besoin d'un cours accéléré en Python.
Selon tes réponses, il y aura d'autre questions

Je n'ai pas que cela à faire, pourtant j'ai pris du temps pour améliorer ce que j'avais fait :

      *************************
      *  Résolution des Polynômes  *
      *          dans Z et Q              *
      *************************


Degré du polynôme : 3

Entrer le coefficient a0 : 6
Entrer le coefficient a1 : -7
Entrer le coefficient a2 : -28
Entrer le coefficient a3 : 20

Votre Polynôme est :
P(X) = 20X^3-28X^2-7X+6

Diviseurs :
D(a0) = [1, 2, 3, 6]
D(a3) = [1, 2, 4, 5, 10, 20]

DT = [Fraction(-6, 1), Fraction(-3, 1), Fraction(-2, 1), Fraction(-3, 2), Fraction(-6, 5), Fraction(-1, 1), Fraction(-3, 4), Fraction(-3, 5), Fraction(-1, 2), Fraction(-2, 5), Fraction(-3, 10), Fraction(-1, 4), Fraction(-1, 5), Fraction(-3, 20), Fraction(-1, 10), Fraction(-1, 20), Fraction(1, 20), Fraction(1, 10), Fraction(3, 20), Fraction(1, 5), Fraction(1, 4), Fraction(3, 10), Fraction(2, 5), Fraction(1, 2), Fraction(3, 5), Fraction(3, 4), Fraction(1, 1), Fraction(6, 5), Fraction(3, 2), Fraction(2, 1), Fraction(3, 1), Fraction(6, 1)]

Test des Racines éventuelles :
P(-1/2) = 0   solution :  X = -1/2
P(3/2) = 0   solution :  X = 3/2
P(2/5) = 0   solution :  X = 2/5

C'est encore améliorable...

@+

[EDIT]
AS-tu déjà lu ceci : http://www.gecif.net/articles/mathemati … ynome.html ?


Arx Tarpeia Capitoli proxima...

Hors ligne

#17 12-06-2021 06:45:50

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour!
Oh! Non,  je ne suis pas oublié mon sujet mais je pense que il est très difficile, donc j'ai pris une nouvelle décision pour m'aider au moins.
En fait, si c'est possible, c'est bon.

#18 12-06-2021 08:04:59

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Salut!
Oui, je suis très sérieux. Jusqu'à maintenant, je suis entrain de lire les documents pour le python. Je ne suis pas encore capable d'utiliser et d'exploiter ce que j'ai appris, mais si je voie une programmation, alors je la réfléchie bien et après je comprend.

Je vais essayer de répondre votre question s'il vous plait, mais s'il y a quelque question qui n'a pas de réponse, alors je n'ai pas encore su.

Sachant que le degré est n, on écrit la boucle :
for i in range(n+1): elle signifie que pour i allant de 0 jusqu'à n+1 puisqu'elle commence à la valeur par défaut 0.

On écrit la boucle
for i in range(n,-1,-1) : elle signifie que pour i allant de n jusqu'à -1 avec pas=-1.

Le mot clé str sert à convertir en valeur numérique.

Voilà une liste :
L=[1,3,4,2]
On extraire le 2e élément de cette liste, on écrit L[1:2]

Merci!

#19 12-06-2021 12:36:21

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour,

Sachant que le degré est n, on écrit la boucle :

for i in range(n+1): elle signifie que pour i allant de 0 jusqu'à n+1 puisqu'elle commence à la valeur par défaut 0.

Oui, mais la boucle doit effectuer n+1 tours, or de 0 à n, il y a n+1 nombres...
Alors pour que la boucle s'arrête à n, il faut lui dire que le test d'arrêt est n+1 : la boucle for possède un compteur caché, par défaut il commence à 0. A la fin, une alarme lui signale que s'il ajoute 1 à n , alors n+1>n donc qu'il ne faut pas continuer mais sortir de la boucle...
Mais comment sait-on où est la sortie de la boucle ,
en Python, tout repose sur l'Indentation, le décalage vers la droite des lignes du bloc...
Python recommande 4 espaces, et ce n'est ni trop petit trop grand...

for i in (début, fin, pas):
Par défaut, le pas est 1 : ce pas dit combien tu ajoutes à chaque tour au compteur ; on peut compter de 2 en 2, de 3 en 3, mais aussi aller à reculons, donc utiliser un compteur qui va en décroissant
for i in range(3,-1,-1):
ce compteur démarre à 3, et décroît jusqu'à 0, la valeur -1 de fin est le test d'arrêt, et le pas de -1 dit que le compteur diminue de 1 à chaque tour...
On teste :

for i in range(3,-1,-1):
    print(i)
 

Ça donne quoi ?
Réponse :

3
2
1
0

Pourquoi est-ce que j'utilise une boucle décroissante ?
Parce que j'ai enregistrer les coefficients dans l'ordre a0, a1, a2... an
Et que traditionnellement, on présente un polynôme par ordre de puissances décroissantes :
P(X)= an Xn + .......+ a1X+a0

Le mot clé str sert à convertir en valeur numérique.

Non, c'est l'inverse ;
str() sert à convertir un nombre en chaine de caractères str est l'abréviation de string
321 et 35 sont des nombres.
str(321) et str (35) sont des chaines de caractères

Si j'ajoute les deux nombres :
print(321+35) renvoie 356
mais
si j'ajoute les deux chaînes de caractères :
print(str(321)+str(35)) renvoie '32135'
Ici le verbe exact n'est pas ajouter mais "concaténer" :
Définition du dicionnaire:

Informatique :
Du latin "cum" (ensemble) et "catena" (chaîne), "concaténer" est l'action de relier deux chaînes informatiques pour en créer une nouvelle chaîne.

Voilà une liste :
L=[1,3,4,2]
On extraire le 2e élément de cette liste, on écrit L[1:2]

Ça  marche aussi mais c'est plutôt réservé pour extraire un morceau de liste :
print (L[1:3])  renvoie [3,4] (qui est une liste)
On utilise plutôt:
print(L[1]) qui renvoie 3 qui est l'élément à la position 1 de la liste...

Lorsque j'ai écrit :

Coeff=[]
for i in range(n+1):
      c=int(input("Entrer le coefficient a"+str(i)+" : "))
      Coeff.append(c)

Si je ne commence pas par écrire que Coeff est une liste vide quand Python devra exécuter l'instruction Coeff.append(c),  c'est c'est à dire
"ajoute " (append) la valeur de c dans Coeff, Python va s'arrêter et te dire :
Il y a une erreur je dois utiliser Coeff alors que je ne sais pas encore ce que c'est et, hop, tout s'arrête.
input() est l'instruction qui demande d'entrer une chaîne de caractères au clavier et ce sera signalé par un pont d'interrogation...
Mais ce n'est pas assez clair donc, Python m'offre la possibilité de dire précisément ce que je veux...
D'où le
input(""Entrer le coefficient")
Mais
1. Ce coefficient, je dois le récupérer pour pouvoir l'utiliser, donc c=input("Entrer le coefficient")
2. "Entrer le coefficient" n'est pas assez précis : si je m'interromps en plein milieu de la suite des questions, en reprenant, je risque d'avoir oublié de quel numéro de coefficient il s'agit...
    Donc dans ma demande doit apparaître a0, a1, a2... an avec un nombre à la place du numéro...
    Mais si j'écris  c=int(input("Entrer le coefficient a",i)), la virgule ajoute une espace après le a..
    Donc je vais voir apparaître :
    Entrer le coefficient a 0
    Entrer le coefficient a 1
    Entrer le coefficient a 2
    ce n'est pas ce que je veux. 
    Donc, je convertis i en une chaîne par str(i) que je concatène à la phrase et ça s'écrit : c=int(input("Entrer le coefficient a"+str(i)))
    Et j'obtiens :
    Entrer le coefficient a0
    Entrer le coefficient a1
    Entrer le coefficient a2
    Et pour que ce soit plus esthétique, je concatène ensuite au a+"str(i) la chaîne " : " pour que le point d'interrogation arrive après " : "
    Donc j'écris :
    c=input("Entrer le coefficient a"+str(i)+" : ") qui m'affiche :
    Entrer le coefficient a0 : ?
    Entrer le coefficient a1 : ?
    Entrer le coefficient a2 : ?
3. Dernier point : après  input() je récupère toujours une chaîne de caractères...
    Si cette chaîne de caractères est composée de chiffres alors pour la transformer en un nombre entier j'utilise int(). D'où la ligne finale :
    c=int(input("Entrer le coefficient a"+str(i)+" : "))
 
Bon, j'arrête là pour l'instant, je vais réfléchir à d'autres questions.
Si toi, tu veux des éclaircissements, j'attends tes questions...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#20 12-06-2021 20:10:31

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Re,

J'ai écrit une fonction pour ne pas faire deux fois la même chose.
Une fonction que tu écris toi, commence par def.
Tu la définis (tu lui donne un nom qui te permette 6 mois après quand tu relis un programme de savoir, grâce au nom donné tout de suite ce qu'elle fait...
Ensuite dans les parenthèses, je lui dis avec quoi elle doit travailler.
Pourquoi ? si je ne lui dis pas, elle ne le sait pas ? Non.
Pourquoi ? Elle est cloisonnée...
Tu dois imaginer une fonction (ici elle recherche les diviseurs d'un nombre)  comme un bureau où personne de l'extérieur n'a le droit d'entrer.
tu as juste le droit d'envoyer un courrier qui dira : travaillez avec ce que je vous donne s'il vous plaît...
Et hop dans le  bureau ils font leur boulot et quand ils ont fini, ils te renvoient un.
Si tu ne le précises pas, la fonction fait son travail mais ne te renvoie pas les résultats...

D'autre part, ces résultats si tu les récupères pas, tu ne sera pas plus avancé...
C'est le rôle de cette instruction :
D=Recherche_diviseurs(Coeff[0],Coeff[-1])
1. Elle dit à la fonction de rechercher les diviseurs de a0 et an
2. Avec D=
tu récupères dans la liste D, les diviseurs de a0 et an.

Maintenant, je veux que tu étudies seulement ce petit morceau de la fonction :
   

        fin=c//2+1
        L=[]
        for j in range(1,fin+1):
            if c%j==0:
                L.append(j)
                L.append(c//j)

Précisions :
// permet d'obtenir le quotient entier : 9//2 --> 4
% 2 permet d'obtenir le reste dans la division par 2.  9%2 --> 1 (c'est le modulo)
si j'écris a = 2  je range le nombre 2 dans a.
si j'écris a == 2  je pose la question a est-il égal à 2 ? et Python répond True ou False (Vrai ou Faux, OUI ou NON, 1 ou 0...)

Maintenant tu dois pouvoir comprendre ce qu'il se passe dans ce morceau...
Suppose que c=24
A quoi sert
- que j'écrive fin=c//2+1 ?
- la condition  ?
  if c%j==0:
      L.append(j)
      L.append(c//j) pourquoi garder j et après c//j ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#21 16-06-2021 15:20:14

RAZAFINDRAFINDRA Hercele
Invité

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Bonjour!
Oui, je comprend bien tout ce que vous avez expliqué. Donc je vous remercie.
Alors, j'ai besoin encore votre aide pour la suite de programmation s'il vous plait!
Merci!

#22 16-06-2021 17:50:39

LEG
Membre
Inscription : 19-09-2012
Messages : 690

Re : Résolution d'un polynôme de degré n dans Q et dans Z

re
@RAZAFINDRAFINDRA Hercele
tu n'as pas l'impression de te foutre de ce que @Yoshi essaye de t'expliquer ...?
Alors on a besoin que tu répondes à sa dernière question !!!

Maintenant tu dois pouvoir comprendre ce qu'il se passe dans ce morceau...
Suppose que c=24
A quoi sert
- que j'écrive fin=c//2+1 ?
- la condition  ?
  if c%j==0:
      L.append(j)
      L.append(c//j) pourquoi garder j et après c//j ?

TA RÉPONSE ?

Hors ligne

#23 16-06-2021 19:09:41

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Re,

Vi, vi... Si je traduis, ça pourrait donner :
Bon, maintenant le temps passe, vous attendez quoi pour me le donner ce programme ?

Justement, j'attends des réponses (et ce n'est pas fini) pour être presque convaincu qu'il pourra dire (sans trop rougir) à ses examinateurs :
- je ne l'ai pas fait tout seul, on m'a aidé
- mais j'ai compris le programme et je suis capable d'expliquer chaque étape
sans quoi, je ne me prêterai à une mascarade qui risquerait de le plomber..

S'il est un peu insouciant des conséquences, moi pas.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#24 17-06-2021 17:19:22

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Re,

J'ai bouclé ma revue. Ouf !...
J'ai retravaillé le programme, heureusement !
J'ai découvert un bug, une erreur... même pas de débutant.
J'avais fonctionné de mémoire (j'ai souvent utilisé cet algorithme "à la main") et là j'ai fait une bourde.

Et si .
J'avais écrit :

        fin=c//2+1
        L=[]
        for j in range(1,fin+1):
            if c%j==0:
                L.append(j)
                if j**2 != c:
                    L.append(c//j)

Mais ça, ça ne fait pas ce que je veux, mais si j'écris :

        c=abs(c)
        fin=int(sqrt(c))
        L=[]
        for j in range(1,fin+1):
            if c%j==0:
                L.append(j)
                if j**2 !=c:
                    L.append(c//j)
               

Maintenant, c'est bon...

Je prends la valeur absolue de c, puis la racine carrée de c, dont je prends la partie entière (pourquoi la partie entière ? parce que dans une boucle, début, fin, pas doivent être entiers).
Je cherche d'abord tous les entiers positifs diviseurs de c.
Mais il y a le cas où j2 est égal à c et dans ce cas je ne stocke pas c//j...
Plus tard, j'ajoute l'opposé de tous ces diviseurs, et je trie le tout par ordre croissant.
Voilà ce que je t'avais déjà donné avec les corrections intégrées

#!/usr/bin/python
# -*- coding: utf-8 -*-

from fractions import Fraction
from math import sqrt

def Recherche_diviseurs(a0,an):
    D=[]
    for c in [a0,an]:
        c=asb(c)
        fin=int(sqrt(c))
        L,L1=[],[]
        for j in range(1,fin+1):
            if c%j==0:
                L.append(j)
                if j**2 !=c:
                    L.append(c//j)
        for c in L:
            L1.append(-c)
            A=sorted(L1+L)
        D.append(A)  
    return D

print("      ******************************")
print("      *  Résolution des Polynômes  *")
print("      *         dans Z et Q        *")
print("      ******************************")
print("\n")

n=int(input("Degré du polynôme : "))
print()
Coeff,DT=[],[]
for i in range(n+1):
    c=int(input("Entrer le coefficient a"+str(i)+" : "))
    Coeff.append(c)
print()
# Affichage du Polynôme par ordre de puissances décroissantes
print ("Votre Polynôme est :")
print ("P(X) =",end=" ")
for i in range(n,-1,-1):
    c=Coeff[i]
    sgn=""
    if i==n:
        print(str(Coeff[i])+"X^"+str(n),end="")
    else:
        if c>0:
            sgn="+"
        print(sgn+str(Coeff[i])+"X"*(i>0)+("^"+str(i))*(i>1),end="")      
             
D=Recherche_diviseurs(Coeff[0],Coeff[-1])
print("\n")
print ("Diviseurs :")
print ("D(a0) =",D[0])
print("D(a"+str(n)+") =",D[-1])

La suite du programme, je te la donnerai
--> si tu réponds (correctement à mes questions
--> si tu t'engages ensuite - sur l'honneur ! -à avertir tes examinateurs (tes professeurs)
      * que tu n'es pas l'auteur du programme,
      * qu'on t'a beaucoup aidé
      * que tu as compris chaque étape et que tu peux les expliquer


Voilà ce que donne le programme actuel :

      ******************************
      *  Résolution des Polynômes  *
      *         dans Z et Q        *
      ******************************


Degré du polynôme : 3

Entrer le coefficient a0 : -30
Entrer le coefficient a1 : -97
Entrer le coefficient a2 : 34
Entrer le coefficient a3 : 21

Votre Polynôme est :
P(X) = 21X^3+34X^2-97X-30

Diviseurs :
D(a0) = [-30, -15, -10, -6, -5, -3, -2, -1, 1, 2, 3, 5, 6, 10, 15, 30]
D(a3) = [-21, -7, -3, -1, 1, 3, 7, 21]

DT = [Fraction(-30, 1), Fraction(-15, 1), Fraction(-10, 1), Fraction(-6, 1), Fraction(-5, 1), Fraction(-30, 7), Fraction(-10, 3), Fraction(-3, 1), Fraction(-15, 7), Fraction(-2, 1), Fraction(-5, 3), Fraction(-10, 7), Fraction(-1, 1), Fraction(-6, 7), Fraction(-5, 7), Fraction(-2, 3), Fraction(-10, 21), Fraction(-3, 7), Fraction(-1, 3), Fraction(-2, 7), Fraction(-5, 21), Fraction(-1, 7), Fraction(-2, 21), Fraction(-1, 21), Fraction(1, 21), Fraction(2, 21), Fraction(1, 7), Fraction(5, 21), Fraction(2, 7), Fraction(1, 3), Fraction(3, 7), Fraction(10, 21), Fraction(2, 3), Fraction(5, 7), Fraction(6, 7), Fraction(1, 1), Fraction(10, 7), Fraction(5, 3), Fraction(2, 1), Fraction(15, 7), Fraction(3, 1), Fraction(10, 3), Fraction(30, 7), Fraction(5, 1), Fraction(6, 1), Fraction(10, 1), Fraction(15, 1), Fraction(30, 1)]

Test des Racines éventuelles :
P(-3) = 0   solution dans Z :  X =  -3
P(-2/7) = 0   solution dans Q :  X =  -2/7
P(5/3) = 0   solution dans Q :  X =  5/3

Donc ma question est : que fait exactement cet algorithme de recherche des diviseurs :


    for c in [a0,an]:
        c= abs(c)
        fin=int(sqrt(c))
        L,L1=[],[]
        for j in range(1,fin+1):
            if c%j==0:
                L.append(j)
                if j**2 !=c:
                    L.append(c//j)

Pour comprendre, démarre avec un stylo, une feuille de papier et le nombre c=40.
* Combien vaut fin ?
* Comment s'écrit alors la ligne for j in range(1,fin+1) ? Que fait-elle ?
* Que signifie if (si) c%%j == 0: ?
* Pourquoi est-ce que je stocke j ?
* Qu'est-ce que c//j ?
* Pourquoi est-ce que je le stocke aussi seulement si  j² est différent de c (avec l'exemple choisi : si j² n'est pas égal à 40) ?

C'est un algorithme très simple qu'on apprenait en Collège...

Je vois que tu n'es pas pressé de répondre.
Peut-être que dans un mois, à ce rythme, on aura enfin terminé...

@+

Dernière modification par yoshi (19-06-2021 07:09:11)


Arx Tarpeia Capitoli proxima...

Hors ligne

#25 21-06-2021 15:11:14

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Résolution d'un polynôme de degré n dans Q et dans Z

Re,

5 jours plus tard, notre ami n'a toujours pas donné digne de vie...
Manque d'intérêt réel ? Pourquoi demander alors ?
A obtenu le programme ailleurs sans se fatiguer ? Et ça l'aura avancé à quoi ?
Espoir que, lassé d'attendre, je vais publier ce que j'ai fait ? Oui, d'ici quelques mois...

Moi, je passe à autre chose, je n'attends plus de réponse.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quarantehuit plus dix-huit
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums