- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有看起来像第二类贝塞尔函数的数据(并且可以说应该由这些函数之一来描述)。
我一直在尝试按照文档示例使用 scipy 优化工具箱来执行此操作,但到目前为止没有成功:我收到以下错误消息
ValueError: array must not contain infs or NaNs
我想说 0 的分歧是问题的原因。
顺便说一句,我正在尝试拟合两个参数,即贝塞尔函数的索引和变量中的比例因子,即 K a(bx) 中的 a 和 b。尝试拟合离散空间是否有问题(a 取自然整数值)。
我的代码现在看起来像这样:
from scipy.special import yn #importing the Bessel functions
from scipy.optimize import curve_fit
def func(var, a, b):
return yn(b*var,a)
popt, pcov = curve_fit(func, x, y) # x and y are my data points
最佳答案
首先,您要传递到 yn
参数顺序错误,应该是yn(a,b*var)
而不是yn(b*var,a)
。可能正是这个错误导致了函数yn
炸至inf
.
第二点,正如您所怀疑的那样,scipy
将截断您的 a
当您调用 yn
时为 float ,筹集RuntimeWarning
。您最好仅针对缩放变量 b
进行优化,然后研究整数阶 a
的不同值。您可以手动或循环执行此操作。
我将从一个示例开始讨论一些收敛问题,拟合 sin(x)/2
与 yn(1,x)
上[1,2*pi]
.
from scipy.special import yn
from scipy.optimize import curve_fit
from numpy import sin,linspace,pi
a=1#choose the order a here!
func = lambda var,b : yn(a,b*var)
x=linspace(1,2*pi,100)
y=sin(x)/2.#we fit this as an example
[b], pcov = curve_fit(func, x, y) # x and y are my data points
print b
如果您现在将域名更改为 x=linspace(0,2*pi,100)[1:]
,恰好curve_fit
不会收敛。这是因为在接近于零的域部分中,优化算法将尝试挤压 yn
朝向轴。这导致 b
的值很大,这反过来会导致函数的强烈振荡行为(尝试 plot(x,yn(a,10*x))
)达到离散化极限(尝试 plot(x,yn(a,10*x))
),情况会变得更糟。
寓意是,如果您的数据接近于零,则 x
,你应该开始拟合离零稍远的地方以获得良好的收敛性。
作为旁注,通常是Ka(x)
指的是第二类 MODIFIED Bessel 函数,而 yn
是第二类贝塞尔函数,通常称为 Ia(x)
.
关于python - 使用 scipy 在贝塞尔函数(第二类)上拟合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22097185/
我有以下数字数组: var array = [5,9,12,19,23,24,31,44,49,62]; 我试图找出每一个是偶数和合数,奇数和合数,还是奇数和素数。我首先尝试找到偶数和合数: for
我是一名优秀的程序员,十分优秀!