/*************************************************************************************************************************************/
/* */
/* T E S T D E L A D E R I V A T I O N F O R M E L L E : */
/* */
/* */
/* Author of '$xtKg/derivees.11$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1992??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_MINI
#include xtKg/derivees.21.I"
#include xtKg/derivees.11.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define PRINT(titre,fonction,derivee_a_la_main,derivee_formelle) \
Bblock \
CAL2(Prin4("%-40s : Fonction=%#+14.^^^ Derivee (a la main)=%#+14.^^^ Derivee (formelle)=%#+14.^^^" \
,titre \
,fonction \
,derivee_a_la_main \
,derivee_formelle \
) \
); \
/* On notera l'utilisation de "%f" (et non pas de "%g" comme a l'habitude) a cause d'un bug */ \
/* explicite dans 'v $Dbugs/SGIND424$D/IRIX$D/CC$D/printf.01$c'. */ \
/* */ \
/* Le 20060106161256, le format "18f" est passe a "^^f" pour plus de souplesse... */ \
/* */ \
/* Le 20091123123707, le format "^^g" est passe a "^^^" pour plus de souplesse... */ \
Test(sfIFEQ(derivee_a_la_main,derivee_formelle)) \
/* On notera le remplacement le 20040424120543 de 'IFEQ(...)' par 'sfIFEQ(...)' a cause */ \
/* de '$LACT15' et du probleme 'v $Fcompilers 20040220103647'... */ \
Bblock \
CAL2(Prin0(" OK\n")); \
Eblock \
ATes \
Bblock \
CAL2(Prin0(" ERREUR\n")); \
Eblock \
ETes \
Eblock
#define TEST_DE_LA_DERIVATION_FORMELLE_DANS_C \
Bblock \
PRINT("d1 : fonction composee dans un '$K'" \
,Fonction_C(x4) \
,ADD2(MUL2(INVE(x4),d_x4),MUL2(NEUT(COSX(x4)),d_x4)) \
,d#Fonction_C(x4) \
); \
Eblock \
/* Test dans la derivation formelle dans le fichier principal '$K'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T E S T D E L A D E R I V A T I O N F O R M E L L E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Float,INIT(x1,FLOT(UN)));
DEFV(Float,INIT(d_x1,d_FVARIABLES_DE_DERIVATION));
DEFV(Float,INIT(x2,FLOT(DEUX)));
DEFV(Float,INIT(d_x2,d_FVARIABLES_DE_DERIVATION));
DEFV(Float,INIT(x3,FLOT(TROIS)));
DEFV(Float,INIT(d_x3,d_FVARIABLES_DE_DERIVATION));
DEFV(Float,INIT(x4,FLOT(QUATRE)));
DEFV(Float,INIT(d_x4,d_FVARIABLES_DE_DERIVATION));
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(VIDE;)
);
PRINT("d1 : somme de quatre termes"
,ADD4(x1,x2,x3,x4)
,ADD4(d_x1,d_x2,d_x3,d_x4)
,d#ADD4(x1,x2,x3,x4)
);
PRINT("d1 : produit de deux facteurs"
,MUL2(x1,x2)
,ADD2(MUL2(d_x1,x2),MUL2(x1,d_x2))
,d#MUL2(x1,x2)
);
PRINT("d2 : produit de deux facteurs"
,MUL2(x1,x2)
,d#ADD2(MUL2(d_x1,x2),MUL2(x1,d_x2))
,d#d#MUL2(x1,x2)
);
PRINT("d3 : produit de deux facteurs"
,MUL2(x1,x2)
,d#d#ADD2(MUL2(d_x1,x2),MUL2(x1,d_x2))
,d#d#d#MUL2(x1,x2)
);
PRINT("d4 : produit de deux facteurs"
,MUL2(x1,x2)
,d#d#d#ADD2(MUL2(d_x1,x2),MUL2(x1,d_x2))
,d#d#d#d#MUL2(x1,x2)
);
PRINT("d4 : produit de deux facteurs"
,MUL2(x1,x2)
,d#d#d#ADD2(MUL2(d_x1,x2),MUL2(x1,d_x2))
,d-{ORDRE4}-MUL2(x1,x2)
);
PRINT("d1 : produit de trois facteurs"
,MUL3(x1,x2,x3)
,ADD2(MUL2(ADD2(MUL2(d_x1,x2),MUL2(x1,d_x2)),x3),MUL2(MUL2(x1,x2),d_x3))
,d#MUL3(x1,x2,x3)
);
PRINT("d1 : quotient"
,DIVI(x1,x2)
,DIVI(SOUS(MUL2(d_x1,x2),MUL2(x1,d_x2)),EXP2(x2))
,d#DIVI(x1,x2)
);
PRINT("d1 : puissance troisieme"
,EXP3(x1)
,MUL3(TROIS,EXP2(x1),d_x1)
,d#EXP3(x1)
);
PRINT("d1 : puissance quatrieme"
,EXP4(x3)
,MUL3(QUATRE,EXP3(x3),d_x3)
,d#PUIX(x3,QUATRE)
);
PRINT("d1 : exponentielle"
,EXPX(x3)
,EXPX(x3)
,d#EXPX(x3)
);
PRINT("d1 : racine carree"
,RACX(x4)
,MUL2(INVE(GRO2(RACX(x4))),d_x4)
,d#RACX(x4)
);
PRINT("d1 : logarithme neperien"
,LOGX(x4)
,MUL2(INVE(x4),d_x4)
,d#LOGX(x4)
);
PRINT("d1 : logarithme decimal"
,LO1X(x4)
,MUL2(DIVI(INVE(x4),LOGX(FLOT(DIX))),d_x4)
,d#LO1X(x4)
);
PRINT("d1 : exponentielle generalisee"
,PUIX(x2,x4)
,MUL2(PUIX(x2,x4),ADD2(MUL2(d_x4,LOGX(x2)),MUL2(x4,DIVI(d_x2,x2))))
,d#PUIX(x2,x4)
);
PRINT("d1 : cosinus"
,COSX(x1)
,MUL2(NEGA(SINX(x1)),d_x1)
,d#COSX(x1)
);
PRINT("d1 : sinus"
,SINX(x1)
,MUL2(NEUT(COSX(x1)),d_x1)
,d#SINX(x1)
);
PRINT("d1 : cosinus conditionnel"
,COSX(x1)
,MUL2(NEGA(SINX(x1)),d_x1)
,d#COND(TOUJOURS_VRAI,COSX(x1),SINX(x1))
);
PRINT("d1 : sinus conditionnel"
,SINX(x1)
,MUL2(NEUT(COSX(x1)),d_x1)
,d#COND(TOUJOURS_FAUX,COSX(x1),SINX(x1))
);
PRINT("d1 : fonction composee dans un '$K'"
,Fonction_C(x4)
,ADD2(MUL2(INVE(x4),d_x4),MUL2(NEUT(COSX(x4)),d_x4))
,d#Fonction_C(x4)
);
TEST_DE_LA_DERIVATION_FORMELLE_DANS_C;
#include xtKg/derivees.12.I"
TEST_DE_LA_DERIVATION_FORMELLE_DANS_I(ORDRE2);
PRINT("d1 : derivee premiere"
,Fonction_0(x2)
,MUL2(INVE(x2),d_x2)
,Fonction_1(x2)
);
CAL2(Prin0("\n"));
RETU_Commande;
Eblock
ECommande