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).

#51 04-08-2021 06:37:45

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 15 945

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

Bonjour,

Dans son post #43 du 10/07/2021 de 16 h 15 min 05 s, Yoshi a écrit :

Si tu essaies de m'avoir à l'usure (if you're trying to wear me down), tu perds ton temps (you're wasting time)...

Lorsque tu devras rendre ton travail, si tu n'as pas répondu à mes questions de façon satisfaisante : tu n'auras pas mon programme !
Je ne changerai pas d'avis...

Est-ce que c'est plus clair, cette fois ?

Et bien non, je crois que je n'ai pas été clair...
Et ta réponse, 25 jours (!!) plus tard :

puisque je suis très satisfait pour vous me donnez les solutions de ce problème

montre que tu essaies de faire croire que je n'ai rien dit...

Donc,
simple question à laquelle tu vas répondre (et pas dans 1 mois !) :
es-tu capable d'expliquer ligne par ligne ce que fait mon programme qui compte maintenant plus de 500 lignes ?

2 réponses possibles :
1. OUI.    Alors je t'en donne un morceau et tu m'expliques ce que s'y passe ligne par ligne. Si je suis satisfait, alors ok....
2. NON.   Alors ce n'est plus la peine de me demander quoi que ce soit...

Et ne t'arrête pas en si bon chemin : je t'ai posé des questions auxquelles tu n'as pas répondu...
J'attends aussi tes réponses : moi je n'oublie pas !

Et maintenant tu voudrais, alors que tu n'as avancé en Python, me demander autre chose ?
Ne te moquerais-tu pas un peu du monde ?

Tu crois vraiment que tu commandes et et que moi, j'obéis ? Et bien non, ce n'est pas si simple que cela !

Si le français t'es à ce point étranger, en quelle langue faut-il que j'écrive ? Anglais ?

@+

Dernière modification par yoshi (04-08-2021 19:04:22)


Arx Tarpeia Capitoli proxima...

Hors ligne

#52 05-08-2021 06:50:37

RAZAFINDRAFINDRA Hercele
Invité

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

Bonjour!
Non, je ne suis pas capable d'expliquer ligne par ligne ce program puisque je suis encore en voie d'étudier le langage Python

#53 05-08-2021 07:22:35

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

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

Bonjour

Au moins pour une fois tu as fait l'effort d'écrire correctement en Français... ???

Donc il ne te reste qu'à faire l'effort d'expliquer ligne par ligne ce que demande @YOSHI .

Ce que tu as appris en python, doit être suffisant pour expliquer un minimum de ce que fait le programme, le fait de refuser de donner des explications, indique clairement que tu ne veux pas faire d'effort et que Yoshi fasse ton travail.....c'est peine perdue ....

Car depuis le début tu fais l'effort de ne pas répondre , alors que connaissant un peu ton algorithme, ce n'est pas difficile d'expliquer ce que font plusieurs lignes des fonctions du programme et pourquoi...! Surtout avec toutes les indications qu'il t'a données...et les erreurs qu'ils y avaient dans le programme à ne pas commettre avec les explications....

Reprend depuis le début et explique ce que tu as compris dans le programme et pourquoi, et : pas dans un mois... !

Hors ligne

#54 05-08-2021 07:52:19

Roro
Membre expert
Inscription : 07-10-2007
Messages : 1 128

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

Salut à tous,

J'ai l'impression qu'on a pas beaucoup avancé :

Roro a écrit :

Je suis la discussion depuis quelque temps avec amusement et j'ai l'impression que la demande est limpide :
"Est ce que tu pourrais donner le code complet à notre ami ?"
A mon avis, tu perds ton temps car il ne veut pas comprendre (et ne veut pas prendre le temps) ce que tu essayes de lui expliquer étape par étape...

Roro

Hors ligne

#55 05-08-2021 08:53:33

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 15 945

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

Re,

@Roro
Moi, si, j'ai bien avancé ;-)...
Sur ce que je montre, le script n'a plus grand chose à voir avec celui du début : la base est toujours son algorithme mité, mais qui maintenant, repensé, est sans failles.
Alors, oui notre ami peut se montrer très satisfait...
Mais, il me fatigue : il est lassant d'être aussi fuyant...
Je n'ai pas changé d'avis, c'est toujours donnant donnant...
je ne vais quand même pas lui donner mon travail de plusieurs dizaines d'heures (les "évidences" pour le cerveau humain, sont loin d'en être lorsqu'on asse à la programmation) sans effort de sa part...

