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 Re : Entraide (supérieur) » Calculs de coefficients dans Z » 22-07-2019 14:52:55

Bonjour,
Si si, il faut l'inverser car c'est la somme de tout qui doit faire 0 : Y + K1.Val1 + K2.Val2 + … + Kn.Val(n) = 0
Mea culpa, j'ai écrit Y = K1.Val(1) …

J'ai modifié légèrement le python en ajoutant un while, reste à choisir la bonne solution lorsqu'il y en a plusieurs, celle dont la somme des valeur absolue de tous les coefficients est la plus petite.
[0, 3, 0, 3, -2, 1, 0] qui donne 9 dans l'exemple cité


#### Remarque ###
#### Pour augmenter le nombre de solutions obtenues il faut augmenter la valeur de nb_sol
################
     
def verif(S, Coef, y): # Pour vérifier les n_uplet obtenus
     somme = y
     for i in range(len(Coef)-1) :
         somme += S[i]*Coef[i+1]
     if somme==0:
         return True
     return False

S = []
y = -72
Coef = [-44, 35, 30, -26, -16, 13, 4] #Coeffficient voulu

Coef = [0] + Coef
n = len(Coef) - 1
nb_sol = 0

while S == [] :
    nb_sol += 1

    L = [[[0, y]]] + [[[0,0] for _ in range(nb_sol**(i+1))] for i in range(n)] #[0,1] 0 le quotient 1 le reste
    Soustracteur = [-i for i in range(nb_sol)]

    for i in range(1, n+1) :
        for k in range(len(L[i])) :
            L[i][k][0] = L[i-1][k//nb_sol][1]//Coef[i] + Soustracteur[k%nb_sol] # On soustrait au quotient obtenu une certaine valeur
            L[i][k][1] = L[i-1][k//nb_sol][1]%Coef[i] - Soustracteur[k%nb_sol]*Coef[i] # On compense ce que l'on a enlevé dans le quotient

    V = L[-1]
    K = []
    for k in range(len(V)) : #On cherche toutes les opérations qui donnent un reste nul
        if V[k][1]==0 :
            K.append([k,V[k][0]])
         
    S = []
    for i in range(len(K)):
        k = K[i][0]
        S = [[-L[i][k//nb_sol**((n-i))][0] for i in range(1,n+1)]] + S

print(nb_sol)
print(S)
 

#2 Re : Entraide (supérieur) » Calculs de coefficients dans Z » 21-07-2019 15:24:33

Bonjour et merci Maenwe,
effectivement la première solution est fausse : erreur de recopie, le 2ème 7 est en fait -7 soit  (7, -1, -7, 15)

Le viens d'essayer ton programme python, trop trop bien, tu es un chef, il faudra juste que je prenne en compte d'inverser tous les signes.

je vais essayer de le comprendre et ajouter un test de la meilleure solution (celle qui contiendra le maximum de 0, puis dont la somme des coefficients sera au minimum) ou alors, à la place du append :
S'il y a davantage de 0 que dans la dernière solution retenue ou si la somme des coefs est plus petite que la dernière solution retenue, alors on la prend en compte

Après, je rajouterai une nouvelle boucle car le problème complet est de trouver
le 1er nombre en fonction du 2ème au dernier
puis le 2ème en fonction du 3ème au dernier
puis le 3ième en fonction du 4ème au dernier
etc, ... jusqu'à ce que ça bloque, en général, soit ça ne bloque pas, soit ce sont les deux dernières valeurs qui ne sont pas multiple l'une de l'autre, dans ce cas, au lieu de a = kb, je fais k1.a = k2.b, avec k1 = b/pgcd(a,b) et k2 = a/pgcd(a,b)

ceci me sert pour réduire des matrices de grande dimension en vue de calculer leur déterminant rapidement et le plus juste possible, plus d'autres calculs après avoir trouvé le déterminant.
Je tente de faire du VBA car les matrices sont sous excel.

Merci encore et bonne fin de dimanche

#3 Re : Entraide (supérieur) » Calculs de coefficients dans Z » 19-07-2019 12:29:14

Merci Freddy,

Effectivement, il y a plusieurs possibilités, je cherche les plus petits coefficients
Et effectivement aussi, c'est pour de la programmation

Je me demandais s'il n'y avait pas de l'euclide ou autre par là, ce serait bien leur genre ;)

Python ou un algo m'iraient, j'adapterai en conséquence.

En tout cas, merci d'avoir répondu si vite
Agréable journée

(En même temps, je découvre Latex, c'est sympa ...)

Pied de page des forums