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

Gnuplot函数绘图与预期不符:无随机性及Y轴水平异常排查

问题分析:Gnuplot脚本未呈现随机性且Y轴异常的原因

你想要生成带有rnd(x)函数随机性的Gnuplot图,参考图有明显的随机波动,但自己写的脚本生成的图只有相似形态却没有随机效果,还存在Y轴水平不符合预期的问题。我来帮你拆解这两个问题的核心原因:

一、随机性缺失的关键原因

你误解了Gnuplot内置函数的用途:

  • normal(x,mu,sigma)是正态分布的概率密度函数(PDF),它是一个确定性函数,输入x会返回对应位置的概率密度值,而不是生成随机数!你现在的rnd(x)是基于x计算的固定值,整个pot_t(x)自然是完全确定的曲线,没有随机波动。
  • 要生成服从正态分布的随机数,得用Gnuplot的rand(0)函数结合转换方法(比如Box-Muller算法)来实现。

修正方法

替换脚本里的随机数生成部分:

# 初始化随机种子,每次运行生成不同的随机序列
set seed time(0)
# Box-Muller算法生成标准正态分布随机数
rand_normal() = sqrt(-2*log(rand(0)))*cos(2*pi*rand(0))
# 生成符合你需求的随机项
rnd(x) = 10**(-(rand_normal()*sigma)/10)

这样每次计算rnd(x)时,都会生成一个新的正态随机数,让pot_t(x)产生预期的随机波动。

二、Y轴水平不符的原因

你的脚本里的尺寸设置和终端参数可能导致了Y轴显示异常:

  • set size 1, 1.2会把图的纵向拉长1.2倍,可能让Y轴看起来“不水平”;
  • 你用的postscript终端默认尺寸可能和参考图不匹配,导致轴的显示比例失调。

修正方法

  • 可以先尝试去掉set size 1, 1.2,或者调整为更均衡的比例(比如set size 1,1);
  • 给终端添加明确的尺寸参数,保证输出比例正常:
set terminal postscript color eps enhanced size 8, 6

(尺寸数值可以根据你的需求调整,8和6代表宽高的英寸数)

修正后的完整脚本示例

set encoding iso_8859_1
set key right top font "Helvetica,17"
set ylabel "Received power, P_t (dBm)" font "Helvetica,18"
set xlabel "Separation distance, r (m)" font "Helvetica,18"
set xtics font "Helvetica,16"
set ytics font "Helvetica,16"
set size 1, 1
set terminal postscript color eps enhanced size 8, 6
set grid xtics ytics
set key spacing 1.5
set key box linestyle 1 width 3
set logscale x
set grid xtics mxtics
set output "link-up-test.eps"

h1=1.85
h2=0.5
r(x) = sqrt((h1 - h2)**2 + x**2 )
lmb = 300/865.7
H(x) = sqrt( 1- (4*h1*h2)/(x**2 + (h1 + h2)**2 ) )
theta(x) = 2*pi/lmb*( sqrt((h1 + h2)**2+x**2 ) - sqrt((h1 - h2)**2+ x**2) )
q_e(x) = H(x)**2*(sin(theta(x)))**2 + (1 - H(x)*cos(theta(x)))**2
P_x_G = 4
sigma = 1.94

# 修正后的随机数生成逻辑
set seed time(0)
rand_normal() = sqrt(-2*log(rand(0)))*cos(2*pi*rand(0))
rnd(x) = 10**(-(rand_normal()*sigma)/10)

pot_t(x) = 10*log10( 1000*(P_x_G*1.622*((300/lmb)**2) *0.5*1) / (((4*pi*r(x))**2) *1.2*1)*q_e(x)*rnd(x) )

# 用linespoints可以更清晰看到随机波动的细节
plot [1:12][] pot_t(x) t "up" w linespoints ls 1

内容的提问来源于stack exchange,提问作者pablo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:42:23