0 votes

Le nombre d'ajouts doit dépendre de la valeur actuelle

Je veux ajouter un nombre à une variable. Ce nombre doit être plus grand lorsque la variable est petite et plus petit lorsque la variable est grande. J'ai calculé les valeurs optimales : lorsque var=1, la fonction doit ajouter 125. Lorsque var=50, la fonction doit ajouter 420. J'ai pensé à la fonction sin, mais je n'ai aucune idée de comment "personnaliser" cette fonction pour qu'elle fonctionne. (J'utilise php)

0voto

Jonathan Leffler Points 299946

La fonction sinus est périodique et ne convient probablement pas à cette tâche.

Votre exemple n'est pas clair : vous dites d'ajouter "un plus grand nombre lorsque var est petit et un plus petit nombre lorsque var est plus grand", mais vous ajoutez 125 à 1 et 420 à 50, ce qui contredit le texte.

Une possibilité est la fonction réciproque - elle répond à vos exigences déclarées mais pas à celles de votre exemple.

Avec seulement 2 points de données, nous pouvons déduire une relation linéaire :

y = 125 + (420 - 125) / (50 - 1) * (x - 1)

qui est approximativement :

y = 119 + 6x

Vérifiez :

x =  1; y = 125
x = 50; y = 419

Le facteur 6 approximatif est un arrondi de 6,0204081632 ... ce qui constitue une séquence intrigante dans la partie fractionnaire.

0voto

Waleed A.K. Points 426

Essayez de faire une projection d'une équation linéaire.

VarAdd = Var*Slop+Start ; eq [1]

125=1*Slop+Start ---1

420=50*Slop+Start -2

Résolvez Slop et Start puis appliquez eq[1] à tout moment.

0voto

Artefacto Points 50896

Pour une fonction avec la forme :

f[x_] := x + Sin[y*x + z]

Sous réserve des contraintes

f[1] == 1 + 125 && f[50] == 50 + 420

Vous avez

{{y -> 1/49 (-ArcSin[125] + ArcSin[420]), 
  z -> 1/49 (50 ArcSin[125] - ArcSin[420])}}

qui est approximativement

{{y -> 0. - 0.0247338 I, z -> 1.5708 - 5.49671 I}}

Entre 0 et 70, cela donne :

Graph

Une fonction approximative, utilisant uniquement des valeurs réelles, est :

f(x) = x + 121.94629730754633 cosh(0.02473378688005212 x) + 
 121.94219707312345 sinh(0.02473378688005212 x)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X