Что означает # в Mathematica? - PullRequest
16 голосов
/ 25 ноября 2010

Кто-нибудь знает, что, например, # означает Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1] в Mathematica?

Тогда что именно означает Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]?

Спасибо.

Ответы [ 4 ]

32 голосов
/ 25 ноября 2010

Это заполнитель для переменной.

Если вы хотите определить функцию ay (x) = x ^ 2, вы можете просто сделать:

  f = #^2 & 

& "закачивает" переменную в знак #.Это важно для сопряжения & и #, когда у вас есть вложенные функции.

  In: f[2]  
  Out: 4   

Если у вас есть функция, работающая с двумя переменными, вы можете сделать:

 f = #1 + #2 &

Итак

  In: f[3,4]  
  Out: 7  

Или у вас может быть функция, работающая всписок, так:

 f = #[[1]] + #[[2]] &

Итак:

  In: f[{3,4}]
  Out: 7

О Root[]

Согласно справке Mathematica:

Root[f,k] represents the exact kth root of the polynomial equation f[x]==0  .

Итак, если ваш поли равен x^2 - 1, используя то, что мы видели выше:

        f = #^2 - 1 &

In[4]:= Root[f, 1]  

Out[4]= -1  (* as we expected ! *)

И

In[5]:= Root[f, 2]  

Out[5]= 1  (* Thanks God ! *)

Но если мы попробуем с полиномом более высокого порядка:

         f = -1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &  

In[6]:= Root[f, 1]

Out[6]= Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]

Это означает, что Mathematica не знает, как рассчитать символический результат.Это просто первый корень многочлена.Но он знает, каково его числовое значение:

In[7]:= N@Root[-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]

Out[7]= -2.13224

Итак, Root[f,k] - это своего рода стенографическое письмо для корней многочленов с порядком> 3. Я избавляю вас от объяснения радикалов и нахождения полиномакорни ... к лучшему я думаю

10 голосов
/ 25 ноября 2010

Как узнать, что означает любой встроенный синтаксис в Mathematica:

  1. Копировать выражение
  2. Do TreeForm [Удерживать [вставить выражение здесь]].
  3. Наведите курсор мыши на части дерева, чтобы определить синтаксис, в данном случае Slot
  4. Введите "? Slot"
7 голосов
/ 22 сентября 2011

Обозначение # (как указано выше) используется для обозначения «переменная идет здесь» в чистой функции («замыкание» для вас, традиционных разработчиков).В конце всегда должно следовать &.

Лучший пример: f[x_]:=x+5.Это создает задержанный набор, который каждый раз, когда значение передается в символьную ссылку f в качестве функционального параметра, этому значению будет присвоено локальное контекстно-зависимое имя функции x (не влияющее на глобальное определение * 1008).*, если есть).Затем выражение x+5 будет оценено с использованием этой новой переменной / значения.Приведенный выше процесс требует инициализации символа f, создания локальной переменной x и сохранения в памяти выражения x+5, если вы не очистите его.

Примечание: f=5 и f[x_]:=5 оба работают с символом f.f можно назвать функцией, когда квадратные скобки используются для извлечения его значения, а f[x_] может мирно сосуществовать с f[x_,y_], не перекрывая друг друга.Один будет использоваться при отправке одного параметра, а другой - при отправке двух параметров.

Иногда вам просто нужна быстрая функция, и вам не нужно определять ее и оставлять в подвешенном состоянии.Итак, (someValue + 5) становится (#+5)&, где & говорит: «Я - чистая функция, и буду работать с тем, что вы мне отправляете», а # - «Я - параметр (или список параметров)».это было отправлено в чистую функцию ".Вы также можете использовать #1, #2, #3 и т. Д., Если отправляете более одного параметра.

Пример использования многопараметрической чистой функции:

Допустим, mydata - это список списков, который нужно отсортировать по медиане списков (например, данные о ценах на жилье из разных городов США):

Sort[ myData , Median[#1] > Median[#2]& ]

Быстрый совет, если выприменяя функцию к одному значению, она может выглядеть аккуратнее и чище, и для ее использования нужно меньше набирать текст @ вместо [], что по сути означает Prefix.Не путайте с Map (/@) или Apply(@@).Приведенная выше команда становится:

Sort[ myData , Median@#1 > Median@#2 & ] 

Вы можете связать @ как таковой: Reverse@Sort@DeleteDuplicates[...]

4 голосов
/ 25 ноября 2010

#1 представляет первый аргумент в чистой функции .

Если у вас несколько аргументов #1, #2, #3 ... ссылаются на первый, второй, третий аргумент и т. Д.

...