如何绘制三角波函数?寻求gnuplot实数取模限制的解决办法
解决gnuplot实数取模限制及绘制三角波
一、实数取模的替代方案
gnuplot 5.x版本的%运算符仅支持整数运算,要处理实数取模,直接用内置的fmod()函数即可,它专门针对浮点型数值实现取模计算:
a = fmod(5.0, 2.0) print a # 输出结果为1.0
fmod(x, y)的返回值完全符合数学上的实数取模逻辑,当x或y为小数时也能正常工作。
二、绘制三角波函数
三角波可以通过fmod()结合绝对值、线性变换快速实现,以下是几种实用的写法:
1. 基础三角波(周期2,振幅1,取值范围-1~1)
set xrange [-5:5] set yrange [-1.5:1.5] tri(x) = 2*abs(fmod(x, 2) - 1) - 1 plot tri(x) title "周期2的三角波"
逻辑说明:先用fmod(x, 2)把x限制在02区间,减1后得到-11的范围;取绝对值转为0~1区间,再通过2*... -1拉伸并平移到-1~1的三角波形态。
2. 自定义周期和振幅的三角波
如果需要调整周期(设为T)和振幅(设为A),可以修改公式适配需求,比如生成周期4、振幅2的三角波:
set xrange [-8:8] set yrange [-2.5:2.5] tri(x) = 2*(2*abs(fmod(x, 4) - 2)/4 - 1) plot tri(x) title "周期4、振幅2的三角波"
简单调整规则:修改fmod(x, 4)里的4改变周期,修改最外层的2改变振幅即可。
3. 用floor函数实现的替代方案
如果不想用fmod(),也可以通过floor()函数实现三角波:
tri(x) = 2*(x - 2*floor(x/2 + 0.5)) plot tri(x) title "基于floor的三角波"
这个写法同样能生成周期2、取值范围-1~1的三角波。
内容的提问来源于stack exchange,提问作者coderodde
相关产品推荐
相关产品推荐

