Metapost 中的 sin(1/x) 图表

Metapost 中的 sin(1/x) 图表

如何在 metapost 中绘制 sin(1/x) 的图形,其范围是 0 附近的任何区间,例如 (0.0001, 2)?我尝试使用 for 循环。它不起作用。求助。

beginfig(0)
  for i=1 upto 100:
    draw (50*2/i,50*sind(i*180/2))..(50*2/(i+1),50*sind((i+1)*180/2)); 
  endfor;
endfig;
end 

在此处输入图片描述

在此处输入图片描述

答案1

更新

发布的desired picture原始代码是不是适用,因为所需图片中的横轴可能是对数刻度。另外,随着图片更新,OP 原来放入1/x第一个坐标和x第二个坐标的逻辑也有意义了。

修改后的代码图的横轴采用对数刻度。它还使用不等采样间隔(以三部分/循环绘制)来减少内存大小(我的程序在大循环中崩溃)。

我已经使用 METAPOST a user’s manual, John D. Hobby et.al version: 1.999MetaPost: A Reference Manual, Peter Grogono, 22 June 2014来查找函数名称和循环语法。

更新了 sin(1/x)

beginfig(0)
outputformat := "png";
% graphs like this are best plotted with unequal sample distances to reduce 
%memory usage and ensure fidelity.
for i=10 step 0.2 until 100:
draw (mlog(1/i),      50*sind(i*180/2))..
     (mlog(1/(i+0.2)),50*sind((i+0.2)*180/2)); 
endfor;

for i=1 step 0.1 until 10:
draw (mlog(1/i),      50*sind(i*180/2))..
     (mlog(1/(i+0.1)),50*sind((i+0.1)*180/2)); 
endfor;

for i=0.1 step 0.1 until 1:
draw (mlog(1/i),      50*sind(i*180/2))..
     (mlog(1/(i+0.1)),50*sind((i+0.1)*180/2)); 
endfor;
endfig;
end

原始答案

免责声明:我不知道 metapost。但是,当您绘制 sin(1/x) 时,不是暗示水平轴是 吗x?但是您的示例代码1/i在水平轴的坐标中。我将其更改为i。类似地,我将 sin 的参数更改为与 成比例,1/i而不是i。还sind以度为单位进行参数。因此可能不需要多余的180。我添加了一些随机常数以使图形看起来不错;即没有混叠。这是您期望的图片的样子吗?由于1/x在接近零时增加非常快,因此很难获得比这里显示的更多的周期,除非您以对数轴或其他方式绘制。

罪(1/x)

beginfig(0)
  for i=20 upto 400:
    draw (i,    50*sind(1000000/i))..
         ((i+1),50*sind(1000000/(i+1))); 
  endfor;
endfig;
end

相关内容