/*************************************************************************************************************************************/ /* */ /* 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