标签: curve-fitting

scipy curve_fit 无法正常工作

看起来它只适合第一个参数。

当我尝试使用 curve_fit 示例生成曲线时,这一切都很好,但当我使用自己的数据时却不然。

这是我的原始数据: https: //pastebin.com/0hs2JVXL

为了简单起见,我将其转换为整数,因此这是我输入的数据curve_fit: https: //pastebin.com/2uP0iyTw

这是我试图拟合的曲线(基本上是具有比例值的对数正态分布的公式):

def func(x, k, s, u):
    x=np.array(x)
    return k * (1 / (x * s * np.sqrt(2*np.pi)))  *  np.exp(  - np.power((np.log(x)-u),2)  /  (2*np.power(s , 2)))
Run Code Online (Sandbox Code Playgroud)

这就是我使用它的方式:

graphData.append(
    {
        'x': xdata,
        'y': ydata,
        'name': "data",
        'mode': 'lines'
    }
)

popt, pcov = curve_fit(func, xdata, ydata)

graphData.append(
    {
        'x': xdata,
        'y': func(xdata, *popt),
        'name': "" + "[Fit]",
        'mode': 'lines'
    }
)
Run Code Online (Sandbox Code Playgroud)

但这是我得到的输出数据: https: //pastebin.com/WjaTH9wQ

这些是它正在设置的参数:k=33.06185171 s= 1. u=1.

并可视化: …

python regression numpy curve-fitting scipy

1
推荐指数
1
解决办法
1万
查看次数

R:Optim() 拟合参数限制

我希望限制 optim() 的输出参数。对于我的正弦函数(其中“designL”是我的自变量,“ratio”是我的因变量数据,dfm 是我的数据帧),它不必要地收敛了数千个异相相位:

lo_0 = 2e-6
kc_0 = 80000
min.RSS <- function(data, par) {
  with(data, sum( (sin(par[2] *(par[1] + designL))^2 - ratio)^2) )
}
resultt <- optim(par = c(lo_0, kc_0), min.RSS, data = dfm)
Run Code Online (Sandbox Code Playgroud)

我想从 0:2e-5 限制 lo_0(相移)。我找到了一些关于此的文档,但它没有详细说明如何实现:https : //ubuntuforums.org/showthread.php?t=1420061

optimization r curve-fitting non-linear-regression

1
推荐指数
1
解决办法
2146
查看次数

使用 Math.Net Numerics,如何找到“幂”的曲线拟合

我试图在 Excel 中但在 C# 中重现相同的曲线拟合(称为“趋势”):指数、线性、对数、多项式和幂。

我发现线性和多项式为:

Tuple<double, double> line = Fit.Line(xdata, ydata); 
double[] poly2 = Fit.Polynomial(xdata, ydata, 2);
Run Code Online (Sandbox Code Playgroud)

我还发现了指数拟合

但我想知道如何对 Power 进行曲线拟合。有人有主意吗?

我应该能够获得两个常量,如 Excel 屏幕截图公式中所示:

  • 力量
  • 乘数(x 之前)

在此输入图像描述

c# math curve-fitting pow

1
推荐指数
1
解决办法
3930
查看次数

正态分布的 Scipy MLE 拟合

我试图采用此线程中提出的此解决方案来确定简单正态分布的参数。即使修改很小(基于维基百科),结果也很糟糕。有什么建议哪里出错了吗?

import math
import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt

def gaussian(x, mu, sig):
    return 1./(math.sqrt(2.*math.pi)*sig)*np.exp(-np.power((x - mu)/sig, 2.)/2)

def lik(parameters):

    mu    = parameters[0]
    sigma = parameters[1]    
    n     = len(x)  
    L     = n/2.0 * np.log(2 * np.pi) + n/2.0 * math.log(sigma **2 ) + 1/(2*sigma**2) * sum([(x_ - mu)**2 for x_ in x ])

    return L



mu0    = 10
sigma0 = 2

