Le calcul formel est le calcul qui porte sur des expressions mathématiques formalisées. Il est actuellement mis en oeuvre dans des outils spécialisés pour les mathématiciens (Mathematica, Maple,...).
Ce calcul utilise la sérialisabilité des formules mathématiques, c'est à dire le fait qu'elles sont exprimables sous la forme suite de caractères formant une expression bien parenthésée dans un langage défini.+ |
• |
^ |
e |
^ |
x |
||
2 |
|||
log |
x |
||
^ |
log |
x |
|
3 |
d(U+V,X,DU+DV) :- d(U,X,DU),d(V,X,DV).Puis les principaux cas particuliers seront exprimés.
d(U-V,X,DU-DV) :- d(U,X,DU),d(V,X,DV).
d(U*V,X,DU*V+U*DV) :- d(U,X,DU),d(V,X,DV)
d(U^N,X,DU*N*U^N1) :- integer(N),N1 is N-1,d(U,X,DU).
d(exp(U),X,exp(U)*DU) :- d(U,X,DU).
d(log(U),X,DU/U) :- d(U,X,DU).
d(X,X,1).
d(C,X,0).
La dernière règle exprime que la dérivée d'une constante est nulle. Chargez donc cette base de règles, et essayez de dériver l'expression donnée plus haut: que constatez vous?
Il est nécessaire à ce stade de s'attarder un peu sur deux prédicats particuliers en Prolog: le "cut" et la négation. C'est l'objet de ce complément de cours.
Il faudrait parvenir à exprimer que la constante ne
dépend pas de X, ce qui est compliqué, pour ne pas dire
impossible. Une
autre solution serait que cette règle ne soit atteinte que si
aucune
autre unification n'a été trouvée. Plus
précisément, dès qu'une unification est
trouvée, on coupe les autres alternatives.
Modifiez les règles précédentes pour obtenir ce
résultat.
Que se passe-t-il si on donne à cette base un quotient à
dériver?
Ajouter la règle nécessaire à corriger cette
situation.
Mais il n'en est pas de même pour la règle d(U^N,X,DU*N*U^N1)
:- integer(N),N1 is N-1,!,d(U,X,DU). à cause de
l'opérateur d'affectation et du test de type.
Comment caractériser les cas où cette règle
fonctionne aussi bien dans un sens que dans l'autre?
Même question pour les autres règles.