【问题标题】:Gnuplot. A singular function fitting A*(sin(b*x)/(b*x))**2Gnuplot。一个奇异函数拟合 A*(sin(b*x)/(b*x))**2
【发布时间】:2017-05-05 18:17:14
【问题描述】:

如何使用f(x) = A*(sin(b*x)/(b*x))**2 拟合数据?

data.dat文件内容为:

    -3.7 0.020505941
    -3.6 0.015109903
    -3.5 0.010044806
    -3.4 0.005648897
    -3.3 0.002285005
    -3.2 0.000332768
    -3.1 0.000179912
    -3 0.002212762
    -2.9 0.006806212
    -2.8 0.014313401
    -2.7 0.025055358
    -2.6 0.039310897
    -2.5 0.057307025
    -2.4 0.079210158
    -2.3 0.105118386
    -2.2 0.135055049
    -2.1 0.168963812
    -2 0.206705453
    -1.9 0.24805647
    -1.8 0.292709632
    -1.7 0.340276504
    -1.6 0.390291948
    -1.5 0.442220555
    -1.4 0.495464883
    -1.3 0.549375371
    -1.2 0.603261707
    -1.1 0.65640542
    -1 0.708073418
    -0.9 0.757532157
    -0.8 0.804062127
    -0.7 0.846972303
    -0.6 0.88561423
    -0.5 0.919395388
    -0.4 0.947791533
    -0.3 0.970357695
    -0.2 0.986737575
    -0.1 0.996671108
    0 1
    0.1 0.996671108
    0.2 0.986737575
    0.3 0.970357695
    0.4 0.947791533
    0.5 0.919395388
    0.6 0.88561423
    0.7 0.846972303
    0.8 0.804062127
    0.9 0.757532157
    1 0.708073418
    1.1 0.65640542
    1.2 0.603261707
    1.3 0.549375371
    1.4 0.495464883
    1.5 0.442220555
    1.6 0.390291948
    1.7 0.340276504
    1.8 0.292709632
    1.9 0.24805647
    2 0.206705453
    2.1 0.168963812
    2.2 0.135055049
    2.3 0.105118386
    2.4 0.079210158
    2.5 0.057307025
    2.6 0.039310897
    2.7 0.025055358
    2.8 0.014313401
    2.9 0.006806212
    3 0.002212762
    3.1 0.000179912
    3.2 0.000332768
    3.3 0.002285005
    3.4 0.005648897
    3.5 0.010044806
    3.6 0.015109903
    3.7 0.020505941
    3.8 0.025925906

我的拟合代码如下:

f(x) = A*(sin(b*x)/(b*x))**2;
A = 1;
b = 1;
fit f(x) "data.dat" u 1:2 via A,b;
plot [x=-3:3] f(x);

我收到一个错误函数评估期间未定义值

【问题讨论】:

  • 嗯,f(0) 是未定义的,对吧?
  • 是的,你完全正确。
  • @Zachary Vance 但是情节不注意零的问题,但适合死。为什么?

标签: gnuplot curve-fitting data-fitting


【解决方案1】:

我猜想与 plot 不同,fit 不会忽略正在评估的函数产生未定义值的点。在您的特定情况下,您可能会重新制定问题并将f(x)*x*x 拟合到y(x)*x*x 以消除零处的“奇点”。例如:

set terminal pngcairo
set output 'fig.png'

f(x) = A*(sin(b*x)/(b*x))**2;
g(x) = A*(sin(b*x)/(b))**2;

fit g(x) 'data.dat' u 1:($2*$1*$1) via A, b;

plot \
    g(x)/(x*x) t 'fit', \
    'data.dat' w p t 'points'

这会产生:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-04-11
    • 2023-03-27
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多