Hermite...

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
Nico56
Messages : 52
Enregistré le : lun. 12 janv. 2015, 16:06

Hermite...

Message non lu par Nico56 » sam. 12 mars 2016, 18:46

Bonsoir, je voudrais créer une fonction f à l'aide d'une interpolation (Hermite).
Je sais comment faire pour tracer un graphe, mais je n'arrive pas à définir la fonction f (pour pouvoir l'utiliser après), j'ai vu qu'on peut utiliser pwhermite mais il faut définir les coefficients directeurs des tangentes, ce que je ne veux pas avoir à gérer.

Graphe (code pris dans la galerie):

Code : Tout sélectionner

import graph;
size(10cm,0);
real[] xpt={-1,.5,2,2.5,4};
real[] ypt={2,-1,2,-2,3};

draw(graph(xpt,ypt,Hermite(monotonic)));

Merci d'avance!
Bon week-end.
Nico
Windows 10 - Asymptote(2.32)+texlive - Editeur: texmaker (4.5)

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1328
Enregistré le : dim. 7 mars 2010, 14:50

Re: Hermite...

Message non lu par GM » dim. 13 mars 2016, 10:04

Bonjour,

si j'ai bien compris, ceci devrait t'intéresser :

Figure asymptote d4baa94ec9fa51feca4d1f89a9c250d6
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. size(200);
  2. import graph;
  3.  
  4. real[] xpt={-1,.5,2,2.5,4};
  5. real[] ypt={2,-1,2,-2,3};
  6. path Cf=graph(xpt,ypt,Hermite(monotonic));
  7. real f(real x){
  8. real[] t=times(Cf,x);
  9. return point(Cf,t[0]).y;
  10. }
  11. // Je dessine la courbe
  12. draw(Cf);
  13. // J'affiche en noir les points qui ont défini la courbe
  14. dot(Cf,8bp+black);
  15. // J'affiche en rouge les points d'abscisses 0 à 3.
  16. for(int i=0; i<4; ++i)
  17. dot((i,f(i)),6bp+red);
  18. // J'ajoute des axes en vert pour que cela soit plus lisible.
  19. axes(green);
  20. xaxis(nullpen,Ticks(scale(.5)*"",Step=1,Size=.5mm,blue));


Je devance une question : http://asy.marris.fr/asymptote/Intersec ... path_times
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 10/10/17) :
PC n°1 :Windows 10 - Asymptote(2.41)+MikTeX2.9 - Editeurs : Notepad++ et TeXworks.
Mes autres PC :Ubuntu 16.04LTS - Asymptote(2.42 git) + TexLive2017 - Editeur : TeXworks.
Merci de préciser la votre pour faciliter l'aide des autres !

Nico56
Messages : 52
Enregistré le : lun. 12 janv. 2015, 16:06

Re: Hermite...

Message non lu par Nico56 » lun. 14 mars 2016, 14:00

Merci, loin d'être trivial :)
Bonne journée.
Nico
Windows 10 - Asymptote(2.32)+texlive - Editeur: texmaker (4.5)

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1328
Enregistré le : dim. 7 mars 2010, 14:50

Re: Hermite...

Message non lu par GM » lun. 14 mars 2016, 15:43

Attention : j'ai supprimé l'appel à geometry.asy qui était inutile.
Nico56 a écrit :loin d'être trivial :)
Quelques explications, pour comprendre d'abord la notion de "time" :
  • Les 5 points qui définissent la courbe ont pour "time" : 0, 1, 2, 3 et 4.
  • Un point qui se situe entre le premier et le deuxième de ces 5 points a un "time" t tel que 0<t<1.
    Un point qui se situe entre le deuxième et le troisième de ces 5 points a un "time" t tel que 1<t<2.
    ...
    Un point qui se situe entre le quatrième et le dernier de ces 5 points a un "time" t tel que 3<t<4.
Parmi les fonctions qui exploitent cette notion de "time", il faut connaitre notamment les deux que j'ai utilisées :
  • La fonction real[] times(path p, real x) dont la documentation dit ceci :
    real[] times(path p, real x) returns all intersection times of path p with the vertical line through (x,0).
  • La fonction pair point(path p, real t) dont la documentation dit ceci :
    pair point(path p, real t)
    This returns the coordinates of the point between node floor(t) and floor(t)+1 corresponding to the cubic spline parameter
    t-floor(t) (see Chapter 5 [Bezier curves], page 22). If t lies outside the range [0,length(p)], it is first reduced modulo length(p) in the case where p is cyclic or else converted to the corresponding endpoint of p.
    Cette dernière fonction renvoie donc un "pair" (couple) ; et on accède à la deuxième valeur du couple (ordonnée qui est l'image de la première (abscisse) par la fonction représentée par la courbe) en ajoutant ".y".
Dois-je expliquer davantage ?
Modifié en dernier par GM le dim. 20 mars 2016, 11:04, modifié 1 fois.
Raison : Changement d'un "cet" en "cette".
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 10/10/17) :
PC n°1 :Windows 10 - Asymptote(2.41)+MikTeX2.9 - Editeurs : Notepad++ et TeXworks.
Mes autres PC :Ubuntu 16.04LTS - Asymptote(2.42 git) + TexLive2017 - Editeur : TeXworks.
Merci de préciser la votre pour faciliter l'aide des autres !

