为什么曲线没有画到点 x1 ?
\starttext
\startMPcode
xmin := -1; xmax := 5; ymax :=4 ;ymin:=-4; u := 1cm;
pickup pencircle scaled 1pt ;
a:=2-sqrt(3);
b:=2+sqrt(3);
def compute_curve(suffix f)(expr xmin, xmax, xinc) =
((xmin,f(xmin))
for x=xmin+xinc step xinc until xmax:
.. (x,f(x))
endfor )
enddef;
vardef f(expr x) = x*x-4*x+1 enddef;
path pts_f;
pts_f := compute_curve(f, a, b, .1) scaled u;
path axe_x,axe_y;
path screen;
screen=(xmin,ymin)*u--(xmax,ymin)*u--(xmax,ymax)*u--(xmin,ymax)*u--cycle;
axe_x = (xmin,0)*u -- (xmax,0)*u;
axe_y = (0,ymin)*u -- (0,ymax)*u;
drawarrow axe_x;
drawarrow axe_y;
draw pts_f withcolor blue withpen pencircle scaled 1pt;
label.lrt(btex $x_1$ etex,(a,0)*u);
label.lrt(btex $x_2$ etex,(b,0)*u);
draw (a,0)*u withpen pencircle scaled 3bp;
draw (b,0)*u withpen pencircle scaled 3bp;
clip currentpicture to screen;
\stopMPcode
\stoptext
答案1
您有a=0.26794
和b=3.73206
,因此增加0.1
会导致最终点为x=3.66815
,因为3.66815+0.1>b
(也考虑舍入误差)。
你应该打电话
pts_f := compute_curve(f, a, b, (b-a)/50) scaled u;
可得50分(可自行决定抽样数量)。
使用mpost -numbersystem=double
可能更加精确(我不知道如何在 ConTeXt 中启用它):我们会
a=0.26794919243112281
b=3.7320508075688772
(b-a)/50=0.069282032302755092
最后使用的点有
x=3.7320508075688732
使用默认数字系统,我们有
a=0.26794
b=3.73206
(b-a)/50=0.06927
最后使用的点有
x=3.73169