Programmes-tu, Roro ? Si oui avec que langage ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#56 05-08-2021 08:56:48

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

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

re
@Yoshi :

Il y a quelque chose que je ne comprend pas .... voici le résultat du programme pour ce Polynôme pair ,de degré 2. :   P(x) = 21X² + X-10

pourquoi doit on rentrer ce coefficient a1 ??? puisque les racines sont 3 et 7 = 21 ou 2 et -5 = -10.

Résultat du programme degré et coefficients rentrés :
---------------------------------------------------------------------------------------------------------
Degré du polynôme (entier naturel attendu) : 2

Entrer le coefficient a0 (entier relatif attendu) : -10
Entrer le coefficient a1 (entier relatif attendu) : 1 :
Entrer le coefficient a2 (entier relatif attendu) : 21

  Votre Polynôme est :
P(X) = 21X^2+X-10

  Diviseurs de -10 et 21 :
D(a0) = [-10, -5, -2, -1, 1, 2, 5, 10]
D(a2) = [-21, -7, -3, -1, 1, 3, 7, 21]

  Racines Potentielles à tester :
{-10, -5, -10/3, -2, -5/3, -10/7, -1, -5/7, -2/3, -10/21, -1/3, -2/7, -5/21, -1/7, -2/21, -1/21, 1/21, 2/21, 1/7, 5/21, 2/7, 1/3, 10/21, 2/3, 5/7, 1, 10/7, 5/3, 2, 10/3, 5, 10}

  Affichage des Racines éventuelles :
P(-5/7)   = 0. Solution dans  Q : X = -5/7
P(2/3)    = 0. Solution dans  Q : X = 2/3
-------------------------------------------------------------------------------------------------------------------------------

Question : pourquoi le programme affiche les solutions sous cette forme : X = -5/7 et X = 2/3 ?

j'ai pris l'exemple du lien que tu as fournis au début du sujet ... ""méthode alternative "" http://www.gecif.net/articles/mathemati … ynome.html

si on prend l'exemple du polynôme : $X^3-6X^2-13x+42=0$ : on a donc X = 2 , et les racines du polynôme sont 2*3*7 = 42
comment on rentre les valeurs des coefficients pour le degré 3;  afin que le résultat donne racine = 2,3, 7 ;
il y a quelque chose que je ne comprend pas dans les valeurs des coefficients an à rentrer ...?
............................................................................................
j'ai rentré pour ao =1
Degré du polynôme (entier naturel attendu) : 3

Entrer le coefficient a0 (entier relatif attendu) : 1
Entrer le coefficient a1 (entier relatif attendu) : -6
Entrer le coefficient a2 (entier relatif attendu) : -13
Entrer le coefficient a3 (entier relatif attendu) : 42

  Votre Polynôme est :
