我本想让积分-黎曼求和保持三位精度,运行后确实是3位,可是一拖动滑块立马就失效了
我用的这句代码控制精度的
N[((v0 t0 - v0^2/(2 aa)) -
Total[Area /@
Cases[rectangles, Rectangle[{_, _}, {_, _?(# > 1 &)}], Infinity]
]), 3]
看了半天SE帮助还是束手无策,请大家看看
Manipulate[
rectangles =
Select[Table[{Opacity[0.05], EdgeForm[Gray],
Rectangle[{i (t0 - v0/aa)/n, 0}, {(i + 1) (t0 - v0/aa)/n,
heightfunction[i]}]}, {i, 0, n - 1, 1}], #[[3, 2, 2]] > 1 &];
Show[{Plot[
Which[0 <= x <= t0, v0, x > t0, v0 + aa (x - t0)], {x, 0, s},
PlotStyle -> Thick, AxesOrigin -> {0, 0},
PlotRange -> {0, v0 + 5},
PlotLabel -> Style["黎曼积分求和演示", 18, Blue],
AxesLabel -> {Style["s", 16, Red], Style["m/s", 16, Red]}],
Graphics[{rectangles,
Text[Style[
"显示的矩形面积之和为" <>
ToString[
Total[Area /@
Cases[rectangles, Rectangle[{_, _}, {_, _?(# > 1 &)}],
Infinity]
] // N], 14], {0.7 s, 0.9 ( v0 + 5)}],
Text[Style["积分得到的函数面积为" <> ToString[v0 t0 - v0^2/(2 aa) // N],
14], {0.7 s, 0.85 ( v0 + 5)}],
Text[Style[
"积分-黎曼求和为" <>
ToString[
N[((v0 t0 - v0^2/(2 aa)) -
Total[Area /@
Cases[rectangles, Rectangle[{_, _}, {_, _?(# > 1 &)}],
Infinity]
]), 3]], 14], {0.7 s, 0.8 ( v0 + 5)}]}]},
ImageSize -> Large], {{s, 6}, 1, 20}, {{n, 15}, 1, 80, 1}, {{t0, 1},
0, 2, 0.1}, {{v0, 25}, 0, 50, 1}, {{aa, -2}, -10, -1,
0.1}, {{heightfunction, (Mean[{f[# (t0 - v0/aa)/n],
f[(# + 1) (t0 - v0/aa)/n]}] &)}, {(f[# (t0 - v0/aa)/n] &) ->
"left", (Mean[{f[# (t0 - v0/aa)/n],
f[(# + 1) (t0 - v0/aa)/n]}] &) ->
"midpoint", (f[
RandomVariate[
UniformDistribution[{# (t0 - v0/aa)/n, (# + 1) (t0 - v0/aa)/
n}]]] &) ->
"Uniform random", (f[(# + 1) (t0 - v0/aa)/n] &) -> "right"},
ControlType -> SetterBar},
Initialization :> {f[x_] :=
Which[0 <= x <= t0, v0, x > t0, v0 + aa (x - t0)]}
]

