Comment utiliser les fonctions mathématiques non intégrées à gnuplot

3

J'ai toujours considéré gnuplotcomme très utile, et plus encore depuis que j'utilise des documents tikzL A T E X. Malheureusement, le nombre de fonctions de base implémentées gnuplotest assez réduit. J'ai souvent besoin de fonctions spéciales telles que les fonctions de Bessel modifiées K ν et I ν . Ces fonctions ne peuvent pas être écrites avec les fonctions existantes disponibles dans gnuplot. Existe-t-il un moyen de lier gnuplot et des gslbibliothèques? Je suis allé sur gnuplotting.org et sur d’autres sites consacrés à mais gnuplotje n’ai trouvé aucun mot concernant ce problème. Si quelqu'un a un indice, j'apprécierais.

Tom-Tom
la source

Réponses:

2

Si vous pouvez écrire une commande permettant de calculer la fonction dont vous avez besoin, vous avez terminé:

gnuplot> f(x) = real(system(sprintf("echo %f", x)))
gnuplot> plot f(x)

(voir help system)

Vous pouvez donc utiliser par exemple une octave pour calculer votre valeur. Par exemple, si votre système est Linux, vous pouvez avoir directement:

gnuplot> bJ(a,x) = real(system(sprintf("echo 'besselj(%f,%f)' | octave | grep ^ans | cut -f 2 -d =", a,x)))
gnuplot> plot [0:20] bJ(1,x)

Cela prendra du temps à courir! Définissez la samplevaleur sur une valeur basse jusqu'à ce que vous ayez défini tous les détails de votre tracé. Si vous devez rediffuser plusieurs fois, vous pouvez également commencer par tabuler votre fonction en utilisant set term tablepuis tracer les valeurs tabulées.

Joce
la source
Merci beaucoup. Je n'ai pas pensé à system. Pour les fonctions que j'ai souvent utilisées, il serait utile de compiler une petite interface binaire reliant une bibliothèque mathématique telle que GSL pour éviter les conversions multiples dans la chaîne de caractères que vous suggérez.
Tom-Tom
Bien sûr, mais dans ce cas, il vaut peut-être la peine d’avoir un binaire capable de tabuler la fonction plutôt que de renvoyer une valeur unique. Dans ce cas, vous finirez par tracer un fichier de données avec des modificateurs plutôt qu'une fonction analytique avec des requêtes système point par point.
Joce