Что означает True в этом выводе Wolfram?

Вот простой вычисление WolframCloud:

введите здесь описание изображения

Ответ равен 1, когда 0 ‹ x ‹ 1 равно True, и 0, когда 0 ‹ x ‹ 1 равно False. Так почему же в выводе True ассоциируется с 0?

(В WolframAlpha выполнение Limit[Boole[0<x<1] (1 + 1/a) ,a->Infinity] отображает правильный ответ, т. е. Boole[0<x<1], но странный результат по-прежнему обнаруживается, когда вы нажимаете «Открыть код».)

РЕДАКТИРОВАТЬ: альтернативная форма, которая дает тот же результат,

f[x_,a_]:=Boole[0<x<1] (1 + 1/a)
Limit[f[x,a],a->Infinity]

Вывод должен быть Boole[0<x<1], но вместо этого странность связана с True.


person r.e.s.    schedule 31.08.2018    source источник


Ответы (3)


Кажется, где ошибка в песочнице WolframAlpha - она, вероятно, не может сделать вывод, что ваше проанализированное выражение Boole[0 < x < 1] не зависит от расчета предела и, следовательно, вычисляется неправильно. Чтобы получить правильные результаты, поставьте булеву функцию перед limit:

Boole[0 < x < 1] Limit[(1 + a^(-1)), a -> Infinity]

Кстати, WolframAlpha онлайн-расчет показывает правильный ответ

person Agnius Vasiliauskas    schedule 31.08.2018
comment
К сожалению, странность, связанная с True, возникает также и с более сложными кусочными функциями, определенными с использованием Boole[], для которых часть Boole[] не может быть вынесена за скобки. Кроме того, хотя WolframAlpha не отображает его сразу, это происходит в языке Wolfram (отображается, когда вы нажимаете кнопку Открыть код). - person r.e.s.; 31.08.2018
comment
У меня нутром чую, что просто есть баг, что использовали не то чтобы постоянное (True, а не False). Потому что структура вывода ответа такова, что 0 часть соответствует otherwise части. Это должно быть False, потому что в булевом случае не может быть двух ветвей True. Так что просто тупой баг - person Agnius Vasiliauskas; 31.08.2018
comment
Оказывается, это не ошибка, а стандартный стиль вывода Wolfram для кусочных функций. (См. мой ответ.) - person r.e.s.; 05.09.2018

В вашем выражении мало смысла. Это не уравнение, и x не определено. что вы пытаетесь вычислить?

Boole[expr]  (* yields 1 if expr is True and 0 if it is False. *)
Limit[expr,x->Subscript[x, 0]]  (* finds the limiting value of expr when x approaches Subscript[x, 0]. *)

Таким образом, Boole[0<x<1] всегда будет давать 1 или 0 и не зависит от a. Однако Limit[1+1/a, a-> Infinity] не зависит от x и всегда будет давать 1.

Упрощая это выражение, вы получаете n * 1, где n принадлежит [0,1] и полностью зависит от x.

Я предполагаю, что ваш ввод сбивает с толку Mathematica, отсюда и странный вывод. кстати. на рабочем столе Mathematica вывод

Boole[0 < x < 1]

Показывая, что значение выражения полностью зависит от x, как я описал выше..

person Eriks Klotins    schedule 31.08.2018

Хотя на первый взгляд это кажется довольно странным (или, действительно, ошибкой), в языке Wolfram это стандартное использование True в выводе кусочно, где он имеет значение "иначе" (когда все остальные перечисленные условия, которые должны оцениваться по порядку, имеют значение False).

Другими словами, такое выходное выражение следует понимать как список пар {значение, условие}, результатом которого является первое указанное значение, условие которого истинно, как в следующих примерах:

введите здесь описание изображения

person r.e.s.    schedule 05.09.2018