Другой способ сделать это - определить правила замещения: rule = {vmax -> 10, km -> 10}; Участок [f [x] /. rule, {x, 0, 100}] Преимущество состоит в том, что вы можете повторно использовать правило в других выражениях.
у описать проблему, с которой я столкнулсяPlot
с помощьюWith
сохранить определенные параметры «локально». Я не обязательно прошу исправить: у меня проблема в понимании.
Иногда я использую конструкцию, такую как следующее, чтобы получить участок:
Способ 1
plot1 = With[{vmax = 10, km = 10},
Plot[Evaluate@((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[Evaluate@f[x], {x, 0, 100}, AxesOrigin -> {0, 0}]]
Я всегда наивно думал, что так и должно быть. Тем не менее, на основании справки, что
График обрабатывает переменную x как локальную, эффективно используя Block
Я использовал различные обходные пути, в основном что-то вроде следующего
Способ 3
plot3 = Plot[With[{vmax = 10, km = 10}, Evaluate@f[x]], {x, 0, 100},
AxesOrigin -> {0, 0}]
Этот кажется очень неловким, и обычно требует дальнейшего объяснения дажеMathematica пользователи.
Сюжетные выходы
Однако недавно я случайно обнаружил, что заменаBlock
заWith
в методе 2 работает точно так, как ожидалось.
Я могу, например, сделать что-то вроде следующего (что мне кажется очень универсальным подходом):
plot4 = Block[{vmax = {10, 10, 10}, km = { 10, 100, 1000}},
Plot[Evaluate@f[x], {x, 0, 100}, AxesOrigin -> {0, 0},
PlotStyle -> {Red, Green, Blue}]]
дающий
Мои вопросы следующие. Чем объясняется разница в поведении сWith
в методе 1 и 2? Должен ли я ожидать, что метод 2 не сработает? Кроме того, чем объясняется разница в поведении сBlock
а такжеWith
в методе 2? Должен ли я быть в состоянии предсказать, чтоBlock
должно сработать?
Как ни странно, многие опытные решения были предложены мне более опытными, чем я, но никто не предложил использоватьBlock
.
Наконец, мне нужно сохранитьvmax
а такжеkm
местный. (Они были определены алгебраически в другом месте)