0

У меня есть следующая проблема. Определяя две простые функции в Mathematica, скажем, foo[x_]:= x и bar[y_]:=y, я ожидал бы, что выражение foo[x]^(-bar[y])-(1/foo[x])^(bar[y]) будет оценено до нуля. Тем не менее, я нахожу (странно), что Mathematica настаивает скорее на том, чтобы сохранить эту вещь «символическим образом», не желая упрощать вообще. Пробовал много вещей, чтобы преодолеть это поведение, но все они потерпели неудачу. Любая помощь очень ценится :)упрощение символьного выражения в Mathematica

ответ

0

Вы должны сказать Mathematica, что х> 0:

Simplify[foo[x]^(-bar[y]) - (1/foo[x])^(bar[y]), x > 0] 

0 
+0

'Foo [х]^(- бар [у]) - (1/Foo [х])^(bar [y]) /. {y -> 1/2, x -> -1/2} ' – ssch

+0

Да, хорошо, но это не очень общее решение. Например, почему он работает для 'x> 0', но это не так, если я принимаю' x <0'? В более общем плане, если у меня есть очень сложная функция, я бы не хотел тратить время на все возможные комбинации предположений. Пытаясь использовать другие глупые примеры (например, a^(- b) * c^(b)), вы скоро поймете (снова), что для того, чтобы получить ожидаемое поведение, вам нужно принять что-то очень конкретное. Почему это? Есть ли (более общий) способ «обеспечить» то, что просто означает разум? –

+0

Это потому, что упрощение для x <0 недействительно в общих терминах. Mathematica это знает, и без значения или предположения только упрощается все, что разрешено большинством общих правил. – FJRA