我是Prolog的新手,需要为微积分课程编写一个符号微分工具。我已经使其按照以下方式运行:
?- diff(ln(x^3),D).
D = 1*3*x^(3-1) / x^3 ;
并且:
?- diff(x*x*x*x,D).
D = x*x*x*1+x*(x*x*1+x*(x*1+x*1)).
虽然这种方法可行,但我更愿意改成这样:
D = 3x^(-2) / x^3;
并且:
D = 4x^(3);
有没有一种简单的方法来简化这些数学表达式。谢谢!
我是Prolog的新手,需要为微积分课程编写一个符号微分工具。我已经使其按照以下方式运行:
?- diff(ln(x^3),D).
D = 1*3*x^(3-1) / x^3 ;
并且:
?- diff(x*x*x*x,D).
D = x*x*x*1+x*(x*x*1+x*(x*1+x*1)).
虽然这种方法可行,但我更愿意改成这样:
D = 3x^(-2) / x^3;
并且:
D = 4x^(3);
你可以在编译时使用goal_expansion/2
来实现这个功能:
goal_expansion(+, -).
例子:
goal_expansion(X,Y):-simplify(X,Y).
simp(1*X, X)
。你可以使用number(X)
,如果X
是一个数字,则成功。所以simp(X*Y, Z) :- number(X), number(Y), Z is X*Y.
等等。 - lurkerD = 1*3*x^(3-1) / x^3
is different fromD = 3x^(-2) / x^3
. Should beD = 3x^(2) / x^3
- Rafalon