我有一个计算贝塞尔函数的算法和一个错误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(
我还有一个数组,看起来像这样,显然我不想有任何nan。
[[ 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)
这里应该更改什么?
请注意,range(n)
为您提供了一个从0到n-1
(包括0和2(的列表。因此,4**j-1
将在循环中第一次求值为0,这导致尝试除以零。
看起来代码希望两个range
调用的形式都是range(1, n)
。