gnuplot - 我想用整数参数拟合一个函数
问题描述
我想用 GNUPLOT 拟合一个类似于傅立叶展开的函数。我有 3 个带有许多参数的术语,这些参数应该是整数和实数。
我不知道如何设置一些变量以适合整数
我有类似的东西,其中 n1,n2,n3 应该是整数,而其他参数是实数:
g(x)=(A1*(1+cos(n1*x-b1))+A2*(1+cos(n2*x-b2))+A3*(1+cos(n3*x-b3)))/2
fit g(x) file u ($1+4):(f($2,E_min)) via A1,A2,A3,b1,b2,b3,n1,n2,n3
解决方案
也许这可能对您的问题过于简单,但我希望对您有所帮助。假设你有一个这样的文件:
# data.dat
0.000 4.313
10.417 4.868
20.833 5.115
31.250 4.858
41.667 3.942
52.083 3.213
62.500 2.153
72.917 1.403
83.333 0.967
93.750 1.130
104.167 1.439
114.583 2.175
125.000 2.699
135.417 3.319
145.833 3.448
156.250 3.319
166.667 2.884
177.083 2.352
187.500 1.933
197.917 1.530
208.333 1.611
218.750 2.046
229.167 2.375
239.583 2.826
250.000 3.213
您可以执行第一次拟合以查找参数值,然后在其中写入包含此类值的文件并将其传递给第二次拟合命令。
# Function
g(x) = (A1*(1+cos(n1*x-b1))+A2*(1+cos(n2*x-b2))+A3*(1+cos(n3*x-b3)))/2
# Initial values
A1 = 1.0; n1 = 1.0; b1 = 1.0
A2 = 1.5; n2 = 2.0; b2 = 2.0
A3 = 2.0; n3 = 3.0; b3 = 3.0
set fit prescale
# First fit command
fit g(x) "data.dat" u 1:2 via A1,A2,A3, b1,b2,b3, n1,n2,n3
诀窍是用你想要的值四舍五入。
# File to second fit command
set print "parameters.dat"
print sprintf("A1 = %g", A1)
print sprintf("A2 = %g", A2)
print sprintf("A3 = %g", A3)
print sprintf("b1 = %g", b1)
print sprintf("b2 = %g", b2)
print sprintf("b3 = %g", b3)
print sprintf("n1 = %.0f # FIXED", n1)
print sprintf("n2 = %.0f # FIXED", n2)
print sprintf("n3 = %.0f # FIXED", n3)
unset print
该parameters.dat
文件如下所示:
A1 = 1.15639
A2 = 1.61595
A3 = 2.45079
b1 = 46.054
b2 = 12.2914
b3 = 65.8431
n1 = 1 # FIXED
n2 = 2 # FIXED
n3 = 3 # FIXED
现在是第二个 fit 命令和最终图表:
# Second fit command
fit g(x) "data.dat" u 1:2 via "parameters.dat"
plot "data.dat" u 1:2 w p ls -1 pt 7, g(x) w l lc "red" lw 2
当然现在的参数有点不同。
A1 = 0.901065
A2 = 1.59511
A3 = 2.63525
b1 = 29.8406
b2 = 34.2084
b3 = 60.7824
我希望能帮助你。
推荐阅读
- sharepoint-online - 在新选项卡中打开 Sharepoint 文档库链接
- r - 如何在 R 中创建阻塞的悬挂缩进报告格式(最好使用 gt)
- angular - Ionic 5 电子邮件反应式表单验证
- asp.net-mvc - 使用 .net 核心的 JWT Auth 令牌过期无法正常工作
- html - Flexbox 在缩小屏幕宽度时溢出屏幕
- list - 列表图块没有显示颤动中的所有数据?
- ruby-on-rails - 设计请求环境无
- amazon-web-services - AWS 经典负载均衡器是否在 tls 终止后保留 SNI?
- r - 如何在 R 中选择分组数据的特定部分?
- amazon-web-services - 使用已安装的软件和服务器配置创建 EC2 的 AMI