Python 3错误“溢出错误:(34,‘数值结果超出范围’)

2024-06-12 01:12:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我认为类似的问题已经回答了herehere。 我在执行梯形和辛普森的1by3规则的代码中也遇到了类似的问题。我已经在一台运行良好的桌面上运行了代码,但是使用另一台机器,代码失败了。 我正在共享代码和错误消息

代码

import numpy as np

exp = 5.33333
ul = 10
ll = -10
n = 50

def f(x):                           # The function
    return np.e**x**2

def trapezoidal(ll, ul, n):           #Setting up Trapezoidal rule
    traint = (f(ll) + f(ul)) / 2
    h = (ul - ll) / 2
    for i in range(1,n):
        k = ll + i * h
        traint = traint + f(k)
    traint = h * traint
    return traint

def simpson1by3(ll, ul, n):           #Setting up Simpson 1by3 rule
    simint = (f(ll) + f(ul)) / 2
    h = (ul - ll) / 2
    for i in range(1,n,2):
        simint = simint + (2 * f(ll + i * h)) + (4 * f(ll + ((i + 1) * h)))
    simint = simint * h / 3
    return simint

res_sim = simpson1by3(ll, ul, n)
res_trap = trapezoidal(ll, ul, n)

e_rel_trap = (res_trap - exp) / exp
e_rel_simp = (res_simp - exp) / exp

f1 = open("trap.txt", "w+")
f2 = open("simp.txt", "w+")

for n in range(1,50):
    h = (ul - ll) / 2
    res_trap = trapezoidal(ll, ul, n)
    res_simp = simpson1by3(ll, ul, n)
    f1.write(str(n) + " " + str(res_trap) + '\n')
    f2.write(str(n) + " " + str(res_simp) + '\n')

f1.close()
f2.close()

错误消息是

Traceback (most recent call last):
  File "simpson1by3+trapezoidal.py", line 30, in <module>
    res_sim = simpson1by3(ll, ul, n)
  File "simpson1by3+trapezoidal.py", line 26, in simpson1by3
    simint = simint + (2 * f(ll + i * h)) + (4 * f(ll + ((i + 1) * h)))
  File "simpson1by3+trapezoidal.py", line 11, in f
    return np.e**x**2
OverflowError: (34, 'Numerical result out of range')

Tags: 代码inreturnnprangeresulll
2条回答

这主要是由于本地计算机的限制。 你看,python只为整数和浮点数分配了一些空间 它通常是4表示int,8表示float

在代码中,使用f将数据类型设置为float

您的计算机无法处理占用16字节内存的计算, 如果您确信您的计算或输入中没有小数, 您可以将数据类型更改为整数。。对于输入,如果它仍然不起作用,还考虑改变答案的数据类型/< /p>

希望对你有帮助

似乎您的积分间隔设置错误。如果我没有记错,间隔应该是(b-a)/2n,即ul-ll/nul-ll/2n取决于您的设置,而不是ul-ll/2。将间隔设置为ul-ll/2会使实际的积分上限太大,对于像e**x**2这样的函数,它溢出了最大Pythonic浮点范围(在我的计算机上大约为1.8e308==2^1024==FP256 max)

相关问题 更多 >