我有一个计算Bessel函数的算法和一个RuntimeWarning错误:double_scalars中遇到的无效值不断弹出
RuntimeWarning:在double_scalars中遇到无效的值
r [i] [j] = r [i] [j-1] +(r [i] [j-1] -r [i-1] [j-1])/(4 ** j -1)
我还有一个看起来像这样的数组,很明显,我不想要任何nans。
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[nan 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[nan nan 0. 0. 0. 0. 0. 0. 0. 0.]
[nan nan nan 0. 0. 0. 0. 0. 0. 0.]
[nan nan nan nan 0. 0. 0. 0. 0. 0.]
[nan nan nan nan nan 0. 0. 0. 0. 0.]
[nan nan nan nan nan nan 0. 0. 0. 0.]
[nan nan nan nan nan nan nan 0. 0. 0.]
[nan nan nan nan nan nan nan nan 0. 0.]
[nan nan nan nan nan nan nan nan nan 0.]]
代码:
import numpy as np
from pylab import *
def romberg(f,a,b,n):
i=0
j=0
h = float(b) - float(a)
r[i][j] = (float(h/2)) * (f(float(a)) + f(float(b)))
for i in range(n):
h=h/2
sum=float(0)
for k in range(2**i-1):
k=float(1)
sum = float(sum) + f(float(a + k*h))
r[i][0]=(float(1/2))*r[i-1][0] + sum*h
for j in range(i):
# error occurs on this line:
r[i][j] = r[i][j-1] + (r[i][j-1]-r[i-1][j-1])/(4**j-1)
def funkcja(t):
return np.cos(np.sin(t))/np.pi
r = np.zeros((10, 10))
wynik=romberg(funkcja,0,np.pi,10)
print(r)
这里应该更改什么?
答案 0 :(得分:0)
请注意,range(n)
为您提供了从0到n-1
(含)的列表。因此,4**j-1
将在循环中首次计算为0,这将导致尝试除以零。
代码似乎希望两个range
调用的形式均为range(1, n)
。