P(X) = 42X^3-13X^2-6X+1   [question: on devrait avoir pour X =2: P(X) = X³ - 6X² - 13X + 42 = 0 c'est à dire : 2³ - 6*2² - 13*2 + 42 = 0 ; Non ?

  Diviseurs de 1 et 42 :
D(a0) = [-1, 1]
D(a3) = [-42, -21, -14, -7, -6, -3, -2, -1, 1, 2, 3, 6, 7, 14, 21, 42]

  Racines Potentielles à tester :
{-1, -1/2, -1/3, -1/6, -1/7, -1/14, -1/21, -1/42, 1/42, 1/21, 1/14, 1/7, 1/6, 1/3, 1/2, 1}

  Affichage des Racines éventuelles :   on devrait avoir comme racine avec P premier :  2, 3 et 7
P(-1/3)  = 0. Solution dans  Q : X = -1/3
P(1/7)   = 0. Solution dans  Q : X = 1/7
P(1/2)   = 0. Solution dans  Q : X = 1/2
......................................................................

Dernière modification par LEG (05-08-2021 11:01:03)

Hors ligne

#57 05-08-2021 11:34:14

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 15 945

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

Re,

Question : pourquoi le programme affiche les solutions sous cette forme : X = -5/7 et X = 2/3 ?
Réponse : parce que je l'ai voulu ainsi pour deux raisons  et Fraction(2,3)
               1. Parce que c'est plus lisible que -Fraction(5,7) et Fraction(2,3) qui est l'affichage "normal" de Python...
               2. Parce qu'il est plus simple pour moi de chercher la longueur maximum de P(-5/7) ...
                   Quand il y a plusieurs solutions, j'ai voulu que tous les = soient alignés verticalement, donc, j'ai besoin de la longueur max
(* Je viens de comprendre : réponse plus bas)

Question :  $X^3-6X^2-13x+42=0$ comment on rentre les coefficients ?
Réponse : degré du polynôme --> 3
                a0 --> 42
                a1 --> -13
                a2--> -6
                a3 --> 1
Les racines  sont -3, 2 et 7  et non 2, 3 et 7


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


Degré du polynôme (entier naturel >= 1 attendu) : 3

Entrer le coefficient a0 (entier relatif attendu >=0 ou <=0) : 42
Entrer le coefficient a1 (entier relatif attendu >=0 ou <=0) : -13
Entrer le coefficient a2 (entier relatif attendu >=0 ou <=0) : -6
Entrer le coefficient a3 (entier relatif attendu >=0 ou <=0) : 1

  Votre Polynôme est :
P(X) = X^3-6X^2-13X+42

  Diviseurs de 42 et 1 :
D(a0) = [-42, -21, -14, -7, -6, -3, -2, -1, 1, 2, 3, 6, 7, 14, 21, 42]
D(a3) = [-1, 1]

  Racines Potentielles à tester :
{-42, -21, -14, -7, -6, -3, -2, -1, 1, 2, 3, 6, 7, 14, 21, 42}

  Affichage des Racines éventuelles :
P(-3)  = 0. Solution dans  Z : X = -3
P(2)   = 0. Solution dans  Z : X = 2
P(7)   = 0. Solution dans  Z : X = 7


     Un autre Essai (O/N) ?  o

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


Degré du polynôme (entier naturel >= 1 attendu) : 3

Entrer le coefficient a0 (entier relatif attendu >0 ou <0) : -42
Entrer le coefficient a1 (entier relatif attendu >0 ou <0) : 41
Entrer le coefficient a2 (entier relatif attendu >0 ou <0) : -12
Entrer le coefficient a3 (entier relatif attendu >0 ou <0) : 1

  Votre Polynôme est :
P(X) = X^3-12X^2+41X-42

  Diviseurs de -42 et 1 :
D(a0) = [-42, -21, -14, -7, -6, -3, -2, -1, 1, 2, 3, 6, 7, 14, 21, 42]
D(a3) = [-1, 1]

  Racines Potentielles à tester :
{-42, -21, -14, -7, -6, -3, -2, -1, 1, 2, 3, 6, 7, 14, 21, 42}

  Affichage des Racines éventuelles :
P(2)   = 0. Solution dans  Z : X = 2
P(3)   = 0. Solution dans  Z : X = 3
P(7)   = 0. Solution dans  Z : X = 7


     Un autre Essai (O/N) ?  

Ton polynôme de degré 3 s'écrit de façon littérale $a_3x^3+a_2x^2+a_1x^1+a_0x^0$
Tu vois la correspondance entre les indices es coefficients et les exposants de $x$ ?
Si je respecte les règles de simplification d'écriture de l'algèbre, j'écris seulement :
$a_3x^3+a_2x^2+a_1x+a_0$
parce que $x^1$, c'est $x$ et $x^0=1$

il y a quelque chose que je ne comprend pas dans les valeurs des coefficients an à rentrer ...? ............................................................................................ j'ai rentré pour ao =1

Degré du polynôme (entier naturel attendu) : 3 

Entrer le coefficient a0 (entier relatif attendu) : 1
Entrer le coefficient a1 (entier relatif attendu) : -6
Entrer le coefficient a2 (entier relatif attendu) : -13
Entrer le coefficient a3 (entier relatif attendu) : 42
 
Votre Polynôme est : $P(X) = 42X^3-13X^2-6X+1

Pour avoir -3, 2 et 7 comme racines il ne faut pas les rentrer dans cet ordre : regarde le 1er exemple traité ci-dessus.
Pour 2, 3 7 c'est le 2e à sa suite...

   






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


Degré du polynôme (entier naturel >= 1 attendu) : 2

Entrer le coefficient a0 (entier relatif attendu >0 ou <0) : -10
Entrer le coefficient a1 (entier relatif attendu >0 ou <0) : 1
Entrer le coefficient a2 (entier relatif attendu >0 ou <0) : 21

  Votre Polynôme est :
P(X) = 21X^2+X-10

  Diviseurs de -10 et 21 :
D(a0) = [-10, -5, -2, -1, 1, 2, 5, 10]
D(a2) = [-21, -7, -3, -1, 1, 3, 7, 21]

  Racines Potentielles à tester :
{-10, -5, -10/3, -2, -5/3, -10/7, -1, -5/7, -2/3, -10/21, -1/3, -2/7, -5/21, -1/7, -2/21, -1/21, 1/21, 2/21, 1/7, 5/21, 2/7, 1/3, 10/21, 2/3, 5/7, 1, 10/7, 5/3, 2, 10/3, 5, 10}

  Affichage des Racines éventuelles :
P(-5/7)   = 0. Solution dans  Q : X = -5/7
P(2/3)    = 0. Solution dans  Q : X = 2/3


     Un autre Essai (O/N) ?  

Parfaitement normal :
Produit des racines ici : $(-1)^2 \times \left(-\dfrac{10}{21}\right)$
10 = 2 * 5
21 = 3 * 7

$\dfrac{10}{21}=\dfrac{2}{3}\times  \dfrac{5}{7}$ ou $\dfrac{2}{7}\times  \dfrac{5}{3}$
avec l'une ou l'autre des fractions négatives...
La seule façon de trancher est de faire appel à à $a_1$r  via la somme des racines =$-\dfrac{a1}{a2}=-\dfrac {1}{21}$
Mais tes racines resteront fractionnaires...

Si tu veux des racines entières, voilà :


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


Degré du polynôme (entier naturel >= 1 attendu) : 2

Entrer le coefficient a0 (entier relatif attendu >0 ou <0) : 21
Entrer le coefficient a1 (entier relatif attendu >0 ou <0) : -10
Entrer le coefficient a2 (entier relatif attendu >0 ou <0) : 1

  Votre Polynôme est :
P(X) = X^2-10X+21

  Diviseurs de 21 et 1 :
D(a0) = [-21, -7, -3, -1, 1, 3, 7, 21]
D(a2) = [-1, 1]

  Racines Potentielles à tester :
{-21, -7, -3, -1, 1, 3, 7, 21}

  Affichage des Racines éventuelles :
P(3)   = 0. Solution dans  Z : X = 3
P(7)   = 0. Solution dans  Z : X = 7

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#58 05-08-2021 11:41:32

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

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

ok ;
depuis hier je  cherchai ...donc je n'avais rien compris dans l'écriture....ok merci pour les explications...

En reprenant le lien que tu as fournis , et en testant le programme:  effectivement avec tes explications sur l'écriture des variables = coefficients , cela permet de ne pas se tromper pour chercher les racines d'un polynôme si il y en a...

Conclusion le programme fonctionne parfaitement , si il y a une erreur, alors il est clair qu'elle est humaine et que l'on a pas ou mal saisie les valeurs des coefficients $a_n$. Encore fait il comprendre ce que signifie trouver les racines d'un polynôme = les diviseurs premiers... et comprendre ce que tu m'as expliqué ci dessus.

On verra si l'intéressé du sujet , essaye de comprendre 1) tes explications 2) si il regarde le lien que tu as fourni : http://www.gecif.net/articles/mathemati … ynome.html

Mais ceci dit, je doute fort qu'il soit capable d'écrire le programme que tu m'as envoyé.... pour tester et encore moins d'en donner les explications, car il faut connaître parfaitement ce que doit faire le programme par rapport aux racines des polynôme à trouver , ce qui veut dire qu'il faut comprendre parfaitement les explications que tu m'as fournies ci dessus pour écrire les coefficients en fonction du degré du polynôme...

Cordialement et merci de ton temps....
Gilbert

Dernière modification par LEG (05-08-2021 13:59:13)

Hors ligne

#59 05-08-2021 19:45:27

Roro
Membre expert
Inscription : 07-10-2007
Messages : 1 128

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

Bonsoir,

yoshi a écrit :

Programmes-tu, Roro ? Si oui avec que langage ?

Je programme un peu, en C, Fortran il y a pas mal d'années, maintenant plutôt en Python... et je sais combien le travail peut être long et surtout très ingrat entre la compréhension (mathématique) et l'exécution (informatique) !

Roro.

Hors ligne

#60 17-08-2021 08:19:09

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 15 945

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

Bonjour,

Je ne pense qu'on ne reverra pas (je l'espère) notre ami (12e jour de silence), alors je pense que je peux poster mon code légèrement modifié :


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

