Определение:
functionB2[x_] := model /. fit
- это инструкция для Mathematica заменить все будущие вхождения выражения, которое выглядит как functionB2[x_]
, результатом замены значения аргумента для каждого вхождения x
в выражении model /. fit
. Но отсутствуют x
в model /. fit
: единственными символами в этом выражении являются model
и fit
(и, технически, ReplaceAll
). Следовательно, определение возвращает фиксированный результат model /. fit
независимо от аргумента. В самом деле, определение может быть просто:
functionB2a[] := model /. fit
Если вы строите график functionB2a[]
, вы получите тот же результат, что и при графике functionB2[anything]
. Зачем? Потому что Plot
будет оценивать это выражение, изменяя символ x
в диапазоне графика. Так получилось, что model /. fit
вычисляет выражение с этим символом, поэтому вы получаете выставленный график.
Теперь рассмотрим functionB1
:
functionB1[x_] = model /. fit
В нем также говорится о замене всех вхождений x
на правой стороне, но на этот раз правая часть оценивается до , определение установлено. Результатом вычисления model /. fit
является выражение, которое содержит , содержит символ x
, поэтому теперь определение чувствительно к переданному значению аргумента. Чистый результат такой, как если бы функция была определена следующим образом:
functionB1a[x_] := 4/Sqrt[3]-0.335/(0.435+x)^2+0.347/(0.712+x)^4-0.27/(4.29+x)
Итак, если вы построите functionB1[Sqrt[x]]
, команда Plot
увидит выражение:
4/Sqrt[3]-0.335/(0.435 +Sqrt[x])^2+0.347/(0.712 +Sqrt[x])^4-0.27/(4.29 +Sqrt[x])
Формальные символы
При создании определений с использованием SetDelayed
имя формального аргумента (в данном случае x
) не зависит от каких-либо вхождений одного и того же символа вне определения. Такие определения могут использовать любой другой символ, и все же генерировать тот же результат. С другой стороны, определения, созданные с использованием Set
(например, functionB1
) , полагаются на результат вычисления правой части, содержащей тот же символ, что и формальный аргумент. Это может быть источником незаметных ошибок, так как нужно позаботиться о том, чтобы не использовать символы, которые случайно имеют ранее существовавшие понижающие значения. Использование формальных символов (описанных в Буквы и Буквоподобные формы ) для имен аргументов может помочь решить эту проблему.