Mathc gnuplot/Application : Fonction Heaviside
La fonction Heaviside dans Wikipedia.
Préambule
modifierLa fonction Heaviside
modifier
Présentation
modifierVoici une possibilité pour la déclaration de la fonction Heaviside.
/* ------------------------------------ */
double H(
double x)
{
if(x>0.)return(1.);
else return(0.);
}
/* ------------------------------------ */
N'oubliez pas les fichiers *.h partagés et ceux de ce chapitre.
c01.c La fonction |
---|
/* ------------------------------------ */
/* Save as : c01.c */
/* ------------------------------------ */
#include "x_ahfile.h"
/* ------------------------------------ */
int main(void)
{
printf(" H : if(x>0) 1 else 0 \n");
G_plot(i_WGnuplot(-2.,20.,-1.,2.),
i_time(-2.,20.,0.001),
H);
printf("\n load \"a_main.plt\" with gnuplot."
"\n Press return to continue ");
getchar();
return 0;
}
Une application
modifierNous allons simplement appeler la fonction Heaviside dans une boucle for.
Pour obtenir une somme : Sum((-1)^n*H(x-n),n=0..20)
c02.c Une application |
---|
/* ------------------------------------ */
/* Save as : c02.c */
/* ------------------------------------ */
#include "x_ahfile.h"
/* ------------------------------------ */
double v(
double x)
{
double n=0, r=0;
for(;n<20;++n) r += pow(-1,n)*H(x-n);
return(r);
}
char veq[] = "Sum((-1)^n*H(x-n),n=0..20)";
/* ------------------------------------ */
int main(void)
{
printf(" H : if(x>0) 1 else 0 \n\n"
" v : x-> %s \n\n",veq);
G_plot(i_WGnuplot(-2.,20.,-1.,2.),
i_time(-2.,20.,0.001),
v);
printf("\n\n load \"a_main.plt\" with gnuplot."
"\n\n Press return to continue ");
getchar();
return 0;
}
Résultat dans gnuplot |
---|
Les fichiers h de ce chapitre
modifierx_ahfile.h Appel des fichiers |
---|
/* Save as : x_ahfile.h */
/* ------------------------------------ */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include <math.h>
#include <string.h>
/* ------------------------------------ */
#include "xdef.h"
#include "xplt.h"
/* ------------------------------------ */
#include "fh.h"
#include "g_f.h"
fh.h La fonction Heaviside |
---|
/* ------------------------------------ */
/* Save as : fh.h */
/* ------------------------------------ */
double H(
double x)
{
if(x>0.)return(1.);
else return(0.);
}
/* ------------------------------------ */
g_f.h La fonction graphique |
---|
/* ------------------------------------ */
/* Save as : g_f.h */
/* ------------------------------------ */
void G_plot(
W_Ctrl W,
t_Ctrl T,
double (*P_f1)(double x)
)
{
FILE *fp;
double t;
fp = fopen("a_main.plt","w");
fprintf(fp,"# Gnuplot file : load \"a_main.plt\" \n\n"
" set zeroaxis lt 8\n"
" set grid\n"
" plot [%0.3f:%0.3f] [%0.3f:%0.3f] \\\n"
" \"data\" with line lt 3\n"
" reset",
W.xmini,W.xmaxi,W.ymini,W.ymaxi);
fclose(fp);
fp = fopen("data","w");
for(t=T.mini; t<=T.maxi; t+=T.step)
fprintf(fp," %6.3f %6.3f\n",t,(*P_f1)(t));
fclose(fp);
}
Conclusion
modifierCertains résultats sont vraiment surprenants en associant la fonction heaviside et la fonction sinus.