from fractions import Fraction
from math import sqrt

def titre():
    print("      ******************************")
    print("      *  Résolution des Polynômes  *")
    print("      *         dans Z et Q        *")
    print("      *            v3.5            *")
    print("      ******************************")
    print("\n")

def Entree_Coeff_Polynome():
    Coff,Signes_plus,Signes_alt,Tous_plus,Alternes,sgn=[],[],[],0,0,0
    while True:
        try:
            d=int(input("Degré du polynôme (entier naturel >= 1 attendu) : "))
        except ValueError:
            print ("Erreur. Recommencez s'il vous plaît, vous n'avez pas entré un nombre entier valide !\n")
        if d<0:
            print("Erreur. Vous devez entrer un entier naturel >=1). Recommencez s'il vous plaît !\n")
        else:
            print()
            break
    for i in range(d+1):
        try:
            c=int(input("Entrer le coefficient a"+str(i)+" (entier relatif attendu >=0 ou <=0) : "))
        except ValueError:
            print ("Erreur. Recommencez s'il vous plaît !\n")
        if i==0:
            variable=""
            c0=c
        elif i==1:
            variable="X"
        else:
            variable="X^"+str(i)
        Coff.append((c,variable))    
        c0=c
        Signes_plus.append(0) if c==0 else Signes_plus.append(1-2*(c<0))
    nb_zr=0
    while Coff[nb_zr][0]==0:
        nb_zr+=1
    Tous_plus=(abs(sum(Signes_plus))==d+1-nb_zr)
    if 0 in Signes_plus[nb_zr:]:
        Alternes=False
    else:
        c0=Signes_plus[nb_zr]
        for c in Signes_plus[nb_zr+1:]:
            Signes_alt.append(1) if c*c0<0 else Signes_alt.append(0)
            c0=c
    Alternes=(sum(Signes_alt)==d-nb_zr)
    sgn=Tous_plus-Alternes
    return Coff,d,nb_zr,sgn

