Mathc gnuplot/Fichiers pour gnuplot
Préambule
[modifier | modifier le wikicode]Quelques fonctions C à connaitre :
f_p=fopen("a.txt","w"); //(write) Créer un fichier en écriture.
f_p=fopen("a.txt","r"); //(read) 0uvrir un fichier en lecture.
f_p=fopen("a.txt","a"); //(append) 0uvrir un fichier en écriture.
// Rajouter le texte en fin de fichier.
printf( "%d",i); // Imprimer sur l'écran.
fprintf(f_p,"%d",i); // Imprimer dans le fichier *f_p
sprintf( s,"%d",i); // Imprimer dans la chaine de caractères s.
Éviter les lettres accentuées dans les fichiers sources (*.c,*.h), cela pose des problèmes pour échanger les fichiers entre Windows et Linux ou à l'international.
Premiers fichiers
[modifier | modifier le wikicode]Un fichier list.txt
[modifier | modifier le wikicode]- Copiez cet exemple dans votre éditeur.
- Sauvez-le sous le nom "c01.c"
- Compilez et exécutez-le.
gcc -lm c01.c -o c01.exe ;./c01.exe
- Éditer le fichier "list.txt"
c01.c Un fichier list.txt |
---|
/* ------------------------------ */
/* Save as c01.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(pow(x,2.));}
/* ------------------------------ */
int main(void)
{
FILE *fp; /*Déclarer un pointeur de fichier. */
double a;
/*Ouvrir le fichier en mode écriture.*/
fp = fopen("list.txt","w"); /*fp est un pointeur de fichier */
/*qui pointe sur "list.txt" */
for(a = -5.0; a <= 5.0; a++)
fprintf(fp," %6.3f %6.3f\n",/*Imprimer dans le fichier */
a, f(a));
fclose(fp); /*Fermer le fichier */
printf("\n\n Ouvrir le fichier list.txt "
"\n\n Press return to continue. ");
getchar();
return 0;}
Un fichier de données pour gnuplot
[modifier | modifier le wikicode]Nous ne mettrons pas d'extension pour les fichiers de données avec gnuplot.
- Compilez et exécutez-ce fichier.
- Éditez le fichier "data"
- Dans gnuplot tapez :
plot "data"
c02.c Un fichier de données pour gnuplot |
---|
/* ------------------------------ */
/* Save as c02.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(pow(x,2.));}
/* ------------------------------ */
int main(void)
{
FILE *fp = fopen("data","w");
double a = -5.0;
for(; a <= 5.0; a+=.2)
fprintf(fp," %6.3f %6.3f\n",a,f(a));
fclose(fp);
printf(" Dans gnuplot -> plot \"data\" \n\n"
" Press return to continue. \n\n");
getchar();
return 0;
}
Un fichier de commande pour gnuplot
[modifier | modifier le wikicode]L'extension des fichiers de commande de gnuplot est "*.plt" Ici on dessine deux chaines de caractères.
- Compilez et exécutez-ce fichier.
- Éditez le fichier "a_main.plt"
- Dans gnuplot tapez :
load "a_main.plt"
c03.c Un fichier de commande pour gnuplot |
---|
/* ------------------------------ */
/* Save as c03.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
char heq[] = "sin(x)";
char geq[] = "cos(x)";
/* ------------------------------ */
int main(void)
{
FILE *fp = fopen("a_main.plt","w");
fprintf(fp,"# Fichier de commande pour gnuplot \n"
"# En ligne de commande : load \"a_main.plt\"\n"
"#\n"
" set zeroaxis\n"
" plot %s,\\\n"
" %s \n\n"
" reset", geq, heq);
fclose(fp);
printf("\n\n load \"a_main.plt\" with gnuplot."
"\n\n Press return to continue. ");
getchar();
return 0;
}
Cela donne dans le fichier "a_main.plt" :
# Fichier de commande pour gnuplot
# En ligne de commande : load "a_main.plt"
#
set zeroaxis
plot cos(x),\
sin(x)
reset
On peut remarquer que chaque fonction est sur une ligne différente. Important si l'on veut dessiner quatre ou cinq fonctions.
Dessiner une liste et une chaîne de caractères
[modifier | modifier le wikicode]On associe les deux méthodes vues précédemment.
- Compilez et exécutez-ce fichier.
- Éditez le fichier "a_main.plt"
- Dans gnuplot tapez :
load "a_main.plt"
c04.c Dessiner une liste et une chaîne de caractères |
---|
/* ------------------------------ */
/* Save as c04.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(cos(x));}
/* ------------------------------ */
char feq[] = "cos(x)";
/* ------------------------------ */
int main(void)
{
FILE *fp;
double a = -5.0;
fp = fopen("data","w");
for(; a <= 5.0; a+=.2)
fprintf(fp," %6.3f %6.3f\n", a, f(a));
fclose(fp);
fp = fopen("a_main.plt","w");
fprintf(fp,"# Fichier de commande pour gnuplot \n"
"# En ligne de commande : load \"a_main.plt\"\n"
"#\n"
" set zeroaxis\n"
" plot \"data\",\\\n"
" %s\n"
" reset",feq);
fclose(fp);
printf("\n\n load \"a_main.plt\" with gnuplot."
"\n\n Press return to continue. ");
getchar();
return 0;
}
Cela donne dans le fichier "a_main.plt" :
# Fichier de commande pour gnuplot
# En ligne de commande : load "a_main.plt"
#
set zeroaxis
plot "data",\
cos(x)
reset
Une fonction graphique
[modifier | modifier le wikicode]On met simplement le contenu de la fonction main() dans G_plot().
- Compilez et exécutez-ce fichier..
- Éditez le fichier "a_main.plt"
- Dans gnuplot tapez :
load "a_main.plt"
c05.c Une fonction graphique |
---|
//* ------------------------------ */
/* Save as c05.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(cos(x));}
char feq[] = "cos(x)";
/* ------------------------------ */
int G_plot(void)
{
FILE *fp;
double a = -5.0;
fp = fopen("data","w");
for(; a <= 5.0; a+=.2)
fprintf(fp," %6.3f %6.3f\n",a,f(a));
fclose(fp);
fp = fopen("a_main.plt","w");
fprintf(fp,"# Fichier de commande pour gnuplot \n"
"# En ligne de commande : load \"a_main.plt\"\n"
"#\n"
" set zeroaxis\n"
" plot \"data\",\\\n"
" %s\n"
" reset",feq);
fclose(fp);
return 0;
}
/* ------------------------------ */
int main(void)
{
G_plot();
printf("\n\n load \"a_main.plt\" with gnuplot."
"\n\n Press return to continue. ");
getchar();
return 0;
}
Cela donne dans le fichier "a_main.plt" :
# Fichier de commande pour gnuplot
# En ligne de commande : load "a_main.plt"
#
set zeroaxis
plot "data",\
cos(x)
reset
Les ennuis commencent
[modifier | modifier le wikicode]À partir des fichiers précédents, essayer de dessiner la fonction g, sans modifier G_plot() ?
/* ------------------------------ */
double g(double x){return(sin(x));}
char geq[] = "sin(x)";
/* ------------------------------ */
Une solution va être proposée dans le chapitre suivant : Pointeurs de fonctions.
Conclusion
[modifier | modifier le wikicode]Nous avons dessiné des fonctions sous forme de chaînes de caractères et sous la forme de liste de points.
Un problème est apparu : rendre les fonctions graphiques indépendantes de la fonction utilisée.