标签: curve-fitting

如何使用“scipy.optimize.curve_fit”平滑拟合我的数据点?

我想使用 来拟合一些数据点scipy.optimize.curve_fit。不幸的是,我的身体不稳定,我不知道为什么。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

M = np.array([730,910,1066,1088,1150], dtype=float)
V = np.array([95.71581923, 146.18564513, 164.46723727, 288.49796413, 370.98703941], dtype=float)

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

popt, pcov = curve_fit(func, M, V, [0,0,1], maxfev=100000000)
print(*popt)

fig, ax = plt.subplots()
fig.dpi = 80

ax.plot(M, V, 'go', label='data')
ax.plot(M, func(M, *popt), '-', label='fit')

plt.xlabel("M")
plt.ylabel("V")
plt.grid()
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我实际上期望某种平滑的曲线。有人可以解释我在这里做错了什么吗?

python curve-fitting scipy

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

我怎样才能使这个正弦波与我当前的数据相匹配?

我收集了一些数据来分析加速度随时间的变化。但是当我编写下面的代码以很好地拟合正弦波时,结果就是这样。这是因为我没有足够的数据还是我在这里做错了什么?

在这里你可以看到我的图表:

直接绘制测量结果(不适合)

在此输入图像描述

适合水平和垂直移动(curve_fit)

在此输入图像描述

linspace 增加数据

在此输入图像描述

手动操纵幅度

在此输入图像描述

编辑:我通过使用 linspace 函数并绘制它来增加数据大小,但我不确定为什么幅度不匹配,是因为需要分析的数据很少吗?(我能够手动操纵幅度,但我不明白为什么它不能做到这一点)

我用于拟合的代码

def model(x, a, b):

    return a * np.sin(b * x)

param, parav_cov = cf(model, time, z_values)

array_x = np.linspace(800, 1400, 1000)

fig = plt.figure(figsize = (9, 4))

plt.scatter(time, z_values, color = "#3333cc", label = "Data")

plt.plot(array_x, model(array_x, param[0], param[1], param[2], param[3]), label = "Sin Fit")
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib curve-fitting data-fitting

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

在哪里可以获得Excel风格的多项式回归曲线拟合的Delphi/Pascal实现?

我有一组XY值(即散点图),我想要一个Pascal例程来生成适合这些点的N阶多项式的系数,就像Excel一样.

delphi pascal regression curve-fitting polynomial-math

3
推荐指数
2
解决办法
4575
查看次数

使用Matlab的曲线拟合失败了

我正在尝试使用fit命令行在Matlab中拟合曲线.输入数据是:

X =

     1
     2
     4
     5
     8
     9
    10
    13

Y =

1.0e-04 *

    0.1994
    0.0733
    0.0255
    0.0169
    0.0077
    0.0051
    0.0042
    0.0027
Run Code Online (Sandbox Code Playgroud)

目标函数是

Y = 1/(kappa*X.^a)
Run Code Online (Sandbox Code Playgroud)

我正在使用fittype,fitoptions并且fit如下:

model1 = fittype('1/(kappa*x.^pow)');
opt1 = fitoptions(model1);
opt1.StartPoint = [1e-5 -2];
[fit1,gof1] = fit(X,Y.^-1,model1,opt1)
Run Code Online (Sandbox Code Playgroud)

我得到的结果rsquare大约是-450,与测量的方向相同.我附上了一个数字来证明这一点.如何提高Matlab的拟合技巧?

编辑:

我删除了.^-1fit命令.这改善了行为,但并不完全正确.如果我将model1设置为:

model1 = fittype('1/(kappa*x.^pow)');
Run Code Online (Sandbox Code Playgroud)

适合不好.如果我将它设置为:

model1 = fittype('kappa*x.^pow');
Run Code Online (Sandbox Code Playgroud)

拟合是好的(kappa是一个非常小的数字,而pow是负的).

我也正常化了Y,我得到了一个合理的结果

matlab curve-fitting

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

如何估算R中散点图的最佳拟合函数?

我有两个变量的散点图,例如:

x<-c(0.108,0.111,0.113,0.116,0.118,0.121,0.123,0.126,0.128,0.131,0.133,0.136)

y<-c(-6.908,-6.620,-5.681,-5.165,-4.690,-4.646,-3.979,-3.755,-3.564,-3.558,-3.272,-3.073)
Run Code Online (Sandbox Code Playgroud)

我想找到更适合这两个变量之间关系的函数.

准确地说,我想拟合比较三种模式:linear,exponentiallogarithmic.

我正在考虑将每个函数拟合到我的值,计算每种情况下的可能性并比较AIC值.

但我真的不知道如何或从哪里开始.任何可能的帮助将非常感激.

非常感谢你提前.

蒂娜.

r curve-fitting model-fitting

3
推荐指数
2
解决办法
5022
查看次数

scipy curve_fit错误:遇到零除零

我一直试图使用scipy.optimize.curve_fit将函数拟合到某些数据一段时间:

