PHP/Maths : Sinusoide en triangle

#1
Bonjour a tous,

Le forum a fait peu neuve apparemment ^^ et j'ai récup le vieux compte sa fait plaisir !

bon je vais essayez de faire simple :
je bosse en PHP (comme d'hab')
je travail sur une fonction qui implique la suite logistique ( Suite logistique, merci wikipédia ! )

j'ai un nombre (float) en entré de ma fonction qui est compris entre 0 et 1 et la précision de ce nombre et d'un millionième (6 chiffres après la virgule pour ceux qui dormaient en maths ^^)

Ce nombre passe un certain nombre de fois dans la suite logistique (avec µ=4 et le nombre d’itération reste a définir selon les besoins)

Pour allez plus loin dans la fonction que je souhaite créer j'avais besoin de connaitre le comportement de la suite, j'ai donc tracer un graphique avec le million de points
1M points.png

et voila le comportement :
pour 1 itération, le graphique affiche une parabole de [0,0 ; 0.5,1; 1,0]
Pour 2 itérations, le graphique affiche 2 sinusoïdes
Pour 3 itérations, le graphique affiche 4 sinusoïdes
Pour 4 itérations, le graphique affiche 8 sinusoïdes
et plus on fait d’itérations plu le nombre de sinusoïdes augmentes suivant le shema : pour n itérations : 2^(n-1) sinusoïdes
a noté que les sinusoïdes ont une période plus courte quand x s’approche de 0 ou 1 et des périodes plus longues en s’approchant de 0.5

voila le graphique (pour 5 itérations)
graph 5 iterations.png
et une partie du code :
PHP:
function graphique() {
    $points=[];
    for ($i = 0; $i < 1000000; $i++) {
        $x=$i/1000000;
        for ($j = 1; $j <= 5; $j++) { // 5 itérations            
            // la fameuse suite logistique :
            $x = $this->logistic($x); // (4 * $x * (1 - $x));
            // ???
        }
        $points[] = [$i/1000000, $x];
    }
    return $points;
}
Et à présent voici ma question :
Quel traitement dois-je appliquer à $x sur la ligne "// ???" pour transformer/lisser/convertir ma courbe sinusoïdal en courbe en triangle (spike en anglais) ?

bon courage a ceux qui liront ce pavé,
bravo a ceux qui le comprendront,
et merci a celui qui trouvera la solution a mon problème.

Sur ce je vous laisse, c'est l'heure de mes pilules ...
 
#2
Bon j'ai trouvé un truc,
pour redresser la courbe sinusoïdal j'utilise un graphique en dents de scie définis par
f(x) = x * f % M
( f = fréquence des dents de scie
M = valeur maximal d'une dent de scie)

x étant mon nombre décimal après le passage dans un certain nombre d’itération de la fonction logistique j'ai donc cette ligne a la place de mon "//???" du message précédent :


PHP:
//je multiplie $x par 1000000 pour pouvoir utiliser le modulo 
//et je redivise par 1000000
//on appel ça "un parapluie" en maths ^^
$x = (($x * 1000000 * $f) % 1000000) / 1000000;
se qui me donne un graphique du genre :
graph dds.png
a présent il me reste a trouver les valeurs optimal pour le nombre d’itération et la fréquence des dents de scie...
j'ai une simulation qui tourne pour ça, j'ai quelques résultats intéressants mais je pense que quelqu'un qui s'y connais en IA et machine learning pourrais me faire gagner du temps.

ou alors si vous me trouvez une meilleur solution je reste preneur.

PS : j’oubliai de préciser, évidement pour ces recherches je fait tourner mes script PHP en mode console, je lance pas une boucle for a 1000000 de tours par serveur web ^^
 
#4
Bonjour,
bonne réflexion mais ce n'est pas ce que je cherche ( ou j'ai mal compris votre idée),
les minima et maxima locaux pourrais me servir uniquement :
-si je cherchais les valeurs max et min de mon signal ( hors je sais déjà qu'il varie de 0 a 1)
- ou a connaitre le nombre de "bosse" et de "creux" de mon signale mais sa je peux aussi le déduire a l'aide des deux paramètres que je peux faire varier a savoir :
le nombre d’itérations de la fonction logistique ( i ) et la fréquence de mon signale en dent de scie ( f )
( nombre de bosse = nombre de creux = [2^(i-1)] * (2f -1) )

Je ne vois pas comment je pourrais me servir de ça pour transformer mon signale sinusoïdale en signale triangulaire. ou vous avez eu une réflexion que je n'ai pas saisis.
 
Dernière édition:

Membres du staff en ligne

Membres en ligne

Statistiques globales

Discussions
862 545
Messages
8 026 922
Membres
1 573 059
Dernier membre
david bene
Haut