Что означает # в Mathematica?
Кто-нибудь знает, что # в примере 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]
точно?
Спасибо.
Ответы
Ответ 1
Это заполнитель для переменной.
Если вы хотите определить функцию y (x) = x ^ 2, вы можете просто сделать:
f = #^2 &
И "впрыскивает" переменную в знак #. Это важно для спаривания и и #, когда у вас есть вложенные функции.
In: f[2]
Out: 4
Если у вас есть функция, работающая на двух варах, вы можете сделать:
f = #1 + #2 &
So
In: f[3,4]
Out: 7
Или у вас может быть функция, работающая в списке, поэтому:
f = #[[1]] + #[[2]] &
Итак:
In: f[{3,4}]
Out: 7
О Root[]
Согласно Mathematica help:
Root[f,k] represents the exact kth root of the polynomial equation f[x]==0 .
Итак, если ваш poly равен 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]:= [email protected][-1 - 2 #1 - #1^2 + 2 #1^3 + #1^4 &, 1]
Out[7]= -2.13224
Итак, Root[f,k]
является своего рода стенографической записью для корней многочленов с порядком > 3. Я избавляю вас от объяснения радикалов и нахождения полиномиальных корней... к лучшему, думаю,
Ответ 2
Как узнать, что такое встроенный синтаксис в Mathematica:
- Копировать выражение
- Do TreeForm [Удерживать [вставить выражение здесь]].
- Мышь над части дерева для определения рассматриваемого синтаксиса, в этом случае Slot
- Введите "? Slot"
Ответ 3
Обозначение #
(как указано выше) используется для обозначения "переменная идет здесь" в чистой функции ( "закрытие" для вас традиционных разработчиков). Он должен всегда следовать в конце &
.
Лучший пример: f[x_]:=x+5
. Это создает задержанный набор, который в любое время, когда значение передается в ссылку на символ f
в качестве функционального параметра, этому значению будет дано локальное контекстное функциональное имя x
(не влияя на глобальное определение x
, если таковой существует). Тогда выражение x+5
будет оцениваться с использованием этой новой переменной/значения. Вышеупомянутый процесс требует инициализации символа f
, локальной переменной x
, а выражение x+5
постоянно хранится в памяти, если вы не очистите его.
Боковое примечание: f=5
и f[x_]:=5
работают как "Символ" f
. f
можно назвать функцией, когда квадратные скобки используются для извлечения ее значения, а f[x_]
может мирно сосуществовать с f[x_,y_]
без переопределения друг друга. Один из них будет использоваться при отправке одного параметра, а другой - при отправке 2 параметров.
Несколько раз вам просто нужна быстрая функция, и вам не нужно определять ее и оставлять ее висящей. Итак, (someValue + 5)
становится (#+5)&
, где &
говорит: "Я чистая функция и буду работать с тем, что вы мне отправляете", а #
говорит: "Я - параметр (или список параметров) который был отправлен на чистую функцию". Вы также можете использовать #1
, #2
, #3
и т.д., Если вы отправляете более 1 параметра.
Пример многопараметрической чистой функции общего пользования:
Скажем, mydata
- список списков, которые вам нужно отсортировать по медиане списков (например, данные о ценах на жилье из разных городов США):
Sort[ myData , Median[#1] > Median[#2]& ]
Быстрая подсказка, если вы применяете функцию к одному значению, она может выглядеть более аккуратно и чище и использует меньше типизации для использования @
вместо []
, что по существу означает Prefix
. Не путайте с Map (/@)
или Apply(@@)
. Вышеуказанная команда будет выглядеть следующим образом:
Sort[ myData , [email protected]#1 > [email protected]#2 & ]
Вы можете связать @
как таковой: [email protected]@DeleteDuplicates[...]
Ответ 4
#1
представляет первый аргумент в чистой функции.
Если у вас есть несколько аргументов #1
, #2
, #3
... ссылаются на первый, второй, третий аргументы и т.д.