from __future__ import (print_function,
                    division,
                    unicode_literals,
                    absolute_import)
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as mpl
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,     20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
y = np.array([20.8, 20.9, 22.9, 25.2, 26.9, 28.3, 29.5, 30.7, 31.8, 32.9, 34.0, 35.3, 36.4, 37.5, 38.6, 39.6, 40.6, 41.6, 42.5, 43.2, 44.2, 45.0, 45.8, 46.5, 47.3, 48.0, …
Run Code Online (Sandbox Code Playgroud)

python runtime-error curve-fitting scipy

3
推荐指数
2
解决办法
4713
查看次数

使用ggplot2拟合nls - 类型为"symbol"的错误对象不是子表

我正在尝试使用以下数据与ggplot配合: df <- data.frame(t = 0:30, m = c(125.000000, 100.248858, 70.000000, 83.470795, 100.000000, 65.907870, 66.533715, 53.588087, 61.332351, 43.927435, 40.295448, 44.713459, 32.533143, 36.640336, 40.154711, 23.080295, 39.867928, 22.849786, 35.014645, 17.977267, 21.159180, 27.998273, 21.885735, 14.273962, 13.665969, 11.816435, 25.189016, 8.195644, 17.191337, 24.283354, 17.722776)

我到目前为止的代码(有点简化)是

ggplot(df, aes(x = t, y = m)) +
geom_point() +
geom_smooth(method = "nls", formula=log(y)~x)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误

Error in cll[[1L]] : object of type 'symbol' is not subsettable
Run Code Online (Sandbox Code Playgroud)

我浏览了stackoverflow并发现了类似的问题,但我无法解决问题.我真的想在不改变轴的情况下绘制数据.

任何帮助深表感谢.

r curve-fitting nls ggplot2 data-fitting

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

函数类型的曲线拟合:y = 10 ^((ax)/ 10*b)

以下是y基于传感器(列x)的值计算的距离(列).

test.txt - 内容

x   y   
----------


-51.61  ,1.5
-51.61  ,1.5
-51.7   ,1.53
-51.91  ,1.55
-52.28  ,1.62
-52.35  ,1.63
-52.49  ,1.66
-52.78  ,1.71
-52.84  ,1.73
-52.90  ,1.74
-53.21  ,1.8
-53.43  ,1.85
-53.55  ,1.87
-53.71  ,1.91
-53.99  ,1.97
-54.13  ,2
-54.26  ,2.03
-54.37  ,2.06
-54.46  ,2.08
-54.59  ,2.11
-54.89  ,2.19
-54.94  ,2.2
-55.05  ,2.23
-55.11  ,2.24
-55.17  ,2.26
Run Code Online (Sandbox Code Playgroud)

我想曲线拟合找到基于此函数的常量ab数据test.txt:

Function y = 10^((a-x)/10*b) 
Run Code Online (Sandbox Code Playgroud)

我使用以下代码:

import math

from numpy import genfromtxt  
from …
Run Code Online (Sandbox Code Playgroud)

python numpy curve-fitting scipy

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

有没有办法从scipy.stats.norm.fit中获取参数的拟合错误?

我有一些数据,我已经拟合正常分布使用scipy.stats.normal对象拟合函数,如下所示:

import numpy as np                                                                                                                                                                                                                       
import matplotlib.pyplot as plt                                                                                                                                                                                                          
from scipy.stats import norm                                                                                                                                                                                                             
import matplotlib.mlab as mlab                                                                                                                                                                                                           

x = np.random.normal(size=50000)                                                                                                                                                                                                         

fig, ax = plt.subplots()                                                                                                                                                                                                                 

nbins = 75                                                                                                                                                                                                                               
mu, sigma = norm.fit(x)                                                                                                                                                                                                                  
n, bins, patches = ax.hist(x,nbins,normed=1,facecolor = 'grey', alpha = 0.5, label='before');                                                                                                                                            
y0 = mlab.normpdf(bins, mu, sigma) # Line of best fit                                                                                                                                                                                    
ax.plot(bins,y0,'k--',linewidth = 2, label='fit before')                                                                                                                                                                                 
ax.set_title('$\mu$={}, $\sigma$={}'.format(mu, sigma))                                                                                                                                                                                  

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

我现在想要提取拟合mu和sigma值的不确定性/误差.我怎么能这样做?

python statistics gaussian curve-fitting data-fitting

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

Scipy curve_fit仅对非常特定的x值静默失败

我有一大段代码,它的核心功能适合数据.要拟合的数据和功能是动态的.最近我向整个系统添加了一个额外的数据点,现在curve_fit总是返回初始猜测(或者太接近它的东西),无论我如何选择它.这发生在非常不同的y值和x值(前者的10组,后者的两组)中.

我知道选择起始值很重要,但我以前从未遇到过使用默认值(我的函数通常很简单)的问题,并且可以通过取消注释添加附加数据点的新代码来恢复到它正常工作的状态.现在人们会认为显然新代码是问题所在,但新添加和实际提供数据之间有相当多的步骤curve_fit.我已经检查过输入的类型curve_fit是相同的:np.ndarray在问题情况下只有一个元素.

但是,在创建MWE时,我注意到只有精确的x阵列才会导致问题.当我在MWE中复制主程序的打印x向量而不是内部表示时,它完全消失了.因此我只能用外部文件显示问题:local_z.npy [150kB]

MWE:

import numpy as np
from scipy.optimize import curve_fit

values = np.array([[1.37712972, 1.58475346, 1.78578759, 1.9843099,  1.73393093],
                   [-0.0155715,  -0.01534987, -0.00910744, -0.00189728, -1.73393093],
                   [1.23613934, 0.76894505, 0.18876817, 0.06376843, 1.1637315 ],
                   [0.8535248,  0.53093829, 0.13033993, 0.04403058, 0.80352895],
                   [0.51505805, 0.32039379, 0.0786534,  0.02657018, 0.48488813]])
heights = np.array([ 22.110203,  65.49054,  110.321526, 156.54034,  166.59094])
local_z = np.load('local_z.npy')
print('difference in heights', local_z - heights)

def func(z, a0, a1):
    return a0 + a1*z

for v in values:
    popt_non_working …
Run Code Online (Sandbox Code Playgroud)

python numpy curve-fitting scipy

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