我想描述我一直有一个问题与Plot使用With,以保持定义的参数"本地".我不一定要求解决问题:我遇到的问题是理解问题.
有时候我使用如下的结构来获得一个Plot:
方法1
plot1 = With[{vmax = 10, km = 10},
Plot[Evaluate@((vmax x)/(km + x)), {x, 0, 100},
AxesOrigin -> {0, 0}]]
Run Code Online (Sandbox Code Playgroud)
我喜欢这种方法,即使对于非Mathematica用户来说,它也是相当清楚的.
当要绘制的方程式变得更加复杂时,我喜欢在绘图外部定义它们(使用SetDelayed).例如:
f[x_] := (vmax x)/(km + x)
Run Code Online (Sandbox Code Playgroud)
但是,以下不起作用
方法2
plot2 = With[{vmax = 10, km = 10},
Plot[Evaluate@f[x], {x, 0, 100}, AxesOrigin -> {0, 0}]]
Run Code Online (Sandbox Code Playgroud)
我一直天真地认为它应该.但是,基于Help语句
Plot将变量x视为本地,有效地使用Block
我使用过各种解决方法,大多数情况如下
方法3
plot3 = Plot[With[{vmax = 10, km = 10}, Evaluate@f[x]], {x, 0, 100},
AxesOrigin -> {0, 0}]
Run Code Online (Sandbox Code Playgroud)
这个看起来很尴尬,甚至通常需要对Mathematica用户进一步解释.
绘图输出

但是,最近我发现偶然的机会,取代 …