def Traite_a0_nul(Coff,d,Poly,expo_min):
    a,flag=Coff[0][0],0
    Deg=str(d)+["er","nd","e"][d-1+(3-d)*(d>2)]                                
    if expo_min==d:            
        print ("\n   Votre monôme du "+Deg+" degré admet 0 comme solution dans N")
        return 0,0,0,expo_min
    else:                    
        a0,a1=Coff[expo_min][0],Coff[expo_min+1][0]
        c1="1" if abs(a0)==1 else ""
        c2=str(abs(a1)) if abs(a1)==1 else ""
        print("\n    /!\ Factorisation possible par X"+("^"+str(expo_min))*(expo_min>1),end="")
        print(", on prend", a0,"pour a0 :")
        print ("P(X) = X"+("^"+str(expo_min))*(expo_min>1)+"(",end="")
        Poly=Poly.lower()
        for i in range(d,expo_min-1,-1):
            expo=i-expo_min
            Poly=Poly.replace("x^"+str(i),"X^"+str(expo))
        if expo_min==1:
            c1="1" if abs(a0)==1 else ""
            c2=str(abs(a1)) if abs(a1)==1 else ""
            Poly=(Poly.replace("x",c1))
            Poly=(Poly.replace("X^1","X"))
            print(Poly+")")
            return 1,a0,Coff[-1][0],expo_min
        else:
            Poly=(Poly.replace("X^0",c1))
            Poly=(Poly.replace("X^1","X"))
            print(Poly+")")
            return 1,a0,Coff[-1][0],expo_min
        if expo_min==d-1:
            if d==1:
                traite_binome_degre1(Coff[d][0],Coff[d-1][0])
                return 0,0,0,expo_min
            else:                                                
                return 1,a0,Coff[-1][0],expo_min
        else:
            return 1,a0,Coff[-1][0],expo_min
   
