1. 这个东西不叫“错”,叫“警告信息”,至于为什么跳这个警告,警告信息里已经说得很清楚了:Reduce不会算。
1.5 不要一看到警告信息就六神无主,仔细看警告上写了什么。
2. Assuming在你的代码里没起任何作用,它只会影响拥有Assumptions选项并且选项默认值为$Assumptions全局变量的函数,而Reduce没这个选项。
3. 即使把代码改成
Reduce[{f[x] > 0, a > 0 && a != 1 && a \[Element] Reals && x \[Element] Reals}, x]
Reduce也依旧算不了,但是改成
mid = Reduce[{f[x] > 0}, x, Reals]
Reduce[{mid, a > 0 && a != 1 && a \[Element] Reals && x \[Element] Reals}]
(* (-(1/2) < x < 0 && 0 < a < 1) || (0 < x < 1/2 && a > 1) *)
它却又行了,理由嘛,我也不知道——这类超级符号计算函数的实现细节大概也是Mathematica里最机密的部分了。啊?你问我怎么猜到这样就能算了?这个嘛,没啥诀窍,就是多尝试——当然了,用得多了之后,多少会对Reduce的可求解范围产生一点模糊的感觉。