运行时警告:在数组中的double_scalar和nan中遇到无效值



我有一个计算贝塞尔函数的算法和一个错误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)

最新更新