Nico56
Messages : 52
Enregistré le : lun. 12 janv. 2015, 16:06

Re: Hermite...

Message non lu par Nico56 » dim. 20 mars 2016, 10:43

Bonjour GM, je pense avoir compris!
Merci beaucoup pour les précisions, c'est bien utile.
Je m'en vais de ce pas faire mes tests.
Bonne journée.
Nico

edit:
J'ai bien compris tes explications mais une partie de code n'est pas claire pour moi:

Code : Tout sélectionner

real f(real x){
   real[] t=times(Cf,x);
   return point(Cf,t[0]).y;
}
Je pense avoir bien bien compris le principe de la définition de f à partir de Cf, j'ai 2 questions:
1. la liste t contient combien de valeurs?
2. A chaque valeur de x, on définit une valeur de la liste t (le time de l'ordonnée du point d'intersection de X=x avec Cf,je me trompe?) puis on détermine les coordonnées du point de Cf dont le time est donné et on ne garde que l'ordonnée. Par contre, je ne comprends pas le t[0], j'avoue ne pas avoir compris la partie sur le courbes de Beziers que je ne maîtrise pas du tout...
Windows 10 - Asymptote(2.32)+texlive - Editeur: texmaker (4.5)

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1328
Enregistré le : dim. 7 mars 2010, 14:50

Re: Hermite...

Message non lu par GM » dim. 20 mars 2016, 11:18

Nico56 a écrit :1. la liste t contient combien de valeurs?
Comme le path est réprésentatif d'une partie de courbe de fonction, l'intersection avec une droite d'équation x=a ne donne qu'un seul point d'intersection : donc t ne contient qu'une valeur ! Et cette valeur est t[0].

Mais si tu prends un path tel que celui de l'exemple donné dans la galerie :
http://asy.marris.fr/asymptote/Intersec ... path_times
on pourrait avoir plusieurs points d'intersection et t serait une liste dont les premières valeurs seraient t[0], t[1], ...
Nico56 a écrit :2. A chaque valeur de x, on définit une valeur de la liste t (le time de l'ordonnée du point d'intersection de X=x avec Cf,je me trompe?)
A chaque valeur de x, t est une liste qui ne contient qu'un seul élément t[0] (pour la raison donnée ci-dessus).
Nico56 a écrit :puis on détermine les coordonnées du point de Cf dont le time est donné et on ne garde que l'ordonnée.
"... dont le time est récupéré par la fonction times(...') ..."

C'est cela.
Nico56 a écrit :Par contre, je ne comprends pas le t[0]
Cela devrait aller mieux avec ma première explication : c'est le premier élément de la liste t (qui n'en comporte qu'un seul dans notre cas particulier).
Nico56 a écrit :j'avoue ne pas avoir compris la partie sur les courbes de Bezier que je ne maîtrise pas du tout...
Pour bien comprendre la "construction" des path, voir cet exemple et ceux qui suivent :
http://asy.marris.fr/asymptote/Lignes/i ... ath_Bezier
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 10/10/17) :
PC n°1 :Windows 10 - Asymptote(2.41)+MikTeX2.9 - Editeurs : Notepad++ et TeXworks.
Mes autres PC :Ubuntu 16.04LTS - Asymptote(2.42 git) + TexLive2017 - Editeur : TeXworks.
Merci de préciser la votre pour faciliter l'aide des autres !

Nico56
Messages : 52
Enregistré le : lun. 12 janv. 2015, 16:06

Re: Hermite...

Message non lu par Nico56 » dim. 20 mars 2016, 12:27

J'ai mal raisonné; dans mon exemple, il est évident, en effet, que la liste t ne contienne qu'une valeur.
Merci pour les infos, j'ai bien compris maintenant!
Comme dirait l'autre, je peux mourir en paix maintenant.
Windows 10 - Asymptote(2.32)+texlive - Editeur: texmaker (4.5)

Répondre