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) » Calcul de coefficients dans une formule » 03-11-2023 20:03:21

En fait, on peut éliminer [tex]\left|K\right|[/tex]

[tex]f(x) = A.ln(K.x +C) + B[/tex]
Si [tex]K = 0[/tex] alors il faut remplacer cette équation par celle d'une droite [tex]f(x) = A.x + B[/tex]

Si [tex]K \neq 0[/tex],

[tex]f(x) = A.ln\bigl[\left|K\right|\bigl(sgn\left(K\right).x+\frac{C}{\left|K\right|}\bigr)\bigr]+B[/tex]
[tex]f(x) = A\Bigl[ln\left(\left|K\right|\right) + ln\bigl(sgn\left(K\right).x+\frac{C}{\left|K\right|}\bigr)\Bigr]+B[/tex]
[tex]f(x) = A.ln\left(\left|K\right|\right) + A.ln\bigl(sgn\left(K\right).x+\frac{C}{\left|K\right|}\bigr)+B[/tex]
[tex]f(x) = A.ln\bigl(sgn\left(K\right).x+\frac{C}{\left|K\right|}\bigr)+\Big(B + A.ln\left(\left|K\right|\right)\Big)[/tex]

En posant
[tex]a = A[/tex]
[tex]b = B+A.ln\left(\left|K\right|\right)[/tex]
[tex]s = sgn\left(K\right)[/tex]
[tex]c = \frac{C}{\left|K\right|}[/tex]

On trouve
[tex]f\left(x\right) = a.ln\left(s.x + c\right) + b[/tex]

avec
[tex]s \in \left\{-1, +1\right\} [/tex]

bien entendu : [tex] s.x + c > 0 [/tex]

Je sais calculer s,
J'ai trouvé les formules de a et b, fonctions de c et de s
Reste à déterminer c

#2 Entraide (supérieur) » Calcul de coefficients dans une formule » 01-11-2023 18:37:44

Eric-40
Réponses : 1

Bonjour,

Je cherche une solution à un problème mais n'y arrive pas, du moins, pas complètement
Toutes les coordonnées sont des entiers.
a, b, c, k sont des réels

J'ai une courbe, croissante de (Xmin, Ymin) à (Xmax, Ymax), je connais ces deux points
Et je connais la moyenne des Y sur ce segment = Ymoy

Je cherche l'équation de la courbe pour généraliser ma formule et l'intégrer dans un programme
Vu la forme de la courbe, j'ai pensé à un : y = f(x) = ent(a.ln(k.x +c) + b) ou tout simplement a.x+b si Xmoy = (Xmax+Xmin)/2
Pour l'instant, j'ai trouvé a et b, j'ai forcé k à -1 ou +1 selon le sens de la courbure et pour c, j'ai procédé par dichotomie n'arrivant pas à isoler ce terme dans l'équation.

Pour un exemple concret, j'ai posé (Xmin, Ymin) = (10, 10); (Xmax, Ymax) = (400, 400) et Ymoy = 128.
j'ai trouvé k = -1,  c = 431,  a = -149.50287,  b = 913.39093
mais aussi k = -3.2,  c = 1380,  a = -150,  b = 1091

En faisant la moyenne des Yi (entiers) sur l'intervalle [Ymin, Ymax], je dois trouver Ymoy

Je peux, bien entendu communiquer mes formules et la courbe pour les exemples ci-dessus

Je remercie quiconque qui pourrait m'aider à trouver une formule générale et m'expliquer comment trouver ces coefficients
Bonne soirée

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

#4 Re : Entraide (supérieur) » Calculs de coefficients dans Z » 21-07-2019 17: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

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