python怎么运⽤函数_如何在python中使⽤step函数
我就是这么做的。我保留了xobs和yobs:import numpy as np
from scipy.optimize import curve_fit
random在python中的意思import matplotlib.pyplot as plt
xobs=np.linspace(0,10,100)
yl=np.random.rand(50); yr=np.random.rand(50)+100
atenate((yl,yr),axis=0)
现在,必须⽣成Heaviside函数。要概述此函数,请考虑Heaviside函数的半最⼤约定:
在Python中,这相当于:def f(x): return 0.5 * (np.sign(x) + 1)
样地为:xval = atenate([np.linspace(-5,5,100),[0]])) # includes x = 0
yval = f(xval)
plt.plot(xval,yval,'ko-')
plt.ylim(-0.1,1.1)
plt.xlabel('x',size=18)
plt.ylabel('H(x)',size=20)
现在,绘制xobs和yobs得到:plt.plot(xobs,yobs,'ko-')
plt.ylim(-10,110)
plt.xlabel('xobs',size=18)
plt.ylabel('yobs',size=20)
注意,⽐较这两个数字,第⼆个图移动了5个单位,最⼤值从1.0增加到100。我推断第⼆个图的函数可以表⽰如下:
或者在Python中:(0.5 * (np.sign(x-5) + 1) * 100 = 50 * (np.sign(x-5) + 1)
组合绘图结果(其中Fit表⽰上述拟合函数)
情节证实了我的猜测是正确的。现在,假设您不知道这个正确的拟合函数是如何产⽣的,将创建⼀个⼴义拟合函数:def f(x,a,b,c): return a * (np.sign(x-b) + c),理论上,a = 50,b = 5,和c = 1。
进⾏估算:
popt,pcov=curve_fit(f,xobs,yobs,bounds=([49,4.75,0],[50,5,2]))。
现在,bounds = ([lower bound of each parameter (a,b,c)],[upper bound of each parameter])。从技术上讲,这意味着49<;
a<;50、4.75<;b<;5和0<;c<;2。
以下是我对popt和pcov的结果:
pcov表⽰估计的popt协⽅差。对⾓线提供参数估计值[Source]的⽅差。
结果表明,参数估计值pcov接近理论值。
基本上,⼴义Heaviside函数可以⽤a * (np.sign(x-b) + c)表⽰
下⾯是⽣成参数估计和相应协⽅差的代码:import numpy as np
from scipy.optimize import curve_fit
xobs = np.linspace(0,10,100)
yl = np.random.rand(50); yr=np.random.rand(50)+100
yobs = np.concatenate((yl,yr),axis=0)
def f(x,a,b,c): return a * (np.sign(x-b) + c) # Heaviside fitting function popt, pcov = curve_fit(f,xobs,yobs,bounds=([49,4.75,0],[50,5,2])) print 'popt = %s' % popt
print 'pcov = \n %s' % pcov
最后,注意popt和pcov的估计值不同。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。