Méthode de Ruffini Horner et,résolution du 3ième degré

Description

###################################################################
# Méthode de Ruffini-Horner : division d'un polynome par (x - x0) #
###################################################################

print("Méthode de Ruffini-Horner : division d'un polynome par (x - x0)")

def intInput(txt):return int(input(txt+" : "))

def floatInput(txt):return float(input(txt+" : "))

def signe(x):return "-" if x < 0 else "+"

n = intInput("Degré du polynôme")

a = floatInput("Racine du polynôme")

p = (n+1)*[0]
for i in range(0,n+1):
    p[n-i]=floatInput("Coefficient de x^"+str(n-i));

for i in range(0,n+1):
    if p[n-i]!=0:
        if n-i==0:
            print(signe(p[n-i])+" "+str(abs(p[n-i])),end="");
        else:
            print(signe(p[n-i])+" "+str(abs(p[n-i]))+" x^"+str(n-i),end=" ");
print(" = ")

q = n*[0]
q[n-1] = p[n]
j = n-2
while j > -1:
    q[j] = p[j+1]+a*q[j+1]
    j=j-1

#for i in range(0,n):
#    print("Coefficient de x^"+str(n-1-i)+" : ",q[n-1-i])

print("(x "+signe(-a)+" "+str(a)+")(",end="")

for i in range(0,n):
    x=q[n-1-i]
    y=str(abs(x))
    if x==0:continue
    if n-1-i!=0:
        print(signe(x)+" "+y+" x^"+str(n-1-i),end=" ")
    else:
        print(signe(x)+" "+y,end="")
print(")n")

########################
# Equations de degré 3 #
########################

import math # pour sqrt cos et acos
import numpy # pour cbrt

# a différent de 0
def eq3(a,b,c,d): # az³ + bz² + cz + d = 0
    # calcul de x³ + px + q = 0 avec z = x - b/3a
    p = c/a-b*b/(3*a*a)
    q = 2*b*b*b/(27*a*a*a)+d/a-b*c/(3*a*a)
    Δ = q*q/4+p*p*p/27
    if Δ<0.0: # 3 solutions réelles dont une
        # r=math.sqrt(-p*p*p/27)
        # t=math.acos(-q/(2*r))
        t=math.acos((3*q/(2*p))*math.sqrt(-3/p))
        x=2*math.sqrt(-p/3)*math.cos(t/3)
    else: # une seule solution réelle x
        δ=math.sqrt(Δ)
        u=numpy.cbrt(-q/2+δ)
        v=numpy.cbrt(-q/2-δ)
        x=u+v
    z=x-b/(3*a)
    return z # retourne une solution réelle

if n==3:
    print("p : ",p[::-1]) # p = (x-x0)q
    print("q : ",q[::-1])
    print()
    z = eq3(p[3],p[2],p[1],p[0])
    print("Racine : ",z)
    print("Vérification : 0 ≈",p[0]*z*z*z+p[1]*z*z+p[2]*z+p[3])

intInput("Entrée pour terminer")

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.