#  execution de desir en batch sous unix
$rexec/reduce >& desir.log << EOF         # appel de reduce
write "load desir;                    %chargement de DESIR";
load desir;                    %chargement de DESIR
write "Premier exemple : utilisation interactive sur une equation simple";
write "desir();                       %appel de DESIR";
desir();
3;                             %ordre de l'equation
1;x;x;x**6;                    %coefficients 
non;                           %correction ?
non;                           %transformation ?
4;                             %nombre de termes a calculer
non;                           %transformation ?
write "solvalide(first ws,1,4);";
solvalide(first ws,1,4);

write "Le meme exemple en utilisation directe";
write "lcoeff:={1,x,x,x**6};";
lcoeff:={1,x,x,x**6};
write "param:={};";
param:={};
write "on trdesir;                    %obtention facultative d'une trace"; 
on trdesir;
showtime;
write "sol:=delire(x,4,1,lcoeff,param);";
sol:=delire(x,4,1,lcoeff,param);
write "showtime;                      %temps d'execution de 'delire'";
showtime;
on div;j:=0\$
for each elt in sol do
    <<j:=j+1;write j,"ieme solution :", sorsol(elt);>>;
write "solvalide({lcoeff,sol},2,4)\$";
solvalide({lcoeff,sol},3,4)\$
write "solvalide({lcoeff,sol},3,4)\$";
solvalide({lcoeff,sol},3,4)\$
off div;
write "off trdesir;";
off trdesir;

write "Deuxieme exemple : utilisation interactive, parametres et"; 
write "transformations";
write "desir();";
desir();
2;                             %ordre de l'equation
x**2-nu**2;x;x**2;             %coefficients 
non;                           %correction ?
1;                             %nombre de parametres
nu;                            %nom du parametre  
non;                           %transformation ?
2;                             %nombre de termes a calculer
oui;                           %transformation ?
2;                             %changement de variable
1/v;                           %x=1/v
non;                           %transformation ?
2;                             %nombre de termes a calculer
non\$                          %transformation ?       
sol:=ws\$
write "sol1:=first sol\$              %solutions au voisinage de 0";
sol1:=first sol\$              %solutions au voisinage de 0
write "sol2:=second sol\$             %solutions au voisinage de l'infini";
sol2:=second sol\$             %solutions au voisinage de l'infini
write "solvalide(sol1,1,2)\$"; 
solvalide(sol1,1,2)\$          %presence de solutions conditionnelles
write "solvalide(sol2,1,2)\$";
solvalide(sol2,1,2)\$          %la verification de la validite des solutions
                               %au voisinage de l'infini est possible malgre
                               %le parametre (pas de condition).
write "Remarque : la verification de la validite des solutions est possible"; 
write "malgre la presence d'un parametre (pas de condition).";
write "standsol(sol1);                %=sol1...sans interet!";
standsol(sol1);                %=sol1... 
write "standsol(sol2);         %solutions retournees sous forme standard";
standsol(sol2);
write "Pour revoir les solutions au voisinage de 0 :";
j:=0\$
write "for each elt in second sol1 do"; 
write "          <<j:=j+1;write j,'ieme solution';sorsol(elt);>>;"; 
for each elt in second sol1 do 
          <<j:=j+1;write j,"ieme solution";sorsol(elt);>>;  
write "Evaluation des solutions au voisinage de 0 pour une valeur";
write "particuliere du parametre :";
write "sorparam(sol1,{nu});    %evaluation des solutions au voisinage de 0";
write "                        %pour une valeur particuliere du parametre";
write "                        %nu = 1";
write "                        %ecriture et retour des solutions sous forme"; 
write "                        %standard";
sorparam(sol1,{nu});           %evaluation des solutions au voisinage de 0
                               %pour une valeur particuliere du parametre
1;                             %valeur de nu
                               %ecriture et retour des solutions sous forme 
                               %standard
write "solparam(sol1,{nu},{1});";      
solparam(sol1,{nu},{1});       %meme fonction avec retour des solutions sous
                               %forme generalisee, ce qui permet d'enchainer
write "Meme fonction avec retour des solutions sous forme generalisee,";
write "ce qui permet d'enchainer :";
write "solvalide(ws,1,2)\$";
solvalide(ws,1,2)\$

write "L'exemple suivant a ete cree specialement pour tester l'algorithme";
write "et utiliser un grand nombre de procedures :";
lcoeff:={x+1,2*x**2*(x+1),x**4,(5*x**7)/2,x**10};
param:={};
showtime;
write "sol:=delire(x,4,1,lcoeff,param);";
sol:=delire(x,4,1,lcoeff,param)\$
showtime;
on div;j:=0\$
for each elt in sol do
    <<j:=j+1;write j,"ieme solution :", sorsol(elt);>>;
solvalide({lcoeff,sol},1,4)\$
solvalide({lcoeff,sol},3,4)\$
off div;

bye;
EOF
