我正在尝试去混合低分辨率光谱的发射线以获得高斯分量。该图代表我正在使用的数据类型:

经过一番搜索后,我发现的唯一选择是应用 kmpfit 包中的 gauest 函数(http://www.astro.rug.nl/software/kapteyn/kmpfittutorial.html#gauest)。我复制了他们的示例,但无法使其工作。
我想知道是否有人可以为我提供任何替代方法来执行此操作或如何更正我的代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize
def CurveData():
x = np.array([3963.67285156, 3964.49560547, 3965.31835938, 3966.14111328, 3966.96362305,
3967.78637695, 3968.60913086, 3969.43188477, 3970.25463867, 3971.07714844,
3971.89990234, 3972.72265625, 3973.54541016, 3974.36791992, 3975.19067383])
y = np.array([1.75001533e-16, 2.15520995e-16, 2.85030769e-16, 4.10072843e-16, 7.17558032e-16,
1.27759917e-15, 1.57074192e-15, 1.40802933e-15, 1.45038722e-15, 1.55195653e-15,
1.09280316e-15, 4.96611341e-16, 2.68777266e-16, 1.87075114e-16, 1.64335999e-16])
return x, y
def FindMaxima(xval, yval):
xval = np.asarray(xval)
yval = np.asarray(yval)
sort_idx = np.argsort(xval)
yval = yval[sort_idx]
gradient = np.diff(yval)
maxima = …Run Code Online (Sandbox Code Playgroud)
我试图建立一个曲线拟合,考虑基于相同 x 值和相同(指数)定律的多个 y 系列。该系列中的 y 值略有不同,因为它们是实验性的,但仍然很接近(x 相同)。
我尝试构建两个数组:一个包含 x,另一个包含两个不同系列的 y
def f(x,a,b,c):
return a*numpy.exp(-b*x)+c
xdata=numpy.array([data['x'],data['x']])
ydata = numpy.array([data['y1'], data['y2']])
popt, pcov=curve_fit(f,xdata,ydata)
Run Code Online (Sandbox Code Playgroud)
但出现这个错误:
TypeError: Improper input: N=3 must not exceed M=2
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个错误或进行这种曲线拟合的正确方法?
我正在尝试为“时间”和“伏特”np 数组中的数据创建一条曲线拟合。当我尝试拟合数据时,出现错误“无法估计参数的协方差”。如果我输入其他数据点,它会起作用。我不确定这里可能出了什么问题。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame
time = np.array([100,80,70,60,55,50,45,40,35,30,25,22,20])
volts = np.array([6.28,6.04,5.72,5.32,5.08,4.80,4.44,3.96,3.40,
2.80,2.01,1.40,1.01])
## Defining exp func for curve fit
def func(x, a ,b):
return a * (1 - 2*np.exp(-b * x))
params, extras = curve_fit(func, time, volts)
print(params)
plt.scatter(time, volts)
x_data = np.arange(5,110)
plt.plot(x_data, params[0]*(1-2*np.exp(-params[1]*x_data)))
plt.show()
Run Code Online (Sandbox Code Playgroud)
例如,如果我使用数据:
volts = np.array([2.56, 2.54, 2.52, 2.46, 2.4, 2.38, 2.30, 2.26, 2.18, 2.08, 1.95, …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一系列数据拟合到指数方程中,我在这里找到了一些很好的答案:How to do exponential and logarithmic curvefitting in Python? 我只发现了多项式拟合,但它不包含解决这个问题所需的步骤。
我试图将y和x拟合为一个方程:y = -Ae Bx + A。最后的A已被证明是一个大麻烦,我不知道如何转换log(y) = log(A) + Bx等方程,就好像最后的 A 不存在一样。
任何帮助表示赞赏。
我正在尝试将此 X、Y、Z 数据集拟合到未知表面。
不幸的是,线性拟合不足以显示表面数据。我认为多项式拟合可能适合这种情况。另外,问题是我不知道如何构建多项式拟合函数来完成曲面拟合。
任何帮助都会很棒。
谢谢
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X = [[2, 2, 2], [1.5, 1.5, 1.5], [0.5, 0.5, 0.5]]
Y = [[3, 2, 1], [3, 2, 1], [3, 2, 1]]
Z = [[2.4, 2.5, 2.2], [2.4, 3, 2.5], [4, 3.3, 8]]
# ================= Plot figure ================= ##
Fontsize_set = {'size': 20}
fig = plt.figure(figsize=[8, 5], dpi=140, facecolor='w')
ax = fig.gca(projection='3d')
ax.grid(color='y', linestyle='--', linewidth=0.5)
ax.tick_params(labelsize=20)
ax.set_xlim3d(0, 3)
ax.set_ylim3d(0, 6) …Run Code Online (Sandbox Code Playgroud) 我想为每个因素拟合三个不同的函数(var.test)。我尝试了以下方法,但收到错误消息Warning messages: 1: Computation failed in stat_smooth() :invalid formula。还有其他方法可以同时读取多个公式吗?
set.seed(14)
df <- data.frame(
var.test = c("T","T","T","T","M","M","M","M","A","A","A","A"),
val.test = rnorm(12,4,5),
x = c(1:12)
)
my.formula <- c(y~x + I(x^2), y~x, y~x + I(x^2))
ggplot(df, aes(x = x, y = val.test)) + geom_point() +
geom_smooth(method="glm", formula = my.formula,
method.args = list(family = "poisson"), color = "black" ) + facet_grid(.~var.test)
Run Code Online (Sandbox Code Playgroud)
这段代码给了我平均值,但我不知道如何得到+ 1sd和-1 sd行.
y<-lowess(x[,1],x[,2],f=0.01)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我有许多熔化曲线,我想用R代码确定最小(谷)和最大(峰)之间最陡部分的斜率(拐点处的斜率对应于熔点).我能想象的解决方案是确定每个点的斜率然后找到最大正值,或者通过使用drc包拟合4参数Weibull型曲线来确定拐点(基本上对应于50%响应)最小值和最大值之间的点.在后一种情况下,棘手的部分是必须将每个曲线的拟合限制在最小(谷值)和最大(峰值)荧光响应之间的温度范围.每条曲线的温度范围不同.
感谢任何反馈!
我有一些时间序列数据,我试图使用polyfitNumpy中的函数拟合曲线.我已使用该date2num函数将日期时间x值转换为数字,并绘制了原始数据,即大约600个数据点(01-01-2014 - 10-08-2015).
我试图导出曲线的表达式,以便我可以近似预测未来的数据点,例如在我绘制的数据之后的30天内.然而,当以任何顺序绘制时,我的多项式表达式都是偏离的.我确信我正在做一些明显错误的事情,但似乎无法破解它.
x = df["dates"]
y= df["brand"]
poly = numpy.polyfit(x, y, 5)
polynomial = numpy.poly1d(poly)
xs = numpy.linspace(x[0], x[-1]+60, len(x)+60)
y_int = polynomial(xs)
plt.plot(x, y)
plt.plot(xs, y_int)
plt.show()
Run Code Online (Sandbox Code Playgroud)
下图显示了蓝色的原始曲线.
我打算做一个简单的线性拟合具有两个numpy的阵列y1和y2长度54各自的。该函数定义如下:
def f(x,b):
return b*x
Run Code Online (Sandbox Code Playgroud)
数据绘制在这里:
然后我尝试通过以下方式拟合:
popt, pcov = scop.curve_fit(f,y2,y1) # yes y1 and y2 are in right order
Run Code Online (Sandbox Code Playgroud)
结果: popt = 1., pcov = inf
我尝试过p0 = -833,结果差不多是多少,但这给了我popt = -833, pcov = inf。
我使用示例函数尝试了一些示例数据:
x = np.array(range(10))
y = x**2 + 3
def fu(x,b):
return x**2 + b
po, pc = scop.curve_fit(fu,x,y)
print po, pc
Run Code Online (Sandbox Code Playgroud)
结果很好:3和2e-33
有人对第一次审判出了什么问题有想法吗?我还没有发现任何有用的东西或与我的问题有关的信息...
curve-fitting ×10
python ×7
numpy ×6
scipy ×5
r ×3
gaussian ×1
ggplot2 ×1
optimization ×1
poisson ×1