Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 ValueError:使用序列设置数组元素。在scipy.optimize.minimize+;曲线拟合_Python_Scipy_Curve Fitting_Valueerror_Minimize - Fatal编程技术网

Python ValueError:使用序列设置数组元素。在scipy.optimize.minimize+;曲线拟合

Python ValueError:使用序列设置数组元素。在scipy.optimize.minimize+;曲线拟合,python,scipy,curve-fitting,valueerror,minimize,Python,Scipy,Curve Fitting,Valueerror,Minimize,我是Python的新手,我正在编写一个代码来计算然后拟合磁化数据 首先,我写的是关于参数θ的能量最小化函数 def E_单轴(H,φ,θ,Keff,Ms): e=Keff*(np.cos(θ))**2-((4*np.pi)**2*mu0)*Ms*H*np.cos(θ-phi) 返回e 然后,由于磁化强度强烈地依赖于系统先前的平衡位置,我为“下一个平衡位置”写了一个函数,参数H是假定在先前和新的平衡位置之间变化的参数 def next_theta(Ms、phi、Keff、H、last theta

我是Python的新手,我正在编写一个代码来计算然后拟合磁化数据

首先,我写的是关于参数θ的能量最小化函数

def E_单轴(H,φ,θ,Keff,Ms):
e=Keff*(np.cos(θ))**2-((4*np.pi)**2*mu0)*Ms*H*np.cos(θ-phi)
返回e
然后,由于磁化强度强烈地依赖于系统先前的平衡位置,我为“下一个平衡位置”写了一个函数,参数H是假定在先前和新的平衡位置之间变化的参数

def next_theta(Ms、phi、Keff、H、last theta、fctE):
E=λx:fctE(H,phi,x,Keff,Ms)[0]
结果=scipy.optimize.minimize(E,lasttheta)
返回结果.x
在此之后,我编写了一个函数来计算整个滞后周期。给定已知的起始点,该函数增加H并计算依赖于前一个平衡点的所有平衡点位置(然后减少H并执行相同的过程)

def循环θ(Ms、desfield、Keff、Hmax、θ初始值1、θ初始值2、fctE):
#阿勒
H1=np.linspace(-Hmax,Hmax,2000)
sol1=np.零(np.形状(H1))
sol1[0]=θ_init_1
对于范围内的i(透镜(H1)-1):
sol1[i+1]=下一个θ(Ms,desfield,Keff,H1[i+1],sol1[i],fctE)
#复述
H2=np.linspace(Hmax,-Hmax,2000)
sol2=np.零(np.形状(H2))
sol2[0]=θ_init_2
对于范围内的i(len(H2)-1):
sol2[i+1]=下一个θ(Ms,desfield,Keff,H2[i+1],sol2[i],fctE)
返回H1,sol1,np.翻转(sol2)
然后,为了找到Ms和Keff参数,我必须拟合数据。我定义了这个函数:

def测试配合(H、Ms、Keff):
a=周期θ(Ms,1.,Keff,20,np.pi,0.,E_单轴)[1]
idx=0
如果存在(H,浮动):
idx=找到最近的(a,H)
打印('float')
返回np.sin(a[idx])
如果存在(H,np.N阵列):
c=np.零(np.形状(H))
对于范围内的i(len(H)):
idx=找到最近的(a,H[i])
c[i]=a[idx]
打印('数组')
返回np.sin(c)
类型上的条件似乎是函数使用曲线拟合所必需的。 最后我调用
popt=curve\u fit(test\u fit,b,sig)
,其中“b”和“sig”是我的实验数据

但是我多次从
scipy.optimize.minimize
,而不是曲线拟合中得到这个错误:

ValueError: setting an array element with a sequence.
我读到这个信息可以来自这样一个事实:能量函数E_uniaxial返回一个数组而不是一个标量,但实际上它是一个非常规则的函数:如果你输入一个标量,你得到一个标量,如果你输入一个数组,你得到一个数组。 所以我真的不明白,难道我不应该使用scipy.optimize.minimize和scipy.minimize.curve_将一个拟合到另一个吗


非常感谢你的帮助

scipy.optimize.minimize
docs:最小化一个或多个变量的标量函数。所以我猜你应该修改你的函数来返回一个浮点。此值错误通常在尝试将数字序列放入numpy数组中的单个元素插槽时出现。请问,什么函数需要返回浮点?从
scipy.optimize.minimize
docs:最小化一个或多个变量的标量函数。所以我猜你应该修改你的函数来返回一个浮点。当您尝试将数字序列放入numpy数组中的单个元素插槽时,通常会出现此值错误。请问,什么函数需要返回浮点?