Page 1 sur 1

[Gnuplot, Maxima] Fonctions implicites

Publié : lundi 22 octobre 2007, 14:19
par MB
Bonjour,

je regardais comment représenter des fonctions implicites avec Gnuplot ou avec Maxima.

Avec Maxima, une fonction implicit_plot est définie et doit être chargée avant d'être utilisée :

Code : Tout sélectionner

load(implicit_plot);
Puis on utilise la fonction : (ici pour représenter une ellipse)

Code : Tout sélectionner

implicit_plot([(x-sqrt(2)/4)^2*24+y^2*12=1], [x,0.1,0.6], [y,-0.4,0.4], [gnuplot_preamble,  "set grid"]);
Le problème est que, par exemple, l'option [nticks,200] qui devrait améliorer la précision du tracé en augmentant le nombre de points calculés n'a aucun effet ici. Cette option ne doit fonctionner que pour les commandes du type plot2d.

En regardant donc du côté de Gnuplot directement, il me semble que la représentation de fonctions définies de manière implicite ne soit pas directement prise en charge (voir partie 6 sur ce lien). D'ailleurs c'est peut être pour cette raison qu'une fonction spécifique a été définie dans Maxima (même si à priori elle fait toujours appel à Gnuplot).

Bref ma question est :

Comment augmenter la qualité de la représentation produite par la fonction implicit_plot ? (sachant que l'usage direct de Gnuplot ne semble pas très pratique)

Re: [Gnuplot, Maxima] Fonctions implicites

Publié : mardi 23 octobre 2007, 10:25
par gigiair
MB a écrit :Comment augmenter la qualité de la représentation produite par la fonction implicit_plot ? (sachant que l'usage direct de Gnuplot ne semble pas très pratique)
Il ne servirait à peu près à rien d'augmenter le nombre de points. Implicit_plot construit un tableau de coordonnées dans %homepath%\maxout.gnuplot, groupées par deux et séparées par une ligne blanche. J'en déduis que la représentation graphique sera nécessairement une suite de segments.
Comme il vaut mieux faire appel au bon Dieu qu'à ses saints (même à saint Taxe, qui n'est pas le saint des percepteurs, mais celui des informaticiens), autant faire appel directement à gnuplot.
Sauver le code suivant sous le nom implicit.gnu dans %homepath% par exemple, puis dans gnuplot taper «load "implicit.gnu"».

Code : Tout sélectionner

f(x,y)=(x-sqrt(2)/4)**2*24+y**2*12;
set cntrparam levels discrete 1.0
set isosamples 100,100
set xrange [0:0.6]
set yrange [-0.5:0.5]
set cntrparam bspline
set contour base
unset surface
set table 'courbe.dat'
splot f(x,y)
unset table
plot  'courbe.dat' title '12*y^2+24*(x-sqrt(2)/4)^2 = 1'  w l
Pour améliorer la qualité on peut augmenter isosamples.
Le paramètre cntrparam levels discrete 1.0 est celui qui fait que la courbe tracée est la ligne de niveau 1. On peut évidemment en changer.
Le fichier %homepath%\courbe.dat est celui qui contient les coordonnées des points de la courbe. Il est instructif de le comparer à maxout.gnuplot
Pour changer d'équation, il suffit de rééditer le fichier. Il faut savoir que sous gnuplot, ^ n'est pas le symbole de l'exponentiation, il faut utiliser **.
Par contre il faut fixer «à la main» les paramètres de xrange et yrange. maxima lui, se débrouille tout seul, et peut aider à les fixer.

Re: [Gnuplot, Maxima] Fonctions implicites

Publié : mardi 23 octobre 2007, 18:25
par MB
gigiair a écrit :Il ne servirait à peu près à rien d'augmenter le nombre de points. Implicit_plot construit un tableau de coordonnées dans %homepath%\maxout.gnuplot, groupées par deux et séparées par une ligne blanche. J'en déduis que la représentation graphique sera nécessairement une suite de segments.
Ca pourrait peut être augmenter le nombre de coordonnées calculées.

En tout cas, merci pour ta réponse. Je teste la solution Gnuplot dès que j'ai le temps.

Re: [Gnuplot, Maxima] Fonctions implicites

Publié : mardi 23 octobre 2007, 21:01
par gigiair
MB a écrit :Ca pourrait peut être augmenter le nombre de coordonnées calculées.
Oui, mais sans amélioration très sensible du rendu qui se fera de toute façon comme une suite de segments, et non comme une courbe lissée.

Re: [Gnuplot, Maxima] Fonctions implicites

Publié : mardi 23 octobre 2007, 21:08
par gigiair
MB a écrit :Ca pourrait peut être augmenter le nombre de coordonnées calculées.
Oui, mais sans amélioration très sensible du rendu qui se fera de toute façon comme une suite de segments, et non comme une courbe lissée.Je n'ai pas tout analysé du code de implicit_plot.lisp, mais il semble que ce soit le comportement normal de ce module. Peut-être une option pourrait le modifier. Si je trouve, je posterais ici, mais de toute façon le résultat risque d'être absolument identique à celui de gnuplot. C'est juste une question de syntaxe.

Re: [Gnuplot, Maxima] Fonctions implicites

Publié : mercredi 24 octobre 2007, 14:28
par MB
gigiair a écrit :Oui, mais sans amélioration très sensible du rendu qui se fera de toute façon comme une suite de segments, et non comme une courbe lissée.
Bah d'après moi, même sans lisser la courbe, le fait d'augmenter le nombre de points calculés va améliorer la qualité de la représentation. Les segments seront plus courts. Par exemple, si on ne calculait que 4 points, la courbe ne serait composée que de 4 segments et son allure serait tout autre.

Bon, je teste ça sous Gnuplot.

Re: [Gnuplot, Maxima] Fonctions implicites

Publié : mercredi 24 octobre 2007, 14:56
par MB
Bon, ça fonctionne bien et on peut en effet définir le nombre de points calculés via la commande set isosamples.

Pour faire les tests, j'ai copié le code suivant dans un fichier nommé ellipse.gnu.

Code : Tout sélectionner

f(x,y)=(x-sqrt(2)/4)**2*24+y**2*12;
set cntrparam levels discrete 1.0
set isosamples 1000,1000
set xrange [0.1:0.6]
set yrange [-0.3:0.3]
set size ratio 1
set grid
# show size
set cntrparam bspline
set contour base
unset surface
set table 'ellipse.dat'
splot f(x,y)
unset table
plot  'ellipse.dat' w l
La commande set size ratio 1 permet d'obtenir un repère orthonormé.

Voici les résultats obtenus.

Pour 1000 points calculés :

[attachment=1]image[/attachment]


Pour 4 points calculés :

[attachment=0]image[/attachment]

Re: [Gnuplot, Maxima] Fonctions implicites

Publié : mercredi 24 octobre 2007, 21:27
par gigiair
Oui, ça marche d'enfer, mais ce que je disais valait pour la méthode implicit_plot de maxima, qui par construction trace une suite de segments, pas pour la méthode directe gnuplot.
gnuplottex permet d'inclure la figure dans un document LaTeX.
Il faut compiler avec l'option -shell-escape (-enable-write18). Voici un exemple :

Code : Tout sélectionner

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{gnuplottex}
\usepackage[frenchb]{babel}
\begin{document}

\begin{gnuplot}
    f(x,y)=(x-sqrt(2)/4)**2*24+y**2*12
    set cntrparam levels discrete 1.0
    set isosamples 1000,1000
    set xrange [0.1:0.6]
    set yrange [-0.3:0.4]
    set size ratio 1
    set grid
    # show size
    set cntrparam bspline
    set contour base
    unset surface
    set table 'ellipse.dat'
    splot f(x,y)
    unset table
    plot 'ellipse.dat' title '$24\,(x-\frac{\sqrt{2}}{4})^2+12\,y^2=1$'  w l
\end{gnuplot}
\end{document}

Re: [Gnuplot, Maxima] Fonctions implicites

Publié : mercredi 24 octobre 2007, 22:55
par MB
gigiair a écrit :Oui, ça marche d'enfer, mais ce que je disais valait pour la méthode implicit_plot de maxima, qui par construction trace une suite de segments, pas pour la méthode directe gnuplot.
En tout cas, il semblerait que la fonction implicit_plot de maxima fasse toujours appel à Gnuplot.
J'ai regardé vite fait le code de cette fonction (fichier implicit_plot.lisp) et on trouve :

Code : Tout sélectionner

(format file "plot2d -data {~%")
Cette fonction n'utilise pas la méthode qui est utilisée classiquement pour représenter des fonctions définies implicitement avec Gnuplot.
Les coordonnées des points semblent calculées par maxima et pas par gnuplot.

En tout cas, je trouve le rendu pas génial. :mrgreen: