标签: data-fitting

正弦波频率拟合

此问题基于之前的类似问题.

我有以下等式和调整后的(一些随机数据):0.44*sin(N*2*PI/30)

我试图使用FFT从生成的数据中获取频率.然而,频率最终接近但不等于频率(这使得波比预期的大一点)

FFT的最大频率为7hz,但预期频率为(30/2PI)4.77hz.

我已经包含了FFT和绘图值的图表.

替代文字

我使用的代码是:

[sampleFFTValues sFreq] = positiveFFT(sampledata, 1);
sampleFFTValues = abs(sampleFFTValues);
[v sFFTV]= max(sampleFFTValues)
Run Code Online (Sandbox Code Playgroud)

可在此处找到正FFT .基本上它将FFT图中心并切断负信号.

我的问题是如何才能使FFT更准确,而不必仅针对频率采用最小二乘法?

math matlab fft octave data-fitting

4
推荐指数
2
解决办法
7800
查看次数

在 3D 空间中拟合椭圆的数据

论坛

我有一组数据,显然在 3D 空间中形成了一个椭圆(不是椭圆体,而是 3D 中的曲线)。受到以下线程http://au.mathworks.com/matlabcentral/newsreader/view_thread/65773的启发 ,并在某人的帮助下,我设法运行优化代码并输出一组最佳参数x(向量)。然而,当我尝试使用这个 x 来复制椭圆时,结果是空间中的一条奇怪的直线。我已经为此好几天了。仍然不知道出了什么问题......非常沮丧......我希望有人能对此有所启发。椭圆的 Mathematica 公式与上面的线程相同,其中

3D 椭圆由以下公式给出:(x;y;z) = (z1;z2;z3) + R(alpha,beta,gamma)。(a cos(phi); b*sin(phi);0)

其中: * z 是平移向量。* R 是旋转矩阵(使用欧拉角,我们首先绕 x 轴旋转 alpha rad,然后绕 y 轴旋转 beta rad,最后再次绕 z 轴旋转 gamma rad)。* a 是椭圆的长轴 * b 是椭圆的短轴。

这是我的优化目标函数(ellipsefit.m)

function [merit]= ellipsefit(x, vmatrix) % x is the initial parameters, vmatrix stores the datapoints
load vmatrix.txt % In vmatrix, the data are stored: N rows x 3 columns
a = x(1);
b = x(2);c …
Run Code Online (Sandbox Code Playgroud)

matlab ellipse mathematical-optimization data-fitting

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

python中的最小二乘法?

我有这些价值观:

T_values = (222, 284, 308.5, 333, 358, 411, 477, 518, 880, 1080, 1259) (x values)
Run Code Online (Sandbox Code Playgroud)
C/(3Nk)_values = (0.1282, 0.2308, 0.2650, 0.3120 , 0.3547, 0.4530, 0.5556, 0.6154, 0.8932, 0.9103, 0.9316) (y values)
Run Code Online (Sandbox Code Playgroud)

我知道他们遵循模型:

C/(3Nk)=(h*w/(k*T))**2*(exp(h*w/(k*T)))/(exp(h*w/(k*T)-1))**2
Run Code Online (Sandbox Code Playgroud)

我也知道k=1.38*10**(-23)h=6.626*10**(-34)。我必须找到最能描述测量数据的w。我想在python中使用最小二乘法来解决这个问题,但是我真的不太了解它是如何工作的。谁能帮我?

python least-squares data-fitting

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

使用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
查看次数

gnuplot - 获取拟合参数错误,获取拟合输出值作为变量,将变量打印到屏幕

初始问题(部分回答)

我正在使用 gnuplot 的拟合例程来拟合某些数据的函数,并提取“特征衰减时间常数”。(我d在我的拟合函数中调用了这个参数。)

我使用脚本代码set fit quiet来防止大量文本被打印到终端。但是我现在无法知道最终的拟合值是多少!(除了检查日志文件......这是艰巨的......)

有没有办法可以获取最终的拟合参数值,将它们存储在变量中,然后打印该变量?

我想这是 2 个问题合二为一......如何打印变量值?

对初始问题的回答

因此,在玩弄 gnuplot 之后,我发现该print命令可以将变量打印到屏幕上,并且参数(例如)d已经可用作变量 - 即;它们已经是变量。

因此,我可以执行以下操作:print "d=",d- 此处的逗号用于分隔要打印的内容。所以我首先打印一个字符串,"d="然后是d.

下一个问题

如何获取我使用的变量的错误?例如; 如果我拟合一个带有参数 a、b 和 c 的函数,我如何在这些值上打印错误?

variables gnuplot curve-fitting data-fitting function-fitting

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

在直方图python中拟合非标准化高斯

