Я хочу описать проблему, с которой я столкнулся с Plot
, используя With
, чтобы сохранить определенные параметры "локальными". Я не обязательно прошу исправить: проблема, которую я имею, - это понимание.
Иногда для получения графика я использую следующую конструкцию:
Метод 1
plot1 = With[{vmax = 10, km = 10},
Plot[[email protected]((vmax x)/(km + x)), {x, 0, 100},
AxesOrigin -> {0, 0}]]
Мне нравится этот метод, и даже пользователям, не относящимся к Mathematica, достаточно понятно, что происходит.
Когда уравнения, которые будут построены, становятся более сложными, мне нравится определять их внешними по отношению к сюжету (используя SetDelayed). Например:
f[x_] := (vmax x)/(km + x)
Однако, не работает
Метод 2
plot2 = With[{vmax = 10, km = 10},
Plot[[email protected][x], {x, 0, 100}, AxesOrigin -> {0, 0}]]
Я всегда наивно думал, что нужно. Однако на основе справки, в которой
Участок рассматривает переменную x как локальную, эффективно используя Block
Я использовал различные обходные пути, в основном что-то вроде следующего
Метод 3
plot3 = Plot[With[{vmax = 10, km = 10}, [email protected][x]], {x, 0, 100},
AxesOrigin -> {0, 0}]
Это кажется очень неудобным и обычно требует дополнительного объяснения даже пользователям Mathematica.
Выходные данные графика
Однако недавно я случайно обнаружил, что подстановка Block
для With
в методе 2 работает точно так, как ожидалось.
Я могу, например, сделать что-то вроде следующего (что для меня кажется очень универсальным):
plot4 = Block[{vmax = {10, 10, 10}, km = { 10, 100, 1000}},
Plot[[email protected][x], {x, 0, 100}, AxesOrigin -> {0, 0},
PlotStyle -> {Red, Green, Blue}]]
дает
Мои квесты заключаются в следующем. Каково объяснение различий в поведении с With
в методах 1 и 2? Должен ли я ожидать, что метод 2 не будет работать? Кроме того, что объясняет разницу в поведении с Block
и With
в методе 2? Должен ли я предсказать, что Block
будет работать?
Как ни странно, мне было предложено много обходных решений теми более опытными, чем я, но никто не предлагал использовать Block
.
Наконец, мне нужно сохранить vmax
и km
local. (Они были определены алгебраически в другом месте)