Что значит // в Mathematica? - PullRequest
1 голос
/ 04 мая 2011

Примеры:

  • В

    CT = Table[Prepend[10^4*x[range2] /.
         NDSolve[{...series of equations here...}, {t, range1, range2}, 
            MaxSteps -> 10000,
            PrecisionGoal -> 11], delay], 
            {delay, delaymin, delaymax, 0.1}]; // Timing
    

что это значит // Timing после точки с запятой?

  • В

    Dρ = -I*((H0 + V).ρ - ρ.(H0 + V)) - Γ*ρ // Simplify;
    

А это // Simplify здесь?

Я не могу найти это объяснение нигде!

Заранее спасибо, Тьяго

Ответы [ 7 ]

3 голосов
/ 04 мая 2011

Да, argument // function - это приложение с постфиксной функцией.

Полезно то, что он имеет другую, более низкую мощность привязки по сравнению с префиксным приложением (f @ x).

На самом деле он ниже, чем большинство других вещей (кроме исключений CompoundExpression ; и Set =), и поэтому его часто можно рассматривать как «применимый ко всему до этого».

3 голосов
/ 04 мая 2011

Вы говорите: «Я не могу найти это объяснение нигде!». Я предполагаю, что это означает, что вы не знаете о центре документации, который находится у вас под рукой, когда вы используете Mathematica.

Все, что вам нужно сделать, это навести курсор на // и нажать F1, и вы получите какое-то объяснение или список с соответствующими (надеюсь) совпадениями. В этом случае страница PostFix, которая не очень полезна. Тем не менее, он имеет несколько ссылок внизу (при условии, что у вас есть версии 6, 7 или 8), которые обеспечивают более глубокое понимание, среди которых ссылка на страницу обзора синтаксиса (щелкните ссылку синтаксиса Mathematica или введите «guide / Syntax» в окно поиска).

3 голосов
/ 04 мая 2011

Это запись Mathematica . В основном x // f - это то же самое, что и f [x]

2 голосов
/ 04 мая 2011

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

Три выражения

Sin[x]
Sin@x
x // Sin

эквивалентны.

Хотя, насколько мне известно, последние два нельзя использовать с функциями с более чем одним аргументом. Итак

Plot[Sin[x], {x, 0, Pi}]   

Нельзя вызывать в префиксной или постфиксной нотации без таких хитростей, как

Sin[x] // Plot[#, {x, 0, Pi}] &  

или

Plot[#, {x, 0, Pi}] &@Sin[x]

Префиксная нотация обычно видна при использовании простых функций, таких как Sin@x или Sort@list, в то время как большинство применений постфикса включают рассуждения типа «и теперь делайте все, что с этой вещью, которую я получил», например

(Sin@x+ ...) // Timing

где вы решили, что рассчитывать, а затем вы также хотите, чтобы он рассчитывался.

Еще одна заметка:

Действительно, за кадром гораздо больше, поскольку приоритет каждой из этих функциональных конструкций различен, но я думаю, что это гораздо более глубокий вопрос, и вам придется немного поэкспериментировать, прежде чем переходить к тонкостям.

2 голосов
/ 04 мая 2011

Как уже упоминалось, // является постфиксной нотацией, а expr//f означает f[expr] в mathematica и f(expr) в математике.

Несмотря на то, что здесь может быть задействовано больше тонкостей, мое использование // часто было в случаях, когда я начинал писать выражение, а затем осознавал, что хочу использовать для него функцию. Поэтому вместо того, чтобы переместить курсор полностью назад к типу f@expr или f[expr], я могу просто закончить набирать то, что имел в виду, и использовать expr//f.

Пример:

Plot[Sin[x],{x,0,Pi}]
%//Export["test.pdf",#]&

Графика передается в функцию экспорта и сохраняется как test.pdf.

2 голосов
/ 04 мая 2011
a // f

я считаю, что то же самое, что и

f[a]

(что, кстати, любой здравомыслящий математик, которого я знаю, написал бы как

f(a)

так же, как это делается на большинстве компьютерных языков.)

2 голосов
/ 04 мая 2011

expr // f по существу эквивалентно f[expr].Иногда это называется постфиксной нотацией.Я читаю expr // f как «передать выражение expr в функцию f».

...