Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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 ...)
Pages : 1