我有一个深色图像(原始格式),并绘制了图像和图像的分布。正如您所看到的,16 处有一个峰值,请忽略它。我想通过这个直方图拟合高斯曲线。我使用这种方法来拟合: Un-normalized Gaussian curve on histogram。然而; 我的高斯拟合从来没有接近它应该的样子。我在将图像转换为正确的绘图格式时是否做错了什么,或者还有其他问题吗? 在此输入图像描述 图像的高斯分布

这是我用来生成此数据的当前代码:

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

def fitGaussian(x,a,mean,sigma):
    return (a*np.exp(-((x-mean)**2/(2*sigma))))

fname = 'filepath.raw'
im = np.fromfile(fname,np.int16)
im.resize([3056,4064])

plt.figure()
plt.set_cmap(viridis)
plt.imshow(im, interpolation='none', vmin=16, vmax=np.percentile(im.ravel(),99))
plt.colorbar()
print 'Saving: ' + fname[:-4] + '.pdf'
plt.savefig(fname[:-4]+'.pdf')

plt.figure()
data = plt.hist(im.ravel(), bins=4096, range=(0,4095))

x = [0.5 * (data[1][i] + data[1][i+1]) for i in xrange(len(data[1])-1)]
y = data[0]

popt, pcov = curve_fit(fitGaussian, x, y, [500000,80,10])
x_fit = py.linspace(x[0], x[-1], 1000) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib curve-fitting data-fitting

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

有没有办法从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
查看次数

python下拟合时选择步长

如您所知,python 中的 lmfit 模块可以方便地扩展 scipy.optimize 函数的功能。

然而,我没有发现在我看来必要的东西:选择步长的可能性(用于偏导、参数空间中 chi2 的计算等......)。我曾经在 IDL 下安装时玩过这些步骤,我很惊讶我在 python 下没有找到这个。

很明显,默认的步长非常小,在拟合粗略模型时可能会导致恒定的 chi2……因此很尴尬。

所以我的问题是:在 python 下拟合时如何选择步骤?

python data-fitting lmfit

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

由于“无法将序列乘以‘numpy.float64’类型的非 int”错误而无法拟合数据

我正在尝试使用 matplotlib 和 scipy 使用线性函数在 .txt 文件中拟合并绘制简单数据(a*x+b)。我遇到了有关测试功能的错误:"can't multiply sequence by non-int of type 'numpy.float64'"

我尝试过更改变量名称x,但遇到了同样的问题。大多数代码来自一个工作代码,该代码能够毫无问题地拟合数据,并对测试函数使用相同的定义。

import matplotlib.pyplot as plt
from scipy import optimize
import numpy as np
f=open("testData.txt","r")
x_data=[]
y_data=[]
trash=f.readline() #discards first line
for line in f: #reads x and y data from file
    x_read,y_read=line.split()
    x_data.append(float(x_read))
    y_data.append(float(y_read))

def test_func(x, a, b):
    return a*x+b

params, params_covariance = optimize.curve_fit(test_func, x_data, y_data, 
p0=[1, 1])
plt.figure(figsize=(6, 4))
plt.scatter(x_data, y_data)
plt.plot(x_data, test_func(x_data, params[0], params[1]), label='Fitted 
function')
plt.show()
Run Code Online (Sandbox Code Playgroud)

这是错误:

回溯(最近一次调用最后一次): …

python matplotlib scipy data-fitting function-fitting

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

如何在相同的 ggplot2 (R) 上拟合负二项式、正态和泊松密度函数,但缩放到计数数据?

我有一些计数数据。我想用计数数据绘制直方图,并添加负二项式、正态密度函数和泊松密度函数,但将函数拟合到计数数据。

我尝试按照这个示例进行操作,但是(a)我无法拟合负二项式和泊松函数(b)无法将其缩放到计数数据级别(c)不知道如何将所有三个函数拟合到同一个图表上,并为每个函数添加图例(d)行另外,我怎样才能获得每个适合的基本统计数据?例如,负二项式拟合将生成参数 k。我怎样才能让它出现在情节上

set.seed(111)
counts <- rbinom(500,100,0.1) 
df <- data.frame(counts)

ggplot(df, aes(x = counts)) + 
  geom_histogram(aes(y=..density..),colour = "black", fill = "white") +
  stat_function(fun=dnorm,args=fitdistr(df$counts,"normal")$estimate)

ggplot(df, aes(x = counts)) + 
  geom_histogram(aes(y=..density..),colour = "black", fill = "white") +
  stat_function(fun=poisson,args=fitdistr(df$counts,"poisson")$estimate)

ggplot(df, aes(x = counts)) + 
  geom_histogram(aes(y=..density..),colour = "black", fill = "white") +
  stat_function(fun=dnbinom,args=fitdistr(df$counts,"dnbinom")$estimate)
Run Code Online (Sandbox Code Playgroud)

r distribution ggplot2 data-fitting

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