def traite_binome_degre1(a0,an,zero):
    Ens=[" Z. X ="," Q. X ="]
    r=-Fraction(an,an)
    print("P(",end="")
    if r.denominator==1:
        j=0
        x=str(-r.numerator)
    else:
        j=1
        x=str(-r.numerator)+"/"+str(denominator)
    mx=len(x)
    if zero=="z":
        print("P(0)".ljust(mx+3)+" = 0. Solution dans"+Ens[0]+". X = 0")
    print("P("+x+")".ljust(mx+3)+" = 0. Solution dans"+Ens[j]+". X = "+x+".")
    return 0
               
def Recherche_diviseurs(a0,an):
    DV=[]
    for c in [a0,an]:
        fin=int(sqrt(abs(c)))
        L,L1=[],[]
        for j in range(1,fin+1):
            if c%j==0:
                L.append(j)
                if c//j not in L:
                    L.append(c//j)
        for c in L:
            if c!=0:
                L1.append(-c)
        A=sorted(L1+L)
        DV.append(A)
    return DV
   
def Affiche_polynome(Cf,d):
    # Affichage du Polynôme par ordre de puissances décroissantes  
    Poly=""  
    print ("P(X) =",end=" ")
    for i in range(d,-1,-1):
        c,variable=Cf[i]
        if c!=0:
            if i==0:
                c="+"+str(c) if c>0 else str(c)
            else:          
                if abs(c)==1:
                    if i==d:
                        c="" if c==1 else "-"
                    else:
                        c="+" if c==1 else "-"
                else:
                    if i==n:
                        c=str(c)
                    else:
                        c="+"+str(c) if c>0 else str(c)
            Poly+=c+variable
    print (Poly)
    return Poly

def compilation_racines_potentielles(D,repartition_sgn):
    R=[]
    for c in D[0]:
        for d in D[1]:
            frac=Fraction(c,d)
            if repartition_sgn == -1:
                if frac >0 and not frac in R:
                    R.append(frac)
            elif repartition_sgn==0:
                if not frac in R:
                    R.append(frac)
                    R.append(-frac)
            else:
                if frac <0 and not frac in R:
                    R.append(frac)              
    R=sorted(R)
    return R

def affichage_toutes_racines_potentielles(RP,repartition_sgn):
    print("     Racines Potentielles à tester :")
    Commente=["(coefficients à signes alternés, racines - si elles existent - toutes positives)"]
    Commente.append("")
    Commente+=["(coefficients ai/an tous positifs, racines - si elles existent - toutes négatives)"]
    if abs(repartition_sgn)==1:
        print(Commente[repartition_sgn+1])
    print ("{",end="")
    mx,lg=0,len(RP)
    for i in range(lg):
        f=RP[i]
        fr=str(f.numerator) if f.denominator==1 else str(f.numerator)+"/"+str(f.denominator)
        mx=max(mx,len(fr))
        if f !=RP[-1]:
            print(fr,end=", ")
        else:
            print(fr,end="}")
    return mx

def cherche_racines(RP,Coeff,nb_s):
    Sol=[]
    for r in RP:
        S,i=0,0
        for c,var in Coeff:
            S+=c*r**i
            i+=1
        if S.numerator==0:
            Sol.append(r)
            nb_s+=1
        Sol=sorted(Sol)
    return Sol,nb_s                
               
def Affiche_Resultats(Sol,mx,nb_s,expo_min):              
    # Affichage racines
    print ("\n\n     Affichage des Racines éventuelles :")
    complement,Ens=" = 0. Solution dans ",[" Z : "," Q : "]
    if len(Sol)>0:
        if expo_min>0:
            Sol.append(Fraction(0,1))
            Sol = sorted(Sol)                        
        for r in Sol:      
            if r.denominator==1:
                x=str(r.numerator)
                j=0
            else:
                x=str(r.numerator)+"/"+str(r.denominator)
                j=1
            debut="P("+x+")"
            print(debut.ljust(mx+3)+complement+Ens[j]+"X = "+x)      
    else:
       print("\n    - Pas de solutions dans Q ni dans Z -")

               
#Programme principal      
while True:        
    titre()
    mx,indice,Zero,rep=0,0,[],""
    Coeff,n,expo_min,signes_rac=Entree_Coeff_Polynome()
    print("\n     ----------------------- \n")
    print("            ANALYSE\n")
    print ("\n     Votre (fonction) Polynôme est :")
    Poly=Affiche_polynome(Coeff, n)
    if Coeff[0][0]!=0:
        expo_min,flag=0,2
    else:
        flag,a,b,expo_min=Traite_a0_nul(Coeff,n,Poly,expo_min)
    if flag:
        if flag==2:
            a0,an=Coeff[indice][0],Coeff[-1][0]
        else:
            a0,an,Zero=a,b,[0]
        Div=Recherche_diviseurs(a0,an)
        print ("\n     Diviseurs de",a0,"et",an,":")
        print ("D(a0) =",Div[0])
        print("D(a"+str(n)+") =",Div[-1])
        print()
        CRP=compilation_racines_potentielles(Div,signes_rac)
        mx=affichage_toutes_racines_potentielles(CRP,signes_rac)
        Sol,nb_s=cherche_racines(CRP,Coeff,0)
        Affiche_Resultats(Sol,mx,nb_s,expo_min)        
    print("\n")    
    while not rep in ["O","N"]:
        rep=input("     Un autre Essai (O/N) ?  ").upper()
    if rep=="N":
        break
    else:
        print("\n\n")
 


Deux exemples montrant les améliorations (d'après http://www.gecif.net/articles/mathemati … ynome.html):



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


Degré du polynôme (entier naturel >= 1 attendu) : 3

Entrer le coefficient a0 (entier relatif attendu >=0 ou <=0) : 8
Entrer le coefficient a1 (entier relatif attendu >=0 ou <=0) : 30
Entrer le coefficient a2 (entier relatif attendu >=0 ou <=0) : 37
Entrer le coefficient a3 (entier relatif attendu >=0 ou <=0) : 15

     -----------------------

            ANALYSE


     Votre (fonction) Polynôme est :
P(X) = 15X^3+37X^2+30X+8

     Diviseurs de 8 et 15 :
D(a0) = [-8, -4, -2, -1, 1, 2, 4, 8]
D(a3) = [-15, -5, -3, -1, 1, 3, 5, 15]

     Racines Potentielles à tester :
(coefficients ai/an tous positifs, racines - si elles existent - toutes négatives)
{-8, -4, -8/3, -2, -8/5, -4/3, -1, -4/5, -2/3, -8/15, -2/5, -1/3, -4/15, -1/5, -2/15, -1/15}

     Affichage des Racines éventuelles :
P(-1)    = 0. Solution dans  Z : X = -1
P(-4/5)  = 0. Solution dans  Q : X = -4/5
P(-2/3)  = 0. Solution dans  Q : X = -2/3


     Un autre Essai (O/N) ?  o



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


Degré du polynôme (entier naturel >= 1 attendu) : 6

Entrer le coefficient a0 (entier relatif attendu >=0 ou <=0) : 0
Entrer le coefficient a1 (entier relatif attendu >=0 ou <=0) : 0
Entrer le coefficient a2 (entier relatif attendu >=0 ou <=0) : 0
Entrer le coefficient a3 (entier relatif attendu >=0 ou <=0) : -8
Entrer le coefficient a4 (entier relatif attendu >=0 ou <=0) : 30
Entrer le coefficient a5 (entier relatif attendu >=0 ou <=0) : -31
Entrer le coefficient a6 (entier relatif attendu >=0 ou <=0) : 6

     -----------------------

            ANALYSE


     Votre (fonction) Polynôme est :
P(X) = 6X^6-31X^5+30X^4-8X^3

    /!\ Factorisation possible par X^3, on prend -8 pour a0 :
P(X) = X^3(6X^3-31X^2+30X-8)

     Diviseurs de -8 et 6 :
D(a0) = [-8, -4, -2, -1, 1, 2, 4, 8]
D(a6) = [-6, -3, -2, -1, 1, 2, 3, 6]

     Racines Potentielles à tester :
(coefficients à signes alternés, racines - si elles existent - toutes positives)
{1/6, 1/3, 1/2, 2/3, 1, 4/3, 2, 8/3, 4, 8}

     Affichage des Racines éventuelles :
P(0)   = 0. Solution dans  Z : X = 0
P(1/2) = 0. Solution dans  Q : X = 1/2
P(2/3) = 0. Solution dans  Q : X = 2/3
P(4)   = 0. Solution dans  Z : X = 4


     Un autre Essai (O/N) ?  n
>>>

Sûrement perfectible...

@+

Dernière modification par yoshi (17-08-2021 10:18:30)


Arx Tarpeia Capitoli proxima...

Hors ligne

#61 17-08-2021 09:57:14

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

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

Bonjour @Yoshi
j'ai donc modifier l'ancien programme que tu m'as envoyé et voila ce que j'obtiens comme erreur :
:
******************************
      *  Résolution des Polynômes  *
      *         dans Z et Q        *
      *            v3.5            *
      ******************************


Degré du polynôme (entier naturel >= 1 attendu) : 3

Entrer le coefficient a0 (entier relatif attendu >=0 ou <=0) : 8
Entrer le coefficient a1 (entier relatif attendu >=0 ou <=0) : 30
Entrer le coefficient a2 (entier relatif attendu >=0 ou <=0) : 37
Entrer le coefficient a3 (entier relatif attendu >=0 ou <=0) : 15

     -----------------------

            ANALYSE


     Votre (fonction) Polynôme est :
P(X) = 15X^3+37X^2+30X+8

     Diviseurs de 8 et 15 :
D(a0) = [-8, -4, -2, -1, 1, 2, 4, 8]
D(a3) = [-15, -5, -3, -1, 1, 3, 5, 15]

     Racines Potentielles à tester :
(coefficients ai/an tous positifs, racines - si elles existent - toutes négatives)
{-8, -4, -8/3, -2, -8/5, -4/3, -1, -4/5, -2/3, -8/15, -2/5, -1/3, -4/15, -1/5, -2/15, -1/15}

Traceback (most recent call last):
  File "/usr/lib/python3.9/idlelib/run.py", line 559, in runcode
    exec(code, self.locals)
  File "/home/gilbert/Programmes/Python/Resolution polynômes dans Z et Q_v3_4.py", line 246, in <module>
    Sol,nb_s=cherche_racines(CRP,Coeff,0)
NameError: name 'cherche_racines' is not defined
>>>

Hors ligne

#62 17-08-2021 10:16:37

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

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

je pensais que l'erreur venait de ce double

        if expo_min==d-1:
            if d==1:
                traite_binome_degre1(Coff[d][0],Coff[d-1][0])
                return 0,0,0,expo_min
            else:                                                
                return 1,a0,Coff[-1][0],expo_min              ## ici ##
        else:
            return 1,a0,Coff[-1][0],expo_min              ## doublon ?##
 

mais cela ne change rien : NameError: name 'cherche_racines' is not defined

Par contre si je fais le test avec l'ancien programme tout marche bien, la différence se situe uniquement à l'affichage des racines éventuelle, que j'ai en plus par rapport à ton affichage:

Dernière modification par LEG (17-08-2021 10:40:38)

Hors ligne

#63 17-08-2021 10:26:15

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 15 945

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

Re,

Non, non, le message d'erreur dit que la fonction cherche_racines n'existe pas...
Je ne cherche pas à comprendre pourquoi...
Je viens de supprimer le prog et ai refait un copier/coller.

Mais ne modifie pas une version, remplace-là purement et simplement par la plus récente ou enregistre sous un autre nom...
Pas vraiment doublon, je vais voir si je peux factoriser...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#64 17-08-2021 10:47:04

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

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

Re :
Ok , c'est impeccable, je viens de refaire un copier collé...plus d'érreur.
@+

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)?
soixante treize moins quarantetrois
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