s o m e t h i n g a b o u t m e

prolog derivate

derivative(X,X,1) :- !.
derivative(C,X,0) :- atomic(C), !.
% (u + v)' = u' + v'
derivative(F+G,X,Fd+Gd) :-  !,
				derivative(F,X,Fd),
				derivative(G,X,Gd).
% (u * v)' = u' * v + u * v'
derivative(F*G,X,F*Gd+G*Fd) :- !,
				derivative(F,X,Fd),
				derivative(G,X,Gd).
% (u^v)' = u^v * (log u * v + u' * u^(-v))
derivative(F^G,X,F^G*(log(F)*Gd+Fd*F^(-1)*G)) :- !,
						derivative(F,X,Fd),
						derivative(G,X,Gd).

и так далее, например, для сложной функции -

derivative(cos(W),X,-sin(W)*Z) :- derivative(W,X,Z).

пример вызова:

?- derivative(cos(3x+5),x,D).

только все же непонятно, зачем там отсечение - наверное подразумевается, что при падении одного из предикатов дифференциирования падает весь комплексный предикат

RSS feed | Trackback URI

2 Comments »

Comment by non-spammer's_nick
2007-05-30 23:58:35

вроде понятно для х, константы, суммы\произведения\степени. а косинусы как считаются?

Comment by Traut
2007-05-31 00:29:35

да так же :) фича в том, что универсального правила лдя функции типа f1(f2(x)) и нет. нужно задавать правила для нужных - как я, например, для косинуса задал

на самом деле так и делается, судя по google.com/codesearch

 
 
Name (required)
E-mail (required - never shown publicly)
URI
Subscribe to comments via email
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.