我想使用 来拟合一些数据点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)
我实际上期望某种平滑的曲线。有人可以解释我在这里做错了什么吗?
我收集了一些数据来分析加速度随时间的变化。但是当我编写下面的代码以很好地拟合正弦波时,结果就是这样。这是因为我没有足够的数据还是我在这里做错了什么?
在这里你可以看到我的图表:
直接绘制测量结果(不适合)
适合水平和垂直移动(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) 我有一组XY值(即散点图),我想要一个Pascal例程来生成适合这些点的N阶多项式的系数,就像Excel一样.
我正在尝试使用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,我得到了一个合理的结果
我有两个变量的散点图,例如:
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,exponential和logarithmic.
我正在考虑将每个函数拟合到我的值,计算每种情况下的可能性并比较AIC值.
但我真的不知道如何或从哪里开始.任何可能的帮助将非常感激.
非常感谢你提前.
蒂娜.
我一直试图使用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) 我正在尝试使用以下数据与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并发现了类似的问题,但我无法解决问题.我真的想在不改变轴的情况下绘制数据.
任何帮助深表感谢.
以下是y基于传感器(列x)的值计算的距离(列).
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)
我想曲线拟合找到基于此函数的常量a和b数据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) 我有一些数据,我已经拟合正常分布使用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值的不确定性/误差.我怎么能这样做?
我有一大段代码,它的核心功能适合数据.要拟合的数据和功能是动态的.最近我向整个系统添加了一个额外的数据点,现在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) curve-fitting ×10
python ×6
scipy ×4
data-fitting ×3
numpy ×3
r ×2
delphi ×1
gaussian ×1
ggplot2 ×1
matlab ×1
matplotlib ×1
nls ×1
pascal ×1
regression ×1
statistics ×1