x = np.arange(1,20, 0.1)
y = gaussian(x, mu0, sigma0)


lik_model = …
Run Code Online (Sandbox Code Playgroud)

python gaussian curve-fitting scipy

1
推荐指数
1
解决办法
5052
查看次数

将数据拟合到后处理非线性模型时,curve_fit 的算法是什么?

我是编程工具和 Python 的新手,对数值计算知之甚少。我试图理解Curve_fit的源代码,但对我来说太难了。

如果我们立即曲线拟合非线性模型,通过计算 Hessian 矩阵,我想我们能够找到所有参数的临界点,无论是局部还是全局,以及最小值或最大值。

但是,如果包含模型的函数无法微分,curve_fit 实际如何计算答案?

我想象该算法是在所有数据点的每个参数的每个间隔中找到 Chi^2 的局部最小值。如果这样做,默认间隔是多大,参数的每次试验之间的距离是多少,最大迭代次数是多少?如果像我说的那样,这个迭代在多个参数之间是如何工作的?他们每次都作为一组单独尝试吗?

我想了解算法,以便我可以编写一个很好的函数来应用curve_fit。我试图适应的函数中存在许多脏修复,不同的错误出现在不同的小更改中,因此我无法将代码放在这里,因为我不知道问题所在。

另外,关于 sigma 输入,如果我不知道 y 错误,如果默认 sigma 与数据值相比太大,结果会怎样?或者,如果模型的灵活性对后期处理影响不大,或者 sigma 远小于数据到函数的距离,会发生什么?

python math curve-fitting numerical-methods

1
推荐指数
1
解决办法
537
查看次数

scipy.curve_fit() 返回多行

我是 python 的新手,并试图使用以下代码来拟合数据集分布。实际数据是一个列表,包含两列——预测市场价格和实际市场价格。我试图使用,scipy.curve_fit()但它给了我在同一个地方绘制的许多线条。任何帮助表示赞赏。

# import the necessary modules and define a func.
from scipy.optimize import curve_fit
from matplotlib import pyplot as plt

def func(x, a, b, c):
    return a * x** b + c

# my data
pred_data = [3.0,1.0,1.0,7.0,6.0,1.0,7.0,4.0,9.0,3.0,5.0,5.0,2.0,6.0,8.0]
actu_data =[ 3.84,1.55,1.15,7.56,6.64,1.09,7.12,4.17,9.45,3.12,5.37,5.65,1.92,6.27,7.63]
popt, pcov = curve_fit(func, pred_data, actu_data)

#adjusting y 
yaj = func(pred_data, popt[0],popt[1], popt[2])

# plot the data
plt.plot(pred_data,actu_data, 'ro', label = 'Data')
plt.plot(pred_data,yaj,'b--', label = 'Best fit')

plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

python matplotlib curve-fitting scipy

1
推荐指数
1
解决办法
1267
查看次数

如何使用 scipy.optimize.curve_fit 在 python 上拟合良好的洛伦兹分布?

我正在尝试拟合具有多个吸收峰(M\xc3\xb6ssbauer 光谱)的洛伦兹函数,但 curve_fit 函数无法正常工作,仅拟合几个峰值。我怎样才能适应它?

\n\n

图:尝试调整多洛伦兹

\n\n

下面我展示我的代码。请帮我。

