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

如何在gnuplot中拟合a*cos(x)**b函数以验证马吕斯定律?

马吕斯定律拟合问题的解决方法

问题原因

直接用fit a*cos(x)**b 'data_malus.txt' via a,b拟合时,当x接近π/2(1.5708)或3π/2(4.7124),cos(x)趋近于0,此时cos(x)**b对指数b的变化异常敏感,拟合算法极易陷入局部最优解,导致得到远超预期的b值(如145.994),完全偏离马吕斯定律的指数2。

可行解决方案

方案1:固定指数为2,仅拟合I₀

马吕斯定律的核心形式是$I = I_0 * cos^2(\theta)$,直接固定指数为2,只拟合系数a(即I₀):

fit a*(cos(x))**2 'data_malus.txt' via a

该方法能直接得到符合预期的I₀值,与你数据中x=0时的825高度匹配。

方案2:限定指数范围,验证是否接近2

若需验证指数是否接近2,可给b设置初始值和合理范围,避免算法跑偏:

b=2  # 设置初始值为2
fit [b=1.8:2.2] a*(cos(x))**b 'data_malus.txt' via a,b

通过限定b在2附近的区间,拟合结果会更贴近理论值。

方案3:对数转换拟合(需剔除异常点)

将公式取对数变形为$\ln(I) = \ln(I_0) + 2\ln(|cos(x)|)$,但注意x=π/2和3π/2附近cos(x)趋近于0,对数无意义,需先剔除这两个I=3.2的数据点,再执行拟合:

fit log_a + b*log(abs(cos(x))) 'data_malus.txt' using 1:(log($2)) via log_a,b
I0 = exp(log_a)

最终得到的b应接近2,I0接近825。

数据特性验证

你的数据完全符合马吕斯定律的对称规律:x=0、π、2π时I达到最大值825,x=π/2、3π/2时I趋近于0,因此固定指数为2的拟合是最贴合理论的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:13:15