此问题基于之前的类似问题.
我有以下等式和调整后的(一些随机数据):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更准确,而不必仅针对频率采用最小二乘法?
论坛
我有一组数据,显然在 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) 我有这些价值观:
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中使用最小二乘法来解决这个问题,但是我真的不太了解它是如何工作的。谁能帮我?
我正在尝试使用以下数据与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并发现了类似的问题,但我无法解决问题.我真的想在不改变轴的情况下绘制数据.
任何帮助深表感谢.
我正在使用 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
我有一个深色图像(原始格式),并绘制了图像和图像的分布。正如您所看到的,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) 我有一些数据,我已经拟合正常分布使用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 中的 lmfit 模块可以方便地扩展 scipy.optimize 函数的功能。
然而,我没有发现在我看来必要的东西:选择步长的可能性(用于偏导、参数空间中 chi2 的计算等......)。我曾经在 IDL 下安装时玩过这些步骤,我很惊讶我在 python 下没有找到这个。
很明显,默认的步长非常小,在拟合粗略模型时可能会导致恒定的 chi2……因此很尴尬。
所以我的问题是:在 python 下拟合时如何选择步骤?
我正在尝试使用 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)
这是错误:
回溯(最近一次调用最后一次): …
我有一些计数数据。我想用计数数据绘制直方图,并添加负二项式、正态密度函数和泊松密度函数,但将函数拟合到计数数据。
我尝试按照这个示例进行操作,但是(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) data-fitting ×10
python ×5
ggplot2 ×2
matlab ×2
matplotlib ×2
r ×2
distribution ×1
ellipse ×1
fft ×1
gaussian ×1
gnuplot ×1
lmfit ×1
math ×1
nls ×1
octave ×1
scipy ×1
statistics ×1
variables ×1