Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 输入不正确:N=3不得超过M=1(尝试拟合高斯函数时出错)_Python_Curve Fitting - Fatal编程技术网

Python 输入不正确:N=3不得超过M=1(尝试拟合高斯函数时出错)

Python 输入不正确:N=3不得超过M=1(尝试拟合高斯函数时出错),python,curve-fitting,Python,Curve Fitting,我对python和曲线拟合非常陌生,目前我正在尝试用高斯曲线拟合下面的图形 我正在跟踪,我的代码如下所示 import numpy as np import matplotlib.pyplot as plt from pylab import genfromtxt from matplotlib import pyplot from numpy import sqrt, pi, exp, linspace,loadtxt from lmfit import Model def gaussia

我对python和曲线拟合非常陌生,目前我正在尝试用高斯曲线拟合下面的图形

我正在跟踪,我的代码如下所示

import numpy as np
import matplotlib.pyplot as plt
from pylab import genfromtxt
from matplotlib import pyplot
from numpy import sqrt, pi, exp, linspace,loadtxt
from lmfit import Model

def gaussian(x,amp,cen,wid):
    "1-d gaussian: gaussian(x,amp,cen,wid)"
    return (amp/(sqrt(2*pi)*wid))*exp(-(x-cen)**2/(2*wid**2))


filelist=[]
time=[0.00,-1.33,-2.67,-4.00,-5.33,-6.67,1.13,2.67,4.00,5.33,6.67]
index=0
offset=0

filelist.append('0.asc')

for i in range(1,6):
    filelist.append("-%s00.asc" %(i))

for i in range(1,6):
    filelist.append("+%s00.asc" %(i))

sfgpeaks=[]


for fname in filelist:
    data=np.genfromtxt(fname,delimiter=',',unpack=True,skip_footer=20)
    SFGX=data[0,500:530]
    SFGY=data[1,500:530]
    SFGpeakY=np.max(SFGY)
    sfgpeaks.append(SFGpeakY)

    gmodel = Model(gaussian)
    result = gmodel.fit(SFGpeakY, x=time[index], amp=5,cen=5,wid=3)

    plt.plot(time[index],sfgpeaks[index],'ro')
    plt.plot(time[index],result.init_fit, 'k--',label="Gaussian Fit")

    plt.xticks(time)
    index=index+1

print(pump2SHGX)
pyplot.title("Time Delay-SFG peak")
plt.xlabel("Timedelay[ps]")
plt.ylabel("Counts[arb.unit]")
plt.savefig("796and804nmtimesfg")
plt.legend(bbox_to_anchor=(1.0,0.5))
plt.show()
然而,当我尝试将我拥有的数据(上面图形的时间延迟和Y值)添加到高斯参数中时,我得到了一个错误。 我得到的错误是

类型错误:输入不正确:N=3不得超过M=1

是否因为我试图将数组中的值插入参数而导致此错误

非常感谢您的帮助。

您有

 result = gmodel.fit(SFGpeakY, x=time[index], amp=5,cen=5,wid=3)
它传递1个值作为
x
,传递1个值作为数据。然后在该点对模型进行评估。错误消息是fit抱怨您有3个变量和1个值

您可能希望将数据数组
SFGY
x
设置为
SFGX

 result = gmodel.fit(SFGY, x=SFGX, amp=5,cen=5,wid=3)
虽然我不清楚你所附的图中使用了哪些数据

另外:您可能希望根据数据给出
amp
cen
wid
的初始值。您的
SFGpeakY
可能是对
amp
的合理猜测,
SFGX.mean()
SFGX.std()
可能是合理猜测或
cen
wid


另外:绘制
结果。初始拟合
标记为“高斯拟合”<代码>结果。初始拟合将是使用参数初始值评估的模型。优化参数的最佳拟合将出现在
结果中。最佳拟合

请添加回溯-错误出现在哪里?抱歉,这是“阅读错误消息”问题之一。您希望将三个参数拟合到一个点。注意
SFGpeakY=np.max(SFGY)
仅为一个值,因此
M=1
我的印象是,您要拟合的数据来自所有文件,因此您需要先建立此数据集,拟合不能在该循环内。感谢您的评论!当我在环外进行装配时,它起作用了!谢谢你的回答!我在环路外进行了拟合,误差消失了。我将Y设置为数组sfgpeaks,将x设置为数组时间。然而,卡方值太大,这意味着数据甚至不符合模型。。可能必须重新考虑我的数据输入。除非你发布你实际运行的代码,否则很难知道你做了什么。您的原始代码中有很多额外的消息内容。把它分解成一个最小的例子(这也会帮助你)。此外,您还应查看并包括拟合报告(
print(result.fit_report())
),该报告将显示拟合统计信息以及优化的参数值和不确定性。