gnuplot - 在 GNUPLOT 中拟合指数函数
问题描述
我在拟合指数函数时遇到问题 f(x)= A exp(-b x) sin(2 pi*x/T + phi) + S
它一直是一条直线,然后我尝试给它一些 A、b、T、phi、S 的值,它变得更接近数据但仍然很糟糕
解决方案
多维拟合非常重要,算法通常在这一点上失败。尝试通过给出更好的初始猜测来帮助算法。您还可以尝试将变量 1 与 1 进行拟合,例如,S
首先是平均值,然后是周期长度,然后是这 2 个,等等。
还请提供您如何尝试适应该功能以及您使用的 Gnuplot 版本。如果第 3 列包含 0,并且您将其作为错误值提供给 Gnuplot v4 中的 fit,则 fit 完全失败。
在这组给定的数据上,使用错误的猜测,拟合失败。但更好的猜测可能会成功:
f(x)=A*exp(-b*x)*sin(2.*pi*x/T+phi)+S
A = 40.
b = 1/500.
T = 400.
phi = 1.
S = 170.
f_bad_guess(x) = 40. * exp(-x/500.) * sin(2.*pi*x/150+3.) + 170.
f_good_guess(x) = 40. * exp(-x/500.) * sin(2.*pi*x/400+1.) + 170.
fit f(x) "data.txt" via A,b,T,phi,S
p "data.txt" t "data", f(x) t "fitted function", f_good_guess(x) t "good initial guess set manually", f_bad_guess(x) t "bad initial guess set manually"
推荐阅读
- python - 在 python 中将 List 转换为 Json,因此可以通过使用 Key 来访问
- perl - Perl 命令更改文件 EOL 并以相同的名称保存文件
- java - Cucumber Java - JUnit 在命令行上设置单色
- php - 从前端表单向新帖子添加一些图像?
- javascript - 从 C# 到 javascript 的日期时间格式
- c# - 不使用 jObject 反序列化 json
- spring - 在春季为特定文件/文件夹设置缓存控制
- flutter - 火种上的动画就像图像滑动颤动
- java - java - 如何在java中返回二维数组方法的平均分数?
- reactjs - React - 另一个组件中的组件