Représenter une surface façon Bac ES avec Gnuplot

Cette page n'est qu'une n'est qu'un bilan de mes recherches, elle ne prétend pas donner les meilleures solutions aux questions que je me pose.




Il s'agit de représenter la fonction f:(x,y)→ 3xy/(x+y) avec x dans [0;10] et y dans [0;12].

On veut les lignes de niveau correspondant à z=0, 2, 4… 18. et le point A(6;12/7;4)

En fait, j'ai un peu triché puisque j'ai créé deux graphiques et je les ai fondu avec Gimp.

Je me suis inspiré du code fourni par l'excellent logiciel PSTplus disponible ici pour résoudre plusieurs problémes. Je ferai bientôt une rubrique consacrée à ce logiciel.

Première réponse

première image

Je l'ai obtenue avec le script suivant :

set encoding iso_8859_1
set term png size 400,400
set output 'ima.png'
set border  116 #lt -1 lw 1.000
set size square 1.4,1.4
f(x,y)=3*x*y/(x+y)
set xrange[0:10]
set yrange[0:12]
set zrange[0:18]
set xtics 0,1,10
set ytics 0,1,12
set ztics 0,2,18
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
unset key
set ticslevel 0
set view 60,320,1,1
unset surface
set samples 200, 200
#on fait les calculs avec 100 valeurs de x et 120 de y:
set isosamples 100, 120
set grid  xtics lt 1 lw 1
set grid  ytics lt 1 lw 1
set grid  ztics lt 1 lw 1
set pm3d  at s 
set noclabel
#lignes de niveau
set contour surface
set cntrparam levels incremental 0,2,18
#création d'une palette: 
set palette rgbformulae 10,13,33 
#on discrétise la palette:
set palette maxcolors 9
#création de la boite origine (10%;7%) taille (60%;4%)
set colorbox horiz user origin .1,.07 size 0.6,0.04
splot f(x,y)

deuxième image

Je l'ai obtenue avec le script suivant :

set term png size 400,400
set output 'imb.png'
unset border
set size square 1.4,1.4
f(x,y)=3*x*y/(x+y)
set xrange[0:10]
set yrange[0:12]
set zrange[0:18]
unset key
set ticslevel 0
unset xtics
unset ytics
unset ztics
set view 60,320,1,1
set samples 100,100
#11 lines pour les x (de 0 à 10), 13 pour les y
set isosamples 11, 13
set noclabel
set label "A" at 6+0.5,1.71+0.1,4+0.5 front
splot  f(x,y) lt -1 lw 2 ,"-" notitle with points 28 
       6 1.714 4

fusion des deux images

  1. Ouvrir la première image avec Gimp
  2. La passer en mode RVB (Image>mode>RVB )
  3. Ouvrir la deuxième comme un calque (Fichier>ouvrir comme un calque)
  4. Ouvrir la boite de dialogue pour les calques (Dialogues>créer une nouvelle fenêtre>calques, canaux et chemins)
  5. Passer en mode noircir seulement

Deuxième réponse

En une seule fois grâce à multiplot mais la surface est transparente et j'ai été obligé de supprimer les grilles des x et des y.



Je l'ai obtenue avec le script suivant :

set encoding iso_8859_1
set term png size 400,400
set output 'imc.png'
set border  116 #lt -1 lw 1.000
set size square 1.4,1.4
f(x,y)=3*x*y/(x+y)
set xrange[0:10]
set yrange[0:12]
set zrange[0:18]
set xtics 0,1,10
set ytics 0,1,12
set ztics 0,2,18
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
unset key
set ticslevel 0
set view 60,320,1,1
set samples 200, 200
set grid  ztics lt 5 lw 1
set noclabel
set hidden3d#ne marche pas
#lignes de niveau
set contour surface
set cntrparam levels incremental 0,2,18
set palette rgbformulae 10,13,33 
set palette maxcolors 9
set colorbox horiz user origin .1,.07 size 0.6,0.04
#####
set multiplot
#####
set pm3d  at s 
set isosamples 100, 120
splot f(x,y) with pm3d
#####
unset pm3d
set isosamples 10, 12
splot f(x,y) lt -1 lw 2
######
 unset multiplot        
#####

Si vous connaissez un moyen d'améliorer ce script, écrivez moi