可以尝试将代码分为两部分,第一部分定义函数和计算数据,第二部分绘制图形:
f[r_, y_] := (r^2*y)/(r - 1 - Log[r]);
yIter[r_] := Block[{y0 = 0}, FixedPoint[(# /. y -> Function @@ {1 - Exp[-r #]}) &, y0, 50]];
rList = Range[0, 4, 4/999];
data = Table[{rList[[i]], f[rList[[i]], yIter[rList[[i]]]]}, {i, 1, 1000}];
rLowest = data[[Ordering[data[[All, 2]]][[1]]]];
plot = ListPlot[data, PlotRange -> All, Frame -> True, Axes -> False,
FrameLabel -> {"r", "!(*FractionBox[(r^2*y), (r - 1 - Log[r])])"},
PlotStyle -> PointSize[Tiny], Epilog -> {Red, PointSize[Medium], Point[rLowest]}]
Show[plot]
这样可以避免“SetDelayed”问题。