matlab - 如何对实验数据进行非线性数据拟合函数

标签 matlab gnuplot curve-fitting originlab igor

我有一些实验数据。因此,我需要拟合以下函数来确定变量之一。此过程中使用了Levenberg–Marquardt 最小二乘算法。

我在 Igor Pro 软件中使用了曲线拟合选项。我定义了新的拟合函数并尝试定义自变量和因变量。 尽管如此,我不知道出现此错误的原因是什么:

"The fitting function returned INF for at least one X variable"

我的功能是:

sin(theta) = -1+2*sqrt(alpha/x)*exp(-beta*(x-alpha)^2)

beta = 1.135e-4;

sin(theta) = [-0.81704 -0.67649 -0.83137 -0.73468 -0.66744 -0.43602 0.45368 0.75802 0.96705 0.99717 ]

x = [72.01 59.99 51.13 45.53 36.15 31.66 30.16 29.01 25.62 23.47 ]

有什么建议可以在这里找到alpha变量吗?

是否有任何方便的软件或程序用于非线性曲线拟合?

最佳答案

在 gnuplot 中,它看起来像这样。拟合不太好,但这不是 gnuplot 的“错误”,但显然这个数据不能很好地与这个函数拟合。

代码:

### nonlinear curve fitting
reset session

$Data <<EOD
72.01 -0.81704
59.99 -0.67649
51.13 -0.83137
45.53 -0.73468
36.15 -0.66744
31.66 -0.43602
30.16 0.45368
29.01 0.75802
25.62 0.96705
23.47 0.99717
EOD

f(x) = -1+2*sqrt(alpha/x)*exp(-beta*(x-alpha)**2)

# initial guessed values
alpha = 25
beta = 1
set fit nolog results
fit f(x) $Data u 1:2 via alpha,beta

plot $Data u 1:2 w lp pt 7, \
    f(x) lc rgb "red"

print sprintf("alpha=%g, beta=%g",alpha,beta)
### end of code

结果:

alpha=25.818, beta=0.0195229

enter image description here

关于matlab - 如何对实验数据进行非线性数据拟合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56514076/

相关文章:

matlab - 使用 matlab 挤出 2D 轮廓

matlab - 为什么有时我使用 |有时|| MATLAB 中的 "or"?

matlab - Matlab Computer Vision 工具箱可以检测附近或接近的多个人吗?

java - 在 Java 中将 double[][] 获取到 MATLAB 矩阵的最快方法是什么?

gnuplot - 更改 Axis 的比例

r - 设置指数衰减截距

r - 以最快、最灵活的方式绘制超过 200 万行平面文件数据?

gnuplot - gnuplot 上的相关系数

python - 将参数传递给函数以进行拟合

python - 使用 Python 将指数修正高斯曲线拟合到数据