\n\n
import numpy as np\nimport matplotlib.pyplot as plt\nfrom scipy.optimize import curve_fit\n\ndef mymodel_hema(x,a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4,a5,b5,c5,a6,b6,c6):\n    f =  160000 - (c1*a1)/(c1+(x-b1)**2) - (c2*a2)/(c2+(x-b2)**2) - (c3*a3)/(c3+(x-b3)**2) - (c4*a4)/(c4+(x-b4)**2) - (c5*a5)/(c5+(x-b5)**2) - (c6*a6)/(c6+(x-b6)**2)\n    return f\n\ndef main():\n    abre = np.loadtxt(\'HEMAT_1.dat\')\n    x = np.zeros(len(abre))\n    y = np.zeros(len(abre))\n\n    for i in range(len(abre)):\n       x[i] = abre[i,0]\n       y[i] = abre[i,1]\n\n    popt,pcov = curve_fit(mymodel_hema, x, y,maxfev=1000000000)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的数据 --> https://drive.google.com/file/d/1LvCKNdv0oBza_TDwuyNwd29PgQv22VPA/view?usp=sharing

\n

python curve-fitting

1
推荐指数
1
解决办法
3万
查看次数

python:瑞利拟合(直方图)

我\xe2\x80\x99m 仍在尝试用Python 编程。\n我第一次尝试使用直方图和拟合!

\n

特别是,我有一个数据集,并制作了它的直方图。此时我应该进行瑞利拟合,但我无法找出正确设置参数的正确方法。我读到loc和scale,这应该是fit的参数,通常设置为0和1。显然,这样一来,fit\xe2\x80\x99就不能很好地工作了!有人可以帮助我吗?\n为了明确起见,我附上了我正在使用的代码。

\n

谢谢。

\n
import os \nimport numpy as np\nimport nrrd\nimport nibabel as nib\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport SimpleITK as sitk\nimport scipy.stats\nfrom scipy.stats import rayleigh\nimport math\n\n\n#fit\n\n# Sample from this Random variable\nx0 = np.array(fondi)\n\n# Adjust Distribution parameters\nloc, scale = stats.rayleigh.fit(x0) # (9.990726961181025, \n4.9743913760956335)\n\n# Tabulate over sample range (PDF display):\nxl = np.linspace(x0.min(), x0.max())\n\n# Display Results:\nfig, axe = plt.subplots()\n\naxe.hist(x0,density=1, label="background")\n\naxe.plot(xl,stats.rayleigh(scale=scale, loc=loc).pdf(xl), label="Rayleigh")\naxe.set_title("Distribution Fit")\naxe.set_xlabel("Intensit\xc3\xa0")\n\naxe.legend()\naxe.grid()\n
Run Code Online (Sandbox Code Playgroud)\n

我的数据(fondi)是这样的:[13 15 13 14 12 13 12 14 15 12 11 10 11 …

python numpy histogram curve-fitting scipy

1
推荐指数
1
解决办法
3403
查看次数

在 python 中拟合自定义函数

我正在尝试使用以下函数来拟合我的数据:

在此输入图像描述

我正在使用的数据如下:

X1: 
0        1.0
1      101.0
2      201.0
3      301.0
4      401.0
5      501.0
6      601.0
7      701.0
8      801.0
9      901.0
10    1001.0
11    1101.0
12    1201.0
13    1301.0
14    1401.0
15    1501.0
16    1601.0
17    1701.0
18    1801.0
19    1901.0

Y1: 
0     0.121159
1     0.195525
2     0.167305
3     0.125499
4     0.094138
5     0.071610
6     0.053848
7     0.039890
8     0.031099
9     0.023976
10    0.018271
11    0.013807
12    0.010596
13    0.008033
14    0.006710
15    0.005222
16    0.004299
17    0.003376 …
Run Code Online (Sandbox Code Playgroud)

python function curve-fitting

1
推荐指数
1
解决办法
4636
查看次数

曲线拟合的麻烦 - matplotlib

我试图将sin函数绘制到数据集.我使用scipy.optimize在线发现了一个教程,但即使我完全复制了代码,它似乎也无法工作.

在顶部:

def func(x, a, b, c, d):
    return a * np.sin(b * (x + c)) + d
Run Code Online (Sandbox Code Playgroud)

在末尾:

scipy.optimize.curve_fit(func, clean_time, clean_rate)
pylab.show()
Run Code Online (Sandbox Code Playgroud)

输出窗口上没有行.

如果有人想要屏幕或全部代码,请随时在下面发表评论.

谢谢!

python matplotlib curve-fitting

0
推荐指数
1
解决办法
7583
查看次数