问题描述
当我向Maxima询问
的价值时diff(integrate(f(y),y,x),x);
然后它正确地推导出这个表达式是 f(x)。但是,如果我稍微将表达式修改为
diff(integrate(f(y)^(1/2),x);
然后 Maxima 询问 x 是正数、零还是负数。回答肯定或否定会导致 f(x)^(1/2) 的正确且相同的结果。回答 0 会产生错误,因为由常数导出的定义不明确。
这是Maxima的限制还是有没有办法让Maxima在不要求x的符号的情况下得到正确的结果?
我有 5.41.0 版的 Maxima,并且正在通过 wxMaxima 的 18.02.0 版使用它。
解决方法
看起来问题来自integrate
,而不是diff
:
(%i2) integrate (f(y),y,x);
x
/
[
(%o2) I f(y) dy
]
/
0
(%i3) integrate (sqrt(f(y)),x);
Is x positive,negative or zero?
p;
x
/
[
(%o3) I sqrt(f(y)) dy
]
/
0
(%i4) integrate (sqrt(f(y)),negative or zero?
n;
0
/
[
(%o4) - I sqrt(f(y)) dy
]
/
x
重新排序积分限制是可以的,虽然可能没有必要,而且 %i2 和 %i3 之间是不一致的。我想这是一个错误。
之后,diff
有预期的效果:
(%i5) diff (%o2,x);
(%o5) f(x)
(%i6) diff (%o3,x);
(%o6) sqrt(f(x))
(%i7) diff (%o4,x);
(%o7) sqrt(f(x))
您可以通过告诉 Maxima x
是大于还是小于零来抑制问题。我不知道这对于您要解决的问题是否有意义。
(%i8) assume (x > 0);
(%o8) [x > 0]
(%i9) integrate (sqrt(f(y)),x);
x
/
[
(%o9) I sqrt(f(y)) dy
]
/
0
(%i10) diff (%,x);
(%o10) sqrt(f(x))