You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制三角波函